20200625のLinuxに関する記事は6件です。

Linux POSIX オプション、GNU オプションとは

コマンドラインインターフェースの種類

コマンドラインインターフェースは、主にPOSIXGNUの仕様に従って設計されています。

この記事はかなりの部分を以下の参考ページの記述を引用しています。詳しくご覧になりたい方はぜひ、直接参考サイトを御覧ください。

参考: Linux Command Optionの慣習(一般的なOption一覧)

POSIX (ポジックス)

POSIX 【 Portable Operating System Interface 】
POSIXとは、主にUNIX系OSに共通する機能などについて、プログラムからの呼び出し方法などの標準を定めた規格。

カーネルの機能を呼び出すシステムコールをC言語から利用するためのAPI仕様や標準ライブラリ関数などを定めており、POSIX仕様のみを用いて開発されたプログラムはPOSIX準拠のOSならばどれでも同じように動作させることができる。

API以外にも、シェルのコマンド体系や、プロセスやスレッドの仕様、ファイルやディレクトリの構成、パスワードファイルなどのシステムデータベースの形式、アーカイブファイルの形式などについても標準を定めている。

参考: POSIX(Portable Operating System Interface)とは - IT用語辞典 e-Words

POSIXのオプション規格

  • オプションは”-“で始め、オプション文字列は英数字1文字
  • 複数のオプションを使用する場合、”-“を省略して繋げられる (例:”-a -b -c”を”-abc”と表記可)
  • オプションとオプション引数の間は、空白を入れる事
  • オプションは、コマンドライン引数の前に存在する事
  • オプションは、コマンドライン実行時に省略できる事

GNU (グヌー)

*GNU 【 GNU is Not Unix 】 *
GNUとは、フリーソフトウェア(特に、オープンソースソフトウェア)のみでUNIX風のOSと関連するソフトウェア群を開発・公開するプロジェクト。リチャード・ストールマン(Richard M. Stallman)氏が創始し、同氏が代表を務めるフリーソフトウェア財団(FSF:Free Software Foundation)が推進している。

GNUの一環として提供されるソフトウェアの名称には、その一部に「GNU」が含まれたり(GNU Emacsなど)、あるいは先頭が「g」から始まる(gcc、glibcなど)ことが多い。

参考: GNUとは - IT用語辞典 e-Words

GNUのオプション規格

POSIXの規格に従うことを推奨していることに加えて、以下の仕様を加えている。

  • “–“およびオプションのロング名のサポート(例:”-v”に対応する”–version”)
  • オプションとオプション引数が連結した形式のサポート(例:–test=path)
  • “–version”(バージョン表示)および”–help”(ヘルプもしくはUsageの表示)を最低限サポートする事

一般的なオプションの一覧

Short Option Long Option 機能(オプションを実装しているCommand)
a all 全ファイルや全ユーザなどを対象にした処理(du、nm、uname)
b bytes、blocks バイトやブロックのサイズを設定(du、df)
c cmd サブプロセスに渡すCommandおよびOptionを設定(bash、python)
d debug debugメッセージを出力(多くのCommand)
e exclude 除外対象(例:ファイル)を設定(rync)
f file 使用するfileを設定(awk、make、sed、tar)
g group グループを設定(install)
h help Commandを使用する上でのhelpを表示(多くのCommand)
i inodes ブロック使用量の代わりに iノード情報を表示(ls、df)
inodes以外に、interactiveも存在(rm、mv)
j jobs ジョブの数を設定(make)
k keep ファイル・メッセージ・リソースなどの削除を抑制(passwd、bzip)
l list ファイル・ディレクトリなどのリストを表示(unzip、ls)
m mode 権限の設定(install、mkdir)
n number 番号(例:行番号)を表示(head、tail、grep)
o output 出力ファイル名や出力ファイルパスの設定(多くのCommand)
p 多種多様 参考文献を参照
q quiet メッセージの出力を抑制(多くのCommand)
r recursive 再帰的に処理を実行(grep、chgrp、choen、cp、ls、diff、rm)
s silent メッセージの出力を抑制(多くのCommand)
t 多種多様 参考文献を参照
u update アップデートを実行(apt、yum、cp、mv、tar)
v version プログラムのVersion情報を表示(多くのCommand)
w width 幅の設定(ls、ptx)
x extract アーカイブなどから抽出するファイル一覧を表示(tar、zip)
y yes ユーザ確認する処理において、全確認項目に対してユーザがyesと回答したとみなす(apt、yum)
z zip(compress) 圧縮を有効化(tar)

参考

Linux Command Optionの慣習(一般的なOption一覧)

Command-Line Options

Option Table (GNU Coding Standards)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

cent8になったらこんなに楽になったのか

てか、gmone入れてたら、centos7でも同じなのか。

インストールはあんまり変わらない。centos7と同様にざくざく入れていく。
インストールが終了して、再起動したら…またインストールが開始した。
ちぇ。CDマウントしたままだからか。
インストールCDをアンマウントして、再起動したら。
なんと、GUIが立ち上がるよ。GNOMEだって。

VirtualBox_phptest_24_06_2020_22_19_11.png
今まで聞かれたことのない、ライセンス同意をしないとならないらしい。License Infomationをクリックすると、よくある同意画面になる。
VirtualBox_phptest_24_06_2020_22_19_25.png
内容はシンプルだ。ライセンス契約に同意しますにチェックを入れて、右上の完了ボタンをクリック。
初期セットアップ画面に戻ったら、ついでにユーザーの設定をおこなってしまう。
VirtualBox_phptest_24_06_2020_22_21_09.png
ユーザーとパスワードを入力して完了をクリック。
VirtualBox_phptest_24_06_2020_22_20_46.png

しばらく待つと、ユーザー名が表示される。
VirtualBox_phptest_24_06_2020_22_21_31.png
ユーザーをクリックすると、パスワード入力画面が表示されるので、パスワードを入力してサインインをクリック。
VirtualBox_phptest_24_06_2020_22_21_39.png
Welcome画面が表示される。インストール時選んだ言語がチェックされているのでそのまま次へをクリック。
VirtualBox_phptest_24_06_2020_22_22_15.png
キーボードのレイアウト選択。これも日本語がチェック済みなのでそのまま次へ。
VirtualBox_phptest_24_06_2020_22_22_25.png
位置情報サービスってなんだ。こんなものまでついてくるのか。個人的にはNO!にしたいが、とりあえずそのまま次へ。
VirtualBox_phptest_24_06_2020_22_22_39.png
オンラインアカウントへの接続なんて、今時な設定まである。とりあえず何もせず次へ。
VirtualBox_phptest_24_06_2020_22_22_48.png
準備完了!どうなったcentos!
VirtualBox_phptest_24_06_2020_22_22_57.png
いきなりはじめての人用の親切説明が見られる画面が開いた。なんてこった。
VirtualBox_phptest_24_06_2020_22_23_08.png
スクロールしてみた。
VirtualBox_phptest_24_06_2020_22_23_18.png
まあ、どうでもいいので右上の×で画面を閉じる。
デスクトップ画面はこんな感じ。
VirtualBox_phptest_24_06_2020_22_23_32.png
左上の「アクティビティ」をクリックすると、こんな画面になる。
なんかソフトが入っているよ。狐の模様をクリックして、FireFoxを立ち上げてみる。
VirtualBox_phptest_24_06_2020_22_23_50.png
なんと、ネットにつながらない。ネットワーク設定は自力でやれよってことか?この辺のツンデレぶりがlinux感溢れるね。
VirtualBox_phptest_24_06_2020_22_24_17.png
右上の▽をクリックすると、こんな画面が表示される。
VirtualBox_phptest_24_06_2020_22_24_39.png
「有線オフ」の右の参画をクリックしてメニューを表示させると、こんな感じ。優先設定をクリックしてみる。
VirtualBox_phptest_24_06_2020_22_24_58.png
ネットワークの設定画面が開く。有線の設定(歯車マーク)をクリック。
VirtualBox_phptest_24_06_2020_22_25_11.png
ネットワークの設定内容が表示される。
「自動接続する」って、linuxのネットワーク設定でよく見るあれじゃね?
VirtualBox_phptest_24_06_2020_22_25_22.png
チェック入れてみる。
VirtualBox_phptest_24_06_2020_22_25_30.png
興味本位でIPv4タブをクリック。とりあえず自動設定のままにして、適用をクリック。
VirtualBox_phptest_24_06_2020_22_25_41.png
有線が接続済みになった。これでまたFireFoxを立ち上げてみる。
VirtualBox_phptest_24_06_2020_22_25_50.png
なんと、centosのサイトが開いた!これだけでネットワーク設定できたらしい。
VirtualBox_phptest_24_06_2020_22_26_26.png
ついでにみんな大好きGoogle先生もつないでみるよ。
VirtualBox_phptest_24_06_2020_22_26_51.png

でも、このまんまだとホストOSのWindows10からteratermなんかで接続することができない。そういう設定をするには、一旦centosを落として、VirtualBoxの設定から変えないとならない。

設定-ネットワークのアダプター2タブを開き、ホストオンリーアダプターを割り当てる。
image.png
それからcentosを立ち上げて、再度設定を開いてみると、Ethernetが増えている!これがホストオンリーアダプターか!
VirtualBox_phptest_24_06_2020_22_29_49.png
追加されたEthernet(enp0s8)を開いて、接続をクリックしてみる。
VirtualBox_phptest_24_06_2020_22_30_05.png
表示が「オフ」から「接続…」に変わった。なんかつながったらしい。
VirtualBox_phptest_24_06_2020_22_30_19.png
念のため設定を見てみる。
VirtualBox_phptest_24_06_2020_22_30_28.png
ふたつとも接続済み。Ethernet(enp0s8)の設定を開いてみる。
VirtualBox_phptest_24_06_2020_22_30_37.png
IPアドレスが表示される。これが外からつなぐときのIP。
VirtualBox_phptest_24_06_2020_22_30_50.png
IPv4の設定を見てみる。さっきと同じ自動設定。
VirtualBox_phptest_25_06_2020_21_48_37.png
せっかくだから固定IPにしてみる。
VirtualBox_phptest_25_06_2020_21_51_12.png
一回接続をオフにして。
VirtualBox_phptest_25_06_2020_22_27_07.png
もう一回接続する。
VirtualBox_phptest_25_06_2020_22_27_55.png
それでIPアドレスを確認すると、ちゃんと変わっている。すげー。
VirtualBox_phptest_25_06_2020_22_29_12.png
teraterm立ち上げてみる。
image.png

image.png

image.png
つながった!
image.png
今までのコマンドの嵐はなんだったのか。こんなに簡単に設定できるなんて…
とはいえ「いやいや、儂はGUIなぞ信じないぞ!CUIこそ正義じゃ!」を言う人のために、コマンドも入れてみる。
アクティビティから端末をダブルクリック。
VirtualBox_phptest_24_06_2020_22_33_13.png
こんな画面が開く。
VirtualBox_phptest_24_06_2020_22_33_22.png
とりあえずnmtuiとか入れてみる。
VirtualBox_phptest_24_06_2020_22_34_04.png
よく見る画面。
VirtualBox_phptest_24_06_2020_22_34_10.png
ホストオンリーアダプターが「有線接続1」になっている。
VirtualBox_phptest_24_06_2020_22_34_13.png
さっき設定した値がちゃんと入っている。
VirtualBox_phptest_25_06_2020_22_39_44.png

なんか、今までコマンドがしがしで設定していたときと比較すると、あまりに手軽すぎて拍子抜けする。
細かいことは今まで通りコマンドで設定するんだろうけど、linuxもここまでハードル低くなったか…(涙)
みなさんもgnomeではっぴーlinuxらいふを!g

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

centos8になったらこんなに楽になったのか

てか、gmone入れてたら、centos7でも同じなのか。

インストールはあんまり変わらない。centos7と同様にざくざく入れていく。
インストールが終了して、再起動したら…またインストールが開始した。
ちぇ。CDマウントしたままだからか。
インストールCDをアンマウントして、再起動したら。
なんと、GUIが立ち上がるよ。GNOMEだって。

VirtualBox_phptest_24_06_2020_22_19_11.png
今まで聞かれたことのない、ライセンス同意をしないとならないらしい。License Infomationをクリックすると、よくある同意画面になる。
VirtualBox_phptest_24_06_2020_22_19_25.png
内容はシンプルだ。ライセンス契約に同意しますにチェックを入れて、右上の完了ボタンをクリック。
初期セットアップ画面に戻ったら、ついでにユーザーの設定をおこなってしまう。
VirtualBox_phptest_24_06_2020_22_21_09.png
ユーザーとパスワードを入力して完了をクリック。
VirtualBox_phptest_24_06_2020_22_20_46.png

しばらく待つと、ユーザー名が表示される。
VirtualBox_phptest_24_06_2020_22_21_31.png
ユーザーをクリックすると、パスワード入力画面が表示されるので、パスワードを入力してサインインをクリック。
VirtualBox_phptest_24_06_2020_22_21_39.png
Welcome画面が表示される。インストール時選んだ言語がチェックされているのでそのまま次へをクリック。
VirtualBox_phptest_24_06_2020_22_22_15.png
キーボードのレイアウト選択。これも日本語がチェック済みなのでそのまま次へ。
VirtualBox_phptest_24_06_2020_22_22_25.png
位置情報サービスってなんだ。こんなものまでついてくるのか。個人的にはNO!にしたいが、とりあえずそのまま次へ。
VirtualBox_phptest_24_06_2020_22_22_39.png
オンラインアカウントへの接続なんて、今時な設定まである。とりあえず何もせず次へ。
VirtualBox_phptest_24_06_2020_22_22_48.png
準備完了!どうなったcentos!
VirtualBox_phptest_24_06_2020_22_22_57.png
いきなりはじめての人用の親切説明が見られる画面が開いた。なんてこった。
VirtualBox_phptest_24_06_2020_22_23_08.png
スクロールしてみた。
VirtualBox_phptest_24_06_2020_22_23_18.png
まあ、どうでもいいので右上の×で画面を閉じる。
デスクトップ画面はこんな感じ。
VirtualBox_phptest_24_06_2020_22_23_32.png
左上の「アクティビティ」をクリックすると、こんな画面になる。
なんかソフトが入っているよ。狐の模様をクリックして、FireFoxを立ち上げてみる。
VirtualBox_phptest_24_06_2020_22_23_50.png
なんと、ネットにつながらない。ネットワーク設定は自力でやれよってことか?この辺のツンデレぶりがlinux感溢れるね。
VirtualBox_phptest_24_06_2020_22_24_17.png
右上の▽をクリックすると、こんな画面が表示される。
VirtualBox_phptest_24_06_2020_22_24_39.png
「有線オフ」の右の参画をクリックしてメニューを表示させると、こんな感じ。優先設定をクリックしてみる。
VirtualBox_phptest_24_06_2020_22_24_58.png
ネットワークの設定画面が開く。有線の設定(歯車マーク)をクリック。
VirtualBox_phptest_24_06_2020_22_25_11.png
ネットワークの設定内容が表示される。
「自動接続する」って、linuxのネットワーク設定でよく見るあれじゃね?
VirtualBox_phptest_24_06_2020_22_25_22.png
チェック入れてみる。
VirtualBox_phptest_24_06_2020_22_25_30.png
興味本位でIPv4タブをクリック。とりあえず自動設定のままにして、適用をクリック。
VirtualBox_phptest_24_06_2020_22_25_41.png
有線が接続済みになった。これでまたFireFoxを立ち上げてみる。
VirtualBox_phptest_24_06_2020_22_25_50.png
なんと、centosのサイトが開いた!これだけでネットワーク設定できたらしい。
VirtualBox_phptest_24_06_2020_22_26_26.png
ついでにみんな大好きGoogle先生もつないでみるよ。
VirtualBox_phptest_24_06_2020_22_26_51.png

でも、このまんまだとホストOSのWindows10からteratermなんかで接続することができない。そういう設定をするには、一旦centosを落として、VirtualBoxの設定から変えないとならない。

設定-ネットワークのアダプター2タブを開き、ホストオンリーアダプターを割り当てる。
image.png
それからcentosを立ち上げて、再度設定を開いてみると、Ethernetが増えている!これがホストオンリーアダプターか!
VirtualBox_phptest_24_06_2020_22_29_49.png
追加されたEthernet(enp0s8)を開いて、接続をクリックしてみる。
VirtualBox_phptest_24_06_2020_22_30_05.png
表示が「オフ」から「接続…」に変わった。なんかつながったらしい。
VirtualBox_phptest_24_06_2020_22_30_19.png
念のため設定を見てみる。
VirtualBox_phptest_24_06_2020_22_30_28.png
ふたつとも接続済み。Ethernet(enp0s8)の設定を開いてみる。
VirtualBox_phptest_24_06_2020_22_30_37.png
IPアドレスが表示される。これが外からつなぐときのIP。
VirtualBox_phptest_24_06_2020_22_30_50.png
IPv4の設定を見てみる。さっきと同じ自動設定。
VirtualBox_phptest_25_06_2020_21_48_37.png
せっかくだから固定IPにしてみる。
VirtualBox_phptest_25_06_2020_21_51_12.png
一回接続をオフにして。
VirtualBox_phptest_25_06_2020_22_27_07.png
もう一回接続する。
VirtualBox_phptest_25_06_2020_22_27_55.png
それでIPアドレスを確認すると、ちゃんと変わっている。すげー。
VirtualBox_phptest_25_06_2020_22_29_12.png
teraterm立ち上げてみる。
image.png

image.png

image.png
つながった!
image.png
今までのコマンドの嵐はなんだったのか。こんなに簡単に設定できるなんて…
とはいえ「いやいや、儂はGUIなぞ信じないぞ!CUIこそ正義じゃ!」を言う人のために、コマンドも入れてみる。
アクティビティから端末をダブルクリック。
VirtualBox_phptest_24_06_2020_22_33_13.png
こんな画面が開く。
VirtualBox_phptest_24_06_2020_22_33_22.png
とりあえずnmtuiとか入れてみる。
VirtualBox_phptest_24_06_2020_22_34_04.png
よく見る画面。
VirtualBox_phptest_24_06_2020_22_34_10.png
ホストオンリーアダプターが「有線接続1」になっている。
VirtualBox_phptest_24_06_2020_22_34_13.png
さっき設定した値がちゃんと入っている。
VirtualBox_phptest_25_06_2020_22_39_44.png

なんか、今までコマンドがしがしで設定していたときと比較すると、あまりに手軽すぎて拍子抜けする。
細かいことは今まで通りコマンドで設定するんだろうけど、linuxもここまでハードル低くなったか…(涙)
みなさんもgnomeではっぴーlinuxらいふを!g

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

私のための忘備録③viを使った基本的なファイル編集

viコマンド

:e!【ファイル名】 →viを終了せずに現在開いているファイルを閉じて、別ファイルを開く
:e!ファイル名なしなら、現在開いているファイルを最後に保存した時の状態に戻す

:e viを終了せずに現在開いているファイルを閉じて別のファイルを開く
:q →viを終了する。内容が変更されておる時警告が出て終了できない
:q!→viの強制終了
:w 編集内容を保存する
:wq,:x,ZZ 編集内容を保存して、viを終了する
:wq! viを保存し、強制終了する

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux ファイルの属性を理解する(ls -l コマンド)

Mac 前提で書いております。

ファイルの属性とは?

ファイルには内容の他にも、「所有者」や「更新日時」などの情報が付属しています。これらの情報を「属性」と呼びます。

ファイルの属性は、「ls」コマンドの「-l」オプションや(画面1)、「stat」コマンドで確認できます。

-l
(The lowercase letter ``ell''.)  List in long format.  (See below.)  A total sum for all the file sizes is output on a line before the long listing.

すべてのファイルサイズの合計は、リストの前の行に出力されます。

The Long Formatとは

このフォーマットのことです。

-rw-r--r--  1 user  staff   0  6 25 11:01 test

lsのmanで以下のように説明されています。

If the -l option is given, the following information is displayed for each file:
[-lオプションを指定すると、ファイルごとに次の情報が表示されます。]

  • file mode ファイルモード
  • number of links リンクの数
  • owner name 所有者名
  • group name グループ名
  • number of bytes in the file ファイル内のバイト数
  • abbreviated month 省略された月
  • day-of-month file was last modified 最終編集日
  • hour file last modified 最終編集時間
  • minute file last modified 最終編集分
  • the pathname パスネーム
# ファイルの場合
-rw-r--r--  1 user  staff   0  6 25 11:01 test
-rw-r--r--  1 user  staff   0  6 25 11:02 test.c

# ディレクトリの場合
drwxr-xr-x  2 user  staff  64  6 25 11:02 testdir

ファイルモード

ファイルの種類

ls -lでの表示 意味
- 普通のファイル(Regular File)
d ディレクトリ
l シンボリックリンク
c キャラクタ型デバイスファイル(特殊ファイル)
b ブロック型デバイスファイル(特殊ファイル)

パーミッション

以下がわかりやすいです。

参考: 【一通り理解】Linuxパーミッションの基本とその設定方法

chmodコマンドも一緒に理解すると良いです。
chmod は change mode の略だそうです。

パーミッションを指定していディレクトリを作る場合

mkdir -m 777 test

ファイルは作成時に個別にパーミッションを設定することはできないようです。

参考: パーミッションなどを設定する!chmodコマンドの詳細まとめ【Linuxコマンド集】

リンク数

ファイルのリンク数は常に1ではないということも重要なポイントです。
ハードリンクと、シンボリックリンクも異なります。
ハードリンクしている数がリンク数として表示されます。

何を言っているのかさっぱりという方は、以下がわかりやすいです。

参考: Linux: ハードリンクと inode - Qiita

所有者とグループ

ファイルの所有者は通常、作成した人です。

グループについては、以下がわかりやすいです。

参考: Linux グループ一覧の確認と/etc/group ファイル

ファイル内のバイト数

ここは特に解説は不要かと思います。バイト数が表示されます。

タイムスタンプ

ここも不要ですね。更新日時が表示されます。
オプションを付けることでアクセス日などに変更することもできます。

パスネーム

ファイル名が表示されます。

本記事と関係ないですが、私と同じく初心者の方は以下も参考になりますのでどうぞ。
参考: パス名について

参考

参考: 「ls -l」コマンドの表示からファイルの属性を理解しよう (1/4):“応用力”をつけるためのLinux再入門(9) - @IT

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Raspberry PI シリーズで分散環境構築(その7: 各ラズパイ向けの tftp ルート設定と起動試験)

序(連載一覧)

  1. Raspberry PI シリーズで分散環境構築(その1:モデル別、ディスクレスクライアント化の可否まとめ)
  2. Raspberry PI シリーズで分散環境構築(その2: PiServer の解析と代替システムの設計まで)
  3. Raspberry PI シリーズで分散環境構築(その3: dnsmasq のインストールと設定)
  4. Raspberry PI シリーズで分散環境構築(その4: NFSサーバの構築とクライアント用OSのインポート)
  5. Raspberry PI シリーズで分散環境構築(その5: クラスタノード向け Raspberry PI OS のカスタマイズ(1))
  6. Raspberry PI シリーズで分散環境構築(その6: クラスタノード向け Raspberry PI OS のカスタマイズ(2))
  7. Raspberry PI シリーズで分散環境構築(その7: 各ラズパイ向けの tftp ルート設定と起動試験)
  8. Raspberry PI シリーズで分散環境構築(その8: Webクラスタ構築のケース(前半))

本稿は その7 となります。

前回は NFS(またはPXE)サーバ上にインストールした qemu-user-static を利用して、NFSマシンにコピーしたクライアント向け OS イメージをカスタマイズしましたが、今回はこのOSイメージの /boot ディレクトリに対してシンボリックリンクを張ることで tftp ルートとして、起動試験を行います(今回は短めです)。

参考(筆者の環境)

RaspiCloudSystem.png

実際の作業

NFS サーバと PXE サーバが分離されているものとして記載します。

1. PXE サーバから NFS サーバの共有ディレクトリをマウント

1.1. PXE サーバでマウントポイントを作成してマウント

NFS サーバの IP
192.168.172.17
共有ディレクトリ名
/exports/os4pi

NFS/PXE 両サーバ上に qemu-user-static がインストール済みで、どちらからでもラズパイ向けOSをカスタマイズしたい場合は rw 設定にしますが、PXE サーバ上でカスタマイズする必要がない場合は ro で構いません。

# mkdir /mnt/os4pi
# mount -t nfs -o proto=tcp,vers=3,rw,noatime 192.168.172.17:/exports/os4pi /mnt/os4pi

1.2. PXE サーバの /etc/fstab に行を追加して永続化

192.168.172.17:/exports/os4pi   /mnt/os4pi   nfs    tcp,vers=3,rw,noatime,_netdev    0  0

2. dnsmasq で設定した tftp ルートにシンボリックリンクを張っていく

条件

tftp ルート(基準ディレクトリ)
/srv/tftp
ラズパイ2B の MAC アドレス
b8-27-eb-GG-HH-II
ラズパイ2B に割り振られる固定IP
192.168.172.32
ラズパイ2B 向け OS の /boot の位置
/mnt/os4pi/raspbian/armhf/boot
ラズパイ3B の MAC アドレス
b8-27-eb-XX-YY-ZZ
ラズパイ3B に割り振られる固定IP
192.168.172.33
ラズパイ3B 向け OS の /boot の位置
/mnt/os4pi/raspbian/armhf_64/boot
ラズパイ4B の MAC アドレス
dc-a6-32-PP-QQ-RR
ラズパイ4B に割り振られる固定IP
192.168.172.34
ラズパイ4B 向け OS の /boot の位置
/mnt/os4pi/raspbian/aarch64/boot
# cd /srv/tftp
# rm -Rf b8-27-eb-GG-HH-II
# ln -sf /mnt/os4pi/raspbian/armhf/boot b8-27-eb-GG-HH-II
# ln -sf /mnt/os4pi/raspbian/armhf/boot 192.168.172.32
# rm -Rf b8-27-eb-XX-YY-ZZ
# ln -sf /mnt/os4pi/raspbian/armhf_64/boot b8-27-eb-XX-YY-ZZ
# ln -sf /mnt/os4pi/raspbian/armhf_64/boot 192.168.172.33
# rm -Rf dc-a6-32-PP-QQ-RR
# ln -sf /mnt/os4pi/raspbian/aarch64/boot dc-a6-32-PP-QQ-RR
# ln -sf /mnt/os4pi/raspbian/aarch64/boot 192.168.172.34

注意事項

  • IP/MACアドレスはお手持ちのラズパイの実際のアドレスに直してください。
  • 3B/3B+ の場合、 aarch64 にしても問題ありません
  • シンボリックリンクを張る前に、その3 で作成した空フォルダを削除しています。
  • 固定IPでもリンクを張っておきます。こうしておくと dnsmasq の設定を「tftp ルートを IP毎に振り分け」に変更しても対応可能となります

3. ラズパイの試験起動

3.0. 下準備

  1. NFSサーバ→PXEサーバの順で電源投入。ログイン可能になるまで待つ。
  2. その1 を参考に、各モデルをディスクレスブートが可能な状態にしておく

3.1. Raspberry PI 2B の場合

  1. 第1パーテーションが FAT でフォーマットされた空の microSD (容量は少なくて構わない)に、最新の RaspberryPI OS インストーライメージから bootcode.bin ファイルのみをコピーして、ラズパイに挿入
  2. HDMI,キーボード,LANを接続
  3. USB(電源)を接続
  4. microSD 上の bootcode.bin の読み込みが完了し、モニタにカラーグラデーションが出ることを確認。表示されない場合は、microSD が死んでいる(FATフォーマットではない場合を含む)、ラズパイの microSD ドライブが不良、bootcode.bin のファイルコピーに失敗した、のいずれかとなります。
  5. LAN のアクセスランプが点灯することを確認。点灯しない場合は、ラズパイの GPU/SoC が故障している、またはネットワーク接続がきちんと行われていない可能性があります。
  6. 画面にラズパイロゴやブートログが出て来ることを確認(tftp の設定まではOKということ)。画面が真っ黒のまま進行しない場合は tftp サーバ自体の設定ミス、tftpサーバ上にある config.txt ファイルの設定ミスとなります。
  7. ログイン可能な状態になることを確認。途中で止まる場合は、tftp サーバ上の cmdline.txt の設定ミス、NFSサーバの設定ミス、/etc/fstab ファイルの設定ミス等が考えられます。

3.2. Raspberry PI 3B/3B+ の場合

  1. microSD を抜く
  2. HDMI,キーボード,LANを接続
  3. USB(電源)を接続
  4. LAN のアクセスランプが点灯することを確認。点灯しない場合は、3B固有の事前準備が行われていない、ネットワークがきちんと接続されていない、または GPU/SoC が不良である可能性が有ります。1
  5. モニタにカラーグラデーションが表示されることを確認。この確認ができると、tftp サーバから bootcode.bin のダウンロードまでは OK ということになります。カラーグラデーションが表示されない場合は、tftp サーバの設定がおかしいことが考えられます。
  6. 画面にラズパイロゴやブートログが出て来ることを確認。画面が真っ黒のまま進行しない場合は tftpサーバ上にある config.txt ファイルの設定ミスとなります。
  7. ログイン可能な状態になることを確認。途中で止まる場合は、tftp サーバ上の cmdline.txt の設定ミス、NFSサーバの設定ミス、/etc/fstab ファイルの設定ミス等が考えられます。

3.3. Raspberry PI 4B の場合

  1. microSD を抜く
  2. HDMI,キーボード,LANを接続
  3. USB(電源)を接続
  4. LAN のアクセスランプが点灯することを確認。点灯しない場合は、事前準備が行われていない、ネットワークがきちんと接続されていない、または EEPROM/SoC が不良である可能性が有ります。
  5. モニタにカラーグラデーションが表示され、ブラックアウトすることを確認。EEPROM の初期不良は無い、ということが確認できます。
  6. 画面にラズパイロゴやブートログが出て来ることを確認。画面が真っ黒のまま進行しない場合は tftpサーバ上にある config.txt ファイルの設定ミスとなります。
  7. ログイン可能な状態になることを確認。途中で止まる場合は、tftp サーバ上の cmdline.txt の設定ミス、NFSサーバの設定ミス、/etc/fstab ファイルの設定ミス等が考えられます。

次回予告

今回はここまでとなります。全ラズパイで Raspberry PI OS のディスクレス(2Bは半ディスクレス)クライアント化できたはずです。ただ、このままだと、「何も連携なしのディスクレスクライアント群」に過ぎませんから、次回以降、全ノードをコントロールするコントローラPC + NFSサーバ + ラズパイノード群の構成を取る分散環境を順次構築していきたいと思います。
初回となる次回は、最も構築が簡単な分散環境、Apache を利用した負荷分散(冗長化) Web サーバを構築してみたいと思います。


  1. 実際、私は購入直後から頻繁に microSD で起動できない現象を引き起こす 3B 個体を1つ持っていました。常々「microSD が死んだ/相性が悪いんだろう」と思っていたのですが、ディスクレスブートの試験をして行く中、「これは初期不良だ」と気づきました。購入後4年経ってから初めて気づいた初期不良・・・ 

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む