どうも!職業訓練生のがっちゃんです!
ただいま、長期人材育成「情報セキュリティ管理者資格コース」を絶賛受講中です!
今回は、MBSD2019セキュリティチャレンジの東京最終審査会参加時に持参するWAFの予備機を、ラズパイで作成して持っていこう!ってことで試行錯誤したくだりを書いていきたいと思います!
準備したもの
ラズパイ3B+、マイクロSD16GB、USBキーボード、ディスプレイ(HDMI接続できるもの)、LANケーブル、ノートPC(Win10)
フリーソフト「7zip」と「DDforWindows」をノートPCにインストしておく。
結論!ラズパイでCentOS7使えます!
CentOS7はラズパイでは力不足で走らないんじゃないの!?と思ってましたが、ちゃんとラズパイ用の「centOS7」isoイメージが用意されていました。GUIなども用意されていますが、minimalのCUIだけのヤツを選ぶのがベターです。GUIはラズパイでも起動はしますが、動きがメチャクチャ重たいです。
このラズパイ用のisoイメージさえ使えばラズパイ3B+でCentOS7は動きます!
ただし、「Under-voltage detected!」「Voltage normalized」とかいうメッセージがしょっちゅう出てきます!当然コマンド入力している最中によく出てくるので、わずらわしくって仕方がありません(入力中にメッセージが出てきても、無視して入力し続ければ普通にコマンドがとおるのでご安心ください)。
というわけで以降に手順を書いておきます。CentOS7のisoイメージを引っ張ってくるところからつまずいたので大変でしたよ。
CentOS7のisoイメージの取得に苦戦
ラズパイ3B+でも、発売時期により(OSのアップデートとかで)若干中身が異なるようだ。そのためCentOS7のISOイメージも、それに合わせてダウンロードしないといけないようだ。最初はそんなことも知らずにサイトで紹介されているとおりに実行した。
私の場合は、後期型のラズパイ3B+で、あちこちのサイトで紹介しているISOイメージはすでに古く、後期型のラズパイには対応していないようです。どこのサイトでも「CentOS-Userland-7~RaspberryPi3.img.xz」を取りに行くようにと説明されていたので、私は対応していないことも知らずに一生懸命探した。
最新版を取りに行くと「CentOS-Userland7~RaspberryPI-Minimal-4-1908-sda.raw.xz」イメージになっている。これをダウンロードして、「7zip」という解凍ソフトで解凍すると、「raw」拡張子となり、Win10上では「画像ファイル(rawデータ)」として認識される。頭の固い私は、「あ、これやないな。やっぱimg.xzになってるヤツをダウンロードせんとアカンわ。」と思い、img.xzイメージを探し続けた。
やっと古い「img.xz」イメージを探し当てて解凍し、SDカードに書き込んでラズパイに差し込むも、まったく起動せず、3時間ほど悩み続けた。
結局、最新版のイメージをダウンロードすれば、最新でも旧式のラズパイでも起動できることが分かり、「CentOS-Userland7~RaspberryPI-Minimal-4-1908-sda.raw.xz」の圧縮フォルダをダウンロードすることに。「centos-altarch」の山形大学さんのサイトでいただきました!
その後「7zip」で「デスクトップ」とか「ダウンロード」とか適当な場所に解凍します。
SDカードにCentOS7を書き込み
ここまで準備が出来たら、パソコンにSDメモリを差し込み、DD for Windowsのアイコンを右クリック→「管理者として実行」を選択し起動します。起動したらこんな画面が出てきます。
対象ディスクはSDメモリを指定します。選択したいSDカードやusbが表示されない場合があります。そのときは、DD for Windowsのexeファイルのプロパティを開き、「互換性」タブの「互換モードでこのプログラムを実行する」を[Windows XP(servixw Pack3)]に変更してあげてください。
「ファイル選択」をクリックして、先程ダウンロードしたCentOSの.rawファイルを指定します。「ファイル選択」で表示される画面では、「*.ddi」ファイルしかデフォルトでは表示してくれない状態になっています。「All files(*.*)」にして対象ファイルを指定してください。
後は、「書込」をクリックすればSDメモリへOSが書き込まれます。作業完了まで十数分くらいかかりますのでお茶でも飲んでゆっくりしましょう。
※16GBや32GBのSDメモリにインストしようとすると、「書き込むファイルサイズに対してSDメモリの容量が多いですよ」とメッセージが表示されますが構わず続行しましょう。
書き込みが完了すると、SDメモリの空き部分をドライブと認識しようとするメッセージがWindows側で表示されますが、ドライブとは認識させずに全て「いいえ」で逃げてください。これを「はい」で対応すると、せっかく書き込んだOSがまともに起動しない状態が発生する場合があるので注意が必要です。
うまく書き込めないときの対処法
うまく書き込めない場合はSDカードを初期化の方法がうまくいっていない可能性があります。RaspberryPiで使用していたSDカードの中身を書き換えようとしてWindowsPCで読み込ませると、パーティションの情報をうまく認識することができない場合があるようです。
そこでSDカード内のパーティションをすべて削除し、初期化することにします。
「Win」ボタン+「R」で、以下の画面が出てきますので、「cmd」と入力しましょう。そうするとコマンドプロンプトが開きます。
「diskpart」と入力してエンターキーを押します。実行時には許可を求められます。別ウインドウでDiskPart画面が起動します。
「list disk」と入力してエンターキーを押すと、接続されているディスクが表示されます。今回は16GBのSDカードですので、ディスク容量が16GBに近いディスク1が初期化するSDカードとなります。ディスク0はPCのHDDですので、間違って消すとPCが起動しなくなるので要注意です!
「select disk 1」と入力してエンターキーを押します。
再度「list disk」と入力してエンターキーを押すと、ディスク1に印(*)がついており、ディスク1が選択されていることが確認できます。
「list partition」と入力してエンターキーを押してください。SDカードのパーティションの一覧が表示されます。2つのパーティションが表示されているのがわかります。
「clean」と入力してすべてのパーティションを削除します。Windows上でSDカード内を開いたままだとエラーになりますので、エクスプローラなどはすべて閉じた上で、再度コマンドを実行してください。正常にパーティションを削除すると次のメッセージが表示されます。
再度「list partition」と入力してエンターキーを押してください。パーティションが全くないことが確認できます。
これでドライブが1つになり、フォーマットしていない状態なので、マイコンピュータを開いても容量も表示されません。
いよいよラズパイで起動させる
ラズパイにいろいろ接続する
イメージを書き込んだmicroSDカード(容量は8GB以上で、Class10のもの)をaspberryPiにセットします。
次にHDMIケーブルでモニタを接続、USBキーボードを接続。次が重要です!LANケーブルをルータに接続(DHCPが稼働しており、インターネットに接続できること)。このLANケーブルが接続されていないと、電源をONにしても、まったく起動しません。
これで準備が完了しました。
ラズパイの電源をON
最後に電源コードを接続して電源をONします。
色々な文字がいっぱい出てきたら起動成功です!1分足らずで、待ち受けになりますが、英語でなにやら「電源不足だぁ」「電源足りたよ」「無線LANつながってないぞ」とかなんとか画面に出力され続けます。それを無視しつつ、「enter」キーを押せば、コマンド入力が、可能になります。
レインボー画面が出力され、イナズママークが出たままだと起動できていません。残念ですがSDカードへのインストールが失敗していると思われますので、もう一度最初からやり直しましょう。
CentOS7にログイン
初期のユーザ、パスワード設定は下記のとおりです。これでログインしましょう。
User: root Password: centos
最初に実施すること
そのままでは使えないので、初期設定が必要です。以下のコマンドを実行していきましょう。
$ yum -y update プログラムを最新にする
$ timedatectl set-timezone Asia/Tokyo タイムゾーンを日本に設定する
$ localectl set-keymap jp106 日本語キーボードを有効にする
$ yum -y install nano nanoエディタをインストール(viコマンドと同じ働きをするので、不要ならインストしなくても大丈夫です)
$ /usr/local/bin/rootfs-expand microSDカードの領域を拡張
SELinuxを無効にする
$ nano /etc/selinux/config
以下のように設定を書き換える
SELINUX=disable
$ reboot 再起動して完了
キーボード設定
キーボードの初期設定を行います。CentOS 7を入れた状態はミニマムインストールと同じような状態なので、キーボードの設定はなされていませんので設定を行います。
$ localectl set-keymap jp106
$ localectl set-keymap jp-OADG109A
$ localectl set-locale LANG=ja_JP.utf8
$ localectl #ロケールの設定確認。以下のようになっていれば設定OKです。
System Locale: LANG=ja_JP.utf8
VC Keymap: jp-OADG109A
X11 Layout: jp
X11 Model: jp106
X11 Options: terminate:ctrl_alt_bksp
ネットワーク設定
デフォルト状態では、DHCPで動的にIPアドレスが振られる設定になっています。サーバとしてクライアントPCから接続させる場合は、固定IPを設定します。CentOS7からは、「nmtui」(Network Manager Text User Interface)というツールを使ってネットワークを設定するよう推奨されています。
$ nmtui コマンドを実行すると以下の画面が起動します(英語表記の場合もあります)。
「接続の編集」を選択すると以下の画面が出ます。
上図のように既にens33(環境によりeth0など)が存在します。「ens33(eth0)」を選択してTABキーを使って「編集」まで移動したら、Enterを押して編集モードへ移行します。IPv4が「自動」になっているので、「手動」に変更して編集を続けます。
「アドレス」には、xxx.xxx.xxx.xxx/24の様な形式で、IPアドレスとサブネットマスクを同時に設定します。
例えば、192.168.0.123/24と設定した場合、IPアドレス=192.168.0.123でサブネットマスクは255.255.255.0ということになります。
「ゲートウェイ」「DNSサーバ」にもアドレスを設定します。
※ゲートウエイとDNSサーバは通常同じアドレスです。私の場合、コマンドプロンプトで「ipconfig」と入力して確認しました。
「OK」を選択して、後は画面を見ながら「nmtui」を終了します。最後に設定を更新するためネットワークマネージャを以下のコマンドを実行して再起動します。
$ systemctl restart NetworkManager
その後ifconfig -aコマンドなどを使用して、ens33(eth0)に指定したアドレスが正しく設定されているか確認してください。
※上のコマンドを実行しても、正しく設定されない場合があります。その時は、「nmtui」で、「接続をアクティベートする」で、一度「Deactivate」し、再度アクティベートさせます。そうすれば、設定が反映されます。
無線LANにつなげる
nmtui コマンドで 「追加」→「Wi-Fi」を選択すると、無線LAN接続ができるようになります。これを設定すれば、最初に接続したLANケーブルは不要になります。
これで基本設定は完了しました。
まとめ
そのほかにもいろいろ設定することはありますが、それについては私の「職業訓練」→「サーバ」カテゴリーのブログを参考にしていただければと思います。
ラズパイは小さなPCで、いろいろと遊ぶには面白い素材ですね。失敗してもよほどでないと壊れることもありませんし、万一壊れても、5,000円くらいなのであきらめもつくものです。
みなさんもラズパイでいろいろなことにチャレンジして遊んでみてくださいね。
それでは本日も最後までお付き合いいただき、ありがとうございました!