2019-08-30さくらのクラウドには「アーカイブ」というのがあって、プレインストールされた様々なOSのディスクイメージが用意されている。代表的なOSや各種ディストリビューションが選べるようになっていて、選択してインストールするだけですぐに利用できるようになっている。ラインナップされたものを利用するだけならば、これで特に不満はないが、さくらが用意していないOSや、設定を変えたい(たとえばパーティショニングに不満があるとか)場合には、自分でインストールをし直すなどの手間暇をかける必要がある。931もちろんそのための手段は全部用意されている。具体的には、インストールISOイメージを用意してそこからVMをブートし、好きなようにインストールしてからディスクイメージを「マイアーカイブ」としてセーブしてしまえばいい。そこから作るサーバは自分のお好みの設定になっているという訳だ。インストーラを使った作業というのは、ボタンをポチポチ押すのが面倒だ。インストール作業そのものは、そんなにしょっちゅうやることではないが、一度取り組むとピタリと狙ったものを作るまでに何度も作業を繰り返すことになったりする。そのたびに設定を変えながら繰り返し実行するのは面倒くさい。そこで設定をファイル化して、なるべくバッチ化・自動化したい。そこで本稿では、インストール作業を自動化するKickstartの使い方を説明する。KickstartKickstartはFedora/Redhat/CentOSで利用できるインストール自動化ツールだ。利用の流れを大雑把に説明するとこんな感じだ。設定ファイルを用意しておくインストールメディアでブート通常のインストールではなく、Kickstart設定ファイルを指定あとは完了するのを待つだけ通常のインストールでは、GUIで様々な項目を指定・設定していくが、Kickstartの設定ファイルを書けば、ほぼすべての項目が設定できる。Kickstart内ではスクリプトも書けるし、対象マシンがネットに繋がっていれば外からデータも引っ張ってこられるので、事実上何でもできる。初期インストールでどこまでやるかはお好みの問題なので、ここでは必要最低限ということにしておき、例としてfail2banだけ追加する。ないとsshポートにわんさかscanが来てしまうからだ。設定ファイルをどう書くかさてKickstartの設定ファイルをどう書けばよいだろうか。参考になる情報が2つある。実はこのファイルはKickstartの設定ファイルになっているので、これを調整すればお好みの設定にするのは比較的簡単だ。ひとつは、さくらインターネットが公開している「アーカイブを作成したときに使ったKickstart設定ファイル」だ。kickstartこれらを参考に、必要なものを入れ、不要なものを削除するというのがよいかもしれない。30をインストールするKickstartを示そう。./clean.shEOL%end%packages@^server-product-environment-cockpit*gdisk%endポイントとなる部分について、以下に説明していこう。ディスクのパーティショニングインストーラを使っていると、ディスクを思った通りにパーティショニングできずにイライラすることが多い。インストーラは万人に使えるようにしないければならないので仕方がないが、ぶっちゃけfdiskをそのまま開放してもらった方がずっと楽というのが自分の意見だ。Kickstartなら、それが思いのまま利用できる。いうディレクティブが利用できる。これはインストール処理の前に実行するスクリプトを記述できる。実行環境はインストーラのramdisk上なので、非常に貧弱で限られたことしかできないことに留意しなければならない。いえやりたいことはパーティショニングなのでまったく問題はない。/dev/vda%endsgdiskコマンドはgdisk(fdiskのGPT対応版)のスクリプト対応版で、コマンドラインでバッチ処理するときに便利だ。オプションをばらすとこういう意味になる。パーティションに名前を付ける%preで処理が終わったら、Kickstartが処理を行う。--label=rootのあたりだ。35~37行が、各パーティションに具体的にBIOS、swap、/マウントポイントを割り当てている。ファイルシステムについてお好みに書き換えたいなら、ここを変更してもらいたい。最近のIPアドレス周りの設定については、デバイス名が伝統的なeth0からens3(なんで3?)みたいなのに変更され、ちょっと面倒なことになっている。さくらのクラウドではこの変更を抑止し、伝統的なeth0、eth1...を使い続けている。これを実現するために、grubの設定に次のような設定を追記している。biosdevname=0この上で、さくらのクラウドのシステムはインターネット上位側(バックボーン側)がeth0と仮定し(システム上そちら側を上位につなぐ仕様になっている)、設定ファイルを書き換えようとする。このルールに従っていれば、コンパネやAPIのIPアドレス変更が利用できる。Kickstartでこれを実現するにはどうすればよいだろうか。第一の方法として、Kickstart起動時に上記のgrubオプションを手動で指定する方法が使える。これをやるとインストール処理そのものをeth0でやってくれ、最終的な設定ファイルもifcfg-eth0でセーブしてくれる。手動で打ち込むべき手間が増える。第二の方法はさくらのクラウドがやっているKickstart内で設定ファイルを書き換える方法だ。記述するべき内容は増えるが、実行するのはプログラムなので面倒はない。こっちに合わせておけばクラウドの仕様に合致するので無難ともいえる。ディレクティブ内で指定する。ちなみに%postディレクティブ内は、インストール処理後のディスクイメージにchrootした環境下で実行されるので、ほぼすべての処理が思いのままに実行できる。/etc/grub2.cfgここでは3つのファイル(/etc/sysconfig/network、ifcfg-eth0、resolv.conf)を作成している。さくらのクラウドでは、VMインストール時にこれらをオーバーライトするので多少適当でもかまわない。IPアドレスはDHCP対応なので、このまま起動してもアクセスは可能だ。最後のGRUBの設定はちょっとトリッキーだ。「rhgb」と「quiet」は起動時のグラフ表示を行うオプションだが、自分好みでないので削除している。代わりにコンソールのスクリーンセーブ機能のOFFと、eth0記法にするためのおまじないを入れる。そのうえでgrub2.cfgをアップデートして完了だ。例示している設定ファイルではcockpitを削除している。cockpitの詳細は理解していないのだが、Webコンソールというのは気に食わないのでぜひ削除したい。そこで最初から削除しておきたい。%packages@^server-product-environment-cockpit*gdisk%endところがこれを削除すると、一緒にgdiskも入れてもらえなくなるので、それを改めて追加している(ほかにもいろいろなくなるが、見たところ困らなそうだったのでgdiskだけ戻している)このほかに、fail2banもぜひ入れておきたいが、指定してもうまくいかない。これは要するに、インストールISO上のファイルと言うことだろうが、例示したり引用するのは面倒なのでやらない。いずれにしてもこれからパッケージ名を探すのはちょっと骨が折れそうだ。どちらかと言えば、%preの中からyum...じゃなかったdnfした方がいいような気がする。いうわけでその方法でfail2banをインストールしてみる。fail2banFedoraのパッケージのfail2banは、デフォルトでは何もしてくれないので、自分でjail.localを書かなければならない。いうわけで上記のようにファイルを用意してenableするコードを入れている。これで作成したサーバは最初から保護された状態になっている。rootpwrootのパスワードだが、もちろんこのままではいけない。適切にハッシュされた符号列を入れるべきだ。rootpwの行はこのone-linerの出力で丸ごと置き換えてほしい。"\n";'その他もろもろいろいろ細かいオプションがあるが、あまり変更するべきところはないと思う。言えばkeyboardとlangぐらいだろうか?Kickstartによるインストール手順では具体的にKickstartでインストールしてみよう。30のISOイメージはパブリックISOイメージとして用意されているので、選択するだけでブートできる。タグ欄に「@boot-cdrom」という特殊タグを追加しておく。するとディスクより優先してISOイメージからブートするようになる。これは後の掃除のときに必要になる(掃除しなくてもよければ、この工程は不要だ)。しておいてサーバを起動して、コンソールからアクセスすると、おなじみのインストーラが起動する。カウントダウンが始まっていると思うが、ここでTABキーを押す。するとインストーラに対してオプションを指定できるようになる。Kickstart設定ファイルを与える方法はいくつかあるが、HTTP経由でネットワーク越しにアクセスさせる方法が一番楽だ。適当なWebサーバ上に、作成したKickstartファイルを置き、そのURLをインストール画面から入力する。「inst.ks=https://...」のように記入する。Kickstartファイルの指定できたらリターンキーを押す。後は終わるのを待つだけだ。updateを含むので、終わるのに10分間ぐらいかかる。最後までいくと、こんな画面になって止まる。無事にインストールが完了したところメッセージの通りにリターンキーを押してリブートする。上述の手順通りに「@boot-cdrom」タグをつけていれば、再びISOイメージからブートしてインストーラが起動するはずだ(さもないとインストールが完了したFedoraが起動する)。ここで、Troubleshootingを選択する。systemを選択これで、ramdisk上のシステムからディスクをマウントした状態でマシンをブートできる。途中で質問されるので、「1」と答えておく。ディスクを/mnt/sysimageにマウントするよ?最後にリターンキーを押せば、shellに落ちて何でもできるようになる。あるので、これをチェックする。セーブされているので、これをチェックしておく。問題がないと判断できたら、clean.shというファイルがあるのでこれを実行しておく。clean.shこれは何をしているのかというと、Kickstart設定ファイルのここに書いてある。./clean.shEOLようするにログファイルを消し、/tmpをキレイにして、自分を消して終わる。お好み次第だが、実行しておくことをお勧めする。最後にpoweroffして、ディスクを丸ごとアーカイブすれば終わりだ。さくらのクラウドのディスク修正機能さくらのクラウドにはディスク修正機能というのがあって、作成するサーバのIPアドレスやパスワードを書き換えられるようになっている。これはさくらのクラウドが公式にサポートする「アーカイブ」で供給するイメージでないと利用できない。自作イメージである「マイアーカイブ」でも、仕様を一致させれば利用できなくはないが、前提条件が結構厳しい。ファイルが存在し中身を初期状態から変更していないことhttps://manual.sakura.ad.jp/cloud/storage/modifydisk/about.html#centosなどとなっている。白状すると、この機能の2番目のバージョンは自分で書いた(1番目は社長が書いた)のでどういう理屈かはよく分かっているのだが、特定ファイルを壊さないように変更するために、システムが本当に自分の知っているディストリビューションかどうかをチェックしようとして色々前提を置かざるを得ないのだ。みたいになっているはずだ)を書き換えてもらわなければならないのだ。これが結構大変なのである。いうのも中途半端に対応してユーザのシステムを破壊したら大変なことになってしまうからだ。この危険を承知で、ディスク修正機能をだますことは可能だ。いうのは前提条件は上記の通り公開されているので、その通りにシステムを作れば書き換えてくれるのである。(Core)などと書き換えてしまえばいいのだ。こんなことをして他の副作用はどうなるのか責任は負えない...。このほか、ファイルシステムにはxfsを指定しているがext4に戻さなければならなかったりする。現状ではDHCPでブートできるので、後からバッチで書き換えた方がいいように思われる。