読者です 読者をやめる 読者になる 読者になる

のぴぴのメモ

自分用のLinuxとかの技術メモ

cloudformation VPC(PubSub x 2, PrivateSub x 2) + 1 Instance(t2.micro, AmazonLinux) を作るテンプレート

AWS

概要

自分用のメモです。"一つ前の記事"VPCのPublicASubにインスタンスを一つ追加したテンプレートです。

作成されるもの

  • VPC × 1
  • サブネット × 4
    • PubASub CIDR:10.0.1.0/24, AZ: ap-northeast-1a ルートテーブル: インターネットへのルーティングあり
    • PubBSub CIDR:10.0.2.0/24, AZ: ap-northeast-1c ルートテーブル: インターネットへのルーティングあり
    • PrivateASub CIDR:10.0.11.0/24, AZ: ap-northeast-1a
    • PrivateBSub CIDR:10.0.12.0/24, AZ: ap-northeast-1c
  • セキュリティグループ × 2
    • WebSecurityGroup: HTTP(port80),HTTPS(port443)を全て許可
    • SSHSecurityGroup: SSH(port22)を全て許可
  • インスタンス × 1
    • 利用イメージ: AmazonLinux("ami-56d4ad31")
    • インスタンスタイプ : t2.micro
    • サブネット: PubASub(インターネット接続あり)
    • SSHキーペア: "xxxxxxxxxxxxx"となっているので適切に修正
    • 追加EBS:
      • タイプ: デフォルトの「汎用 SSD (gp2)」
      • サイズ:20GiB
      • バイス名:/dev/xvdb

※AZは東京の場合

構成概要

f:id:nopipi:20170212222757p:plain

テンプレート

cloudformation VPC(2つのパブリックsub+2つのプライベートsub)を作るテンプレート

AWS

概要

自分用のメモです。下記のようなvpcを作るテンプレートです。

作成されるもの

  • VPC × 1
  • サブネット × 4
    • PubASub CIDR:10.0.1.0/24, AZ: ap-northeast-1a ルートテーブル: インターネットへのルーティングあり
    • PubBSub CIDR:10.0.2.0/24, AZ: ap-northeast-1c ルートテーブル: インターネットへのルーティングあり
    • PrivateASub CIDR:10.0.11.0/24, AZ: ap-northeast-1a
    • PrivateBSub CIDR:10.0.12.0/24, AZ: ap-northeast-1c
  • セキュリティグループ × 2
    • WebSecurityGroup: HTTP(port80),HTTPS(port443)を全て許可
    • SSHSecurityGroup: SSH(port22)を全て許可

※AZは東京の場合

構成概要

f:id:nopipi:20170211175348p:plain

テンプレート

ubuntuで古いカーネルを削除する方法(/bootの空きが足りない時とか)

Ubuntu Linux

1.はじめに

ubuntuで「ソフトウェアの更新」で「/bootのディスク容量が足りない」と言われてしまった時の対処方法です。
ubuntuが結構頻繁にkernelの更新を行うようで、私は半年ぐらい周期で/bootが足りなくなります。

f:id:nopipi:20170210112308p:plain

2.対処方法(古いkernelの削除)

(1)現在のカーネルバージョンの確認

$ uname -r
4.4.0-59-generic

(2)インストール済みカーネルのバージョン一覧を確認

現在利用中のカーネルバージョン(4.4.0-59)以外のバージョン(4.4.0-38、4.4.0-45、4.4.0-47、4.4.0-51、の4つ)をこれから削除します。

$ dpkg --get-selections |grep linux-
linux-base					install
linux-cloud-tools-4.4.0-38			install
linux-cloud-tools-4.4.0-38-generic		install
linux-cloud-tools-4.4.0-45			install
linux-cloud-tools-4.4.0-45-generic		install
linux-cloud-tools-4.4.0-47			install
linux-cloud-tools-4.4.0-47-generic		install
linux-cloud-tools-4.4.0-51			install
linux-cloud-tools-4.4.0-51-generic		install
linux-cloud-tools-common			install
linux-cloud-tools-generic			install
linux-firmware					install
linux-generic					install
linux-headers-4.4.0-36				install
linux-headers-4.4.0-36-generic			install
linux-headers-4.4.0-38				install
linux-headers-4.4.0-38-generic			install
linux-headers-4.4.0-45				install
linux-headers-4.4.0-45-generic			install
linux-headers-4.4.0-47				install
linux-headers-4.4.0-47-generic			install
linux-headers-4.4.0-51				install
linux-headers-4.4.0-51-generic			install
linux-headers-4.4.0-59				install
linux-headers-4.4.0-59-generic			install
linux-headers-generic				install
linux-image-4.4.0-36-generic			install
linux-image-4.4.0-38-generic			install
linux-image-4.4.0-45-generic			install
linux-image-4.4.0-47-generic			install
linux-image-4.4.0-51-generic			install
linux-image-4.4.0-59-generic			install
linux-image-extra-4.4.0-36-generic		install
linux-image-extra-4.4.0-38-generic		install
linux-image-extra-4.4.0-45-generic		install
linux-image-extra-4.4.0-47-generic		install
linux-image-extra-4.4.0-51-generic		install
linux-image-extra-4.4.0-59-generic		install
以下略

(3)コマンドをテスト実行確認(DryーRun)

apt-getコマンドで古いカーネルパッケージを削除します。
”--purge”オプションで削除するパッケージを指定しますが、指定が正しいか確認するため”--dry-run”オプションで空実行させて確認します。

$ sudo apt-get --dry-run autoremove --purge linux-{headers,image}-4.4.0-{36,38,45,47,51}
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
<省略>
アップグレード: 0 個、新規インストール: 0 個、削除: 39 個、保留: 234 個。
Purg linux-cloud-tools-4.4.0-38-generic [4.4.0-38.57]
Purg linux-cloud-tools-4.4.0-38 [4.4.0-38.57]
Purg linux-cloud-tools-4.4.0-45-generic [4.4.0-45.66]
Purg linux-cloud-tools-4.4.0-45 [4.4.0-45.66]
Purg linux-cloud-tools-4.4.0-47-generic [4.4.0-47.68]
Purg linux-cloud-tools-4.4.0-47 [4.4.0-47.68]
Purg linux-headers-4.4.0-36-generic [4.4.0-36.55]
Purg linux-headers-4.4.0-36 [4.4.0-36.55]
Purg linux-headers-4.4.0-38-generic [4.4.0-38.57]
Purg linux-headers-4.4.0-38 [4.4.0-38.57]
Purg linux-headers-4.4.0-45-generic [4.4.0-45.66]
Purg linux-headers-4.4.0-45 [4.4.0-45.66]
Purg linux-headers-4.4.0-47-generic [4.4.0-47.68]
Purg linux-headers-4.4.0-47 [4.4.0-47.68]
Purg linux-headers-4.4.0-51-generic [4.4.0-51.72]
Purg linux-headers-4.4.0-51 [4.4.0-51.72]
Purg linux-signed-image-4.4.0-36-generic [4.4.0-36.55]
Purg linux-image-extra-4.4.0-36-generic [4.4.0-36.55]
Purg linux-image-4.4.0-36-generic [4.4.0-36.55]
Purg linux-signed-image-4.4.0-38-generic [4.4.0-38.57]
Purg linux-image-extra-4.4.0-38-generic [4.4.0-38.57]
Purg linux-image-4.4.0-38-generic [4.4.0-38.57]
Purg linux-signed-image-4.4.0-45-generic [4.4.0-45.66]
Purg linux-image-extra-4.4.0-45-generic [4.4.0-45.66]
Purg linux-image-4.4.0-45-generic [4.4.0-45.66]
Purg linux-signed-image-4.4.0-47-generic [4.4.0-47.68]
Purg linux-image-extra-4.4.0-47-generic [4.4.0-47.68]
Purg linux-image-4.4.0-47-generic [4.4.0-47.68]
Purg linux-signed-image-4.4.0-51-generic [4.4.0-51.72]
Purg linux-image-extra-4.4.0-51-generic [4.4.0-51.72]
Purg linux-image-4.4.0-51-generic [4.4.0-51.72]
Purg linux-tools-4.4.0-36-generic [4.4.0-36.55]
Purg linux-tools-4.4.0-36 [4.4.0-36.55]
Purg linux-tools-4.4.0-38-generic [4.4.0-38.57]
Purg linux-tools-4.4.0-38 [4.4.0-38.57]
Purg linux-tools-4.4.0-45-generic [4.4.0-45.66]
Purg linux-tools-4.4.0-45 [4.4.0-45.66]
Purg linux-tools-4.4.0-47-generic [4.4.0-47.68]
Purg linux-tools-4.4.0-47 [4.4.0-47.68]

4.4.0-36,38,45,47,51の5つのバージョンが選択されていることを確認します。

(4)パッケージを削除する

”--dry-run”オプションを外して削除実行します。

$ sudo apt-get autoremove --purge linux-{headers,image}-4.4.0-{36,38,45,47,51}

(5)削除されたか確認

4.4.0-51以外のバージョンのカーネル削除されたか確認します。

$ dpkg --get-selections |grep linux-
linux-base					install
linux-cloud-tools-4.4.0-51			install
linux-cloud-tools-4.4.0-51-generic		install
linux-cloud-tools-common			install
linux-cloud-tools-generic			install
linux-firmware					install
linux-generic					install
linux-headers-4.4.0-59				install
linux-headers-4.4.0-59-generic			install
linux-headers-generic				install
linux-image-4.4.0-59-generic			install
linux-image-extra-4.4.0-59-generic		install
linux-image-extra-virtual			install
linux-image-generic				install
linux-libc-dev:amd64				install
linux-signed-generic				install
linux-signed-image-4.4.0-59-generic		install
linux-signed-image-generic			install
linux-sound-base				install
linux-tools-4.4.0-51				install
linux-tools-4.4.0-51-generic			install
linux-tools-common				install
linux-tools-generic				install
syslinux-common					install
syslinux-legacy					install

ansibleのベストプラクティスなplaybookレイアウトを作るシェル

ansible

ansibleのベストプラクティスなplaybookディスクレイアウトがあります。

このディレクトリを手動で作成するのが面倒なので簡単なシェルを作成しました。
こんなディレクトリレイアウトとmain.ymlの空ファイルを作成します。

group_vars/
host_vars/
site.yml                  # master playbook
roles/
    RoleName1/               # this hierarchy represents a "role"
        tasks/            #
            main.yml      #  <-- tasks file can include smaller files if warranted
        handlers/         #
            main.yml      #  <-- handlers file
        templates/        #  <-- files for use with the template resource
        files/            #
        vars/             #
            main.yml      #  <-- variables associated with this role
        defaults/         #
            main.yml      #  <-- default lower priority variables for this role
        meta/             #
            main.yml      #  <-- role dependencies

コードはこちら。

gitの初期設定をしてGitHubからレポジトリをcloneするまでの手順

git

はじめに

PCを再セットアップした後、いつも設定方法を忘れてgoogleさんに聞いて面倒なので、まとめました。

git初期設定

ユーザ設定&pushモード設定

(1)メールアドレス、(2)名前、(3)push時のモードを指定して、最後に設定内容を確認。

$ git config --global user.email "xxxxxxx@gmail.com"
$ git config --global user.name "xxxxxxxx"
$ git config --global push.default simple

$ git config --global -l

SSH秘密鍵設定

githubへのssh接続を鍵認証で行う場合の設定。

  • 秘密鍵: "~/.ssh/id_rsa"に保存(※1)
  • 公開鍵:githubページから"Settings"->"SSH and GPG keys"で公開鍵を登録

※1 秘密鍵パーミッションは、".ssh/"ディレクトリは700、秘密鍵(id_rsa)ファイルは600。GitHub専用の秘密鍵にしたい場合は後述。

GitHubからcloneする

(既存レポジトリがない場合)新規にレポジトリの作成

  • "New repository"からレポジトリを作成
  • 必要な項目を設定
    • レポジトリ名を指定(Repository name)
    • "Initialize this repository with a README"をチェック
    • "Add .gitignore"で開発したい言語のgitigonreテンプレを選択
    • "Add a license"で開発するブツのライセンスを指定(Apache LicenseとかGPLv3とか)
  • "Create repository"でレポジトリを作成

レポジトリをcloneする

  • GithubのページからURLをコピーする
    • cloneしたいgithubレポジトリページを開き、
    • 緑のボタン"Clone or download"のプルダウンから
    • 表示されているURLをコピーする

f:id:nopipi:20161009161338p:plain

  • gitコマンドでcloneする
    • 格納したいディレクトリに移動し
    • "git clone <コピーしたURL>"でデータをローカルにcloneする
$ git clone https://github.com/Noppy/uplogger.git
Cloning into 'uplogger'...
remote: Counting objects: 254, done.
remote: Total 254 (delta 0), reused 0 (delta 0), pack-reused 254
Receiving objects: 100% (254/254), 382.28 KiB | 226.00 KiB/s, done.
Resolving deltas: 100% (141/141), done.
Checking connectivity... done.

(追伸)ssh秘密鍵GitHub専用ファイルに分けて指定したい時

gitコマンドでは直接sshの鍵設定ができないので、sshコマンドの設定ファイル(~/.ssh/config)を駆使したりする。他に環境変数で設定するとかもあるらしい。

vi ~/.ssh/config
Host github
    User git
    Port 22
    HostName github.com
    IdentityFile   ~/.ssh/gitub_id_rsa
    IdentitiesOnly yes

説明

  • ユーザは、"git"固定
  • ホスト名、ポート番号は、"github.com"で22番ポート
  • IdentityFileで、GitHub専用の秘密鍵ファイルのパスを指定する。
  • "IdentitiesOnly yes"で認証で利用する秘密鍵をIdentityFileで指定したファイルのみに限定する

KickStartその3(ネットワーク構成例 -vlan、bonding構成も)

RHEL CentOS Fedora KickStart Linux

0.関連記事一覧

1.はじめに

KickStarでosを自動インストールするときのネットワーク設定について、構成例をケース毎に説明します。vlan、bondや、vlanとbondを組み合わせた構成も説明します。

2.ネットワーク構成例

2.1静的IP構成

(1)構成イメージ

f:id:nopipi:20160802203126p:plain

(2)KickStart設定例

networkオプションで設定します。"--bootproto=static"とし、IPなど必要な設定を行います。

# Network information
network --bootproto=static --ip=10.0.2.15 --netmask=255.255.255.0 --gateway=10.0.2.2 --nameserver=192.168.11.1 --device=enp0s3 --noipv6 --activate
network --hostname=Server1

2.2DHCP設定の場合

(1)構成イメージ

f:id:nopipi:20160802203127p:plain

(2)KickStart設定例

networkオプションで、"--bootproto=dhcp"とします。

network --bootproto=dhcp --device=enp0s3 --noipv6 --activate
network --hostname=Server1

2.3複数セグメント設定

(1)構成イメージ

f:id:nopipi:20160802203128p:plain

(2)KickStart設定例

複数セグメントがある場合は、networkオプションを複数行記載します。

network --bootproto=dhcp --device=enp0s3 --noipv6 --activate
network --bootproto=static --device=enp0s8 --ip=192.168.0.20 --netmask=255.255.255.0 --nodefroute --nodns --noipv6 --activate
network --hostname=Server1

2.4VLAN設定

(1)構成イメージ

f:id:nopipi:20160802203129p:plain

(2)KickStart設定例

networkオプションで、"--vlanid="でVLAN IDを指定します。デバイス名を指定したい場合は、"--interfacename="を使います。未指定の場合は、"デバイス名.VLAN-ID"名称になります。

network --bootproto=dhcp --device=enp0s3 --noipv6 --activate
network --bootproto=static --device=enp0s8 --ip=192.168.0.20 --netmask=255.255.255.0 --nodefroute --nodns --noipv6 --activate
network --device=enp0s8 --vlanid=1000 --interfacename=enp0s8.1000 --bootproto=static --ip=192.168.10.20 --netmask=255.255.255.0 --nodefroute --nodns --noipv6 --activate
network --hostname=Server1

2.5bond設定(ネットワーク冗長化設定)

(1)構成イメージ

f:id:nopipi:20160802203130p:plain

(2)KickStart設定例

networkオプションでもbond構成を設定可能ですが、slaveデバイスがMacアドレス指定となるのが難点です。(LANカード交換によるmacアドレス変更後に設定変更が必要になるため)。slave指定をデバイス名(enp0s8とか)で指定するため、インストールの後処理(%post〜%endセクション)でNetworkManager(nmcliコマンド)で設定を作成し、インストールイメージにコピーする手段をとっています。post処理はNetworkManagerのデーモン経由の処理になるので、chrootを無効化して処理させます。

network --bootproto=dhcp --device=enp0s3 --noipv6 --activate
network --hostname=Server1
<中略>
%post --nochroot --log=/mnt/sysimage/root/ks-post-log.log

# delete enp0s8n and enp0s9 configuration file
nmcli c delete enp0s8
nmcli c delete enp0s9

# add a bond device
nmcli c add type bond ifname bond0 con-name bond0 mode active-backup miimon 100 updelay 600 primary enp0s8 
nmcli c mod bond0 ipv4.method manual ipv4.address "192.168.0.20/24" ipv4.never-default yes
nmcli c mod bond0 ipv6.method ignore ipv6.never-default yes
nmcli c add type bond-slave ifname enp0s8 con-name bond0-enp0s8 master bond0
nmcli c add type bond-slave ifname enp0s9 con-name bond0-enp0s9 master bond0

# copy network configurate files to the install image
rm -rf /mnt/sysimage/etc/sysconfig/network-scripts/ifcfg-*
cp -p /etc/sysconfig/network-scripts/ifcfg-* /mnt/sysimage/etc/sysconfig/network-scripts/

%end

2.6bond-vlan設定

(1)構成イメージ

f:id:nopipi:20160802203131p:plain

(2)KickStart設定例

応用です。bondデバイスを作成し、その上にVLANを設定する例です。

# Network information
network --bootproto=dhcp --device=enp0s3 --noipv6 --activate
network --hostname=Server1
<中略>
%post --nochroot --log=/mnt/sysimage/root/ks-post-log.log

# delete enp0s8n and enp0s9 configuration file
nmcli c delete enp0s8
nmcli c delete enp0s9

# add a bond device
nmcli c add type bond ifname bond0 con-name bond0 mode active-backup miimon 100 updelay 600 primary enp0s8
nmcli c mod bond0 ipv4.method disabled ipv6.method ignore
nmcli c add type bond-slave ifname enp0s8 con-name bond0-enp0s8 master bond0
nmcli c add type bond-slave ifname enp0s9 con-name bond0-enp0s9 master bond0

# add vlan devices(disable ipv4/v6 address)
nmcli c add type vlan ifname bond0.1000 con-name bond0.1000 dev bond0 id 1000
nmcli c mod bond0.1000 ipv4.method manual ipv4.address "192.168.10.20/24" ipv4.never-default yes
nmcli c mod bond0.1000 ipv6.method ignore

# copy network configurate files to the install image
rm -rf /mnt/sysimage/etc/sysconfig/network-scripts/ifcfg-*
cp -p /etc/sysconfig/network-scripts/ifcfg-* /mnt/sysimage/etc/sysconfig/network-scripts/

%end

2.7vlan-bond設定

(1)構成イメージ

f:id:nopipi:20160802203132p:plain

(2)KickStart設定例

上記の逆で、VLANデバイスを束ねてbondデバイスを構成する例です。あまり用途はないと思いますが。

network --bootproto=dhcp --device=enp0s3 --noipv6 --activate
network --hostname=Server1
<中略>
%post --nochroot --log=/mnt/sysimage/root/ks-post-log.log

# disable ipaddress at enp0s8n and enp0s9
nmcli c mod enp0s8 ipv4.method disabled ipv6.method ignore
nmcli c mod enp0s9 ipv4.method disabled ipv6.method ignore

# add vlan devices(disable ipv4/v6 address)
nmcli c add type vlan ifname enp0s8.1000 con-name enp0s8.1000 dev enp0s8 id 1000
nmcli c add type vlan ifname enp0s9.1000 con-name enp0s9.1000 dev enp0s9 id 1000
nmcli c mod enp0s8.1000 ipv4.method disabled ipv6.method ignore
nmcli c mod enp0s9.1000 ipv4.method disabled ipv6.method ignore

# add a bond device
nmcli c add type bond ifname bond0 con-name bond0 mode active-backup miimon 100 updelay 600 primary enp0s8.1000
nmcli c mod bond0 ipv4.method manual ipv4.address "192.168.10.20/24" ipv4.never-default yes
nmcli c mod bond0 ipv6.method ignore
nmcli c add type bond-slave ifname enp0s8.1000 con-name bond0-enp0s8.1000 master bond0
nmcli c add type bond-slave ifname enp0s9.1000 con-name bond0-enp0s9.1000 master bond0
nmcli c mod enp0s8.1000 connection.master bond0 connection.slave-type bond
nmcli c mod enp0s9.1000 connection.master bond0 connection.slave-type bond

# copy network configurate files to the install image
rm -rf /mnt/sysimage/etc/sysconfig/network-scripts/ifcfg-*
cp -p /etc/sysconfig/network-scripts/ifcfg-* /mnt/sysimage/etc/sysconfig/network-scripts/

%end

KickStartその1(KickStartによるLinux自動インストール概要)

KickStart Linux RHEL CentOS Fedora

0.関連記事一覧

1.はじめに

1.1KickStartとは

RHELfedoraなどredhatディストリビューションの、OS自動インストール機能です。*1

1.2ざっくりした使い方

KickStart用のファイルを作成し、インストーラ起動時のオプションで作成ファイルを指定すればOKです。ファイルは、普通にOSインストールするとその時の設定で"/root/anaconda-ks.cfg"ファイルが作成されるので、それを修正して使うのが簡単です。*2

  1. 普通にRHEL/fedoraをインストール
  2. インストール後、"/root/anaconda-ks.cfg"をコピーし編集
  3. 編集したファイルをインストーラから読み込めるよう仕込む。仕込み方法は「3.補足」参照
  4. インストーラでファイルオプション(inst.ks=xxx)を追加して実行
  5. あとは完了するまで待つ。

2.利用手順

2.1ファイル(ks.cfg)の編集

普通にインストールすると、rootのホームディレクトリ直下に"anaconda-ks.cfg"ファイルが作成されているので、このファイルを元に必要な部分を編集します。ファイル名は、特にこだわりがなければKickStartデフォルトの"ks.cfg"にしておくとブート時の設定が少し省けて良いです。*3
■ks.cfgの例(RHELのDVDメディアからインストールする場合の設定例)
設定内容については、こちらの記事を参照して下さい。

#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
repo --name="Server-HighAvailability" --baseurl=file:///run/install/repo/addons/HighAvailability
repo --name="Server-ResilientStorage" --baseurl=file:///run/install/repo/addons/ResilientStorage

# Use CDROM installation media
cdrom

# Select Install mode. graphical:Use graphical install, text:Use text install.
#graphical
text

# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=jp --xlayouts='jp'
# System language
lang ja_JP.UTF-8

# Network information
network  --bootproto=dhcp --device=enp0s3 --noipv6 --activate
network  --hostname=testserver

# Root password
rootpw --iscrypted $6$WYz7GsXMGCHrJnw.$BoSTW/Ac9vaVvjwB0NVg3.sccEh2g7eZhU7c7BRRx/d8Dxoo7UE70EYyhPEBiemPLxB.Pq0StVaoDIWTWLCFx/
# System timezone
timezone Asia/Tokyo --isUtc
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --all --initlabel --drives sda

# Disk partitioning information
part pv.295 --fstype="lvmpv" --ondisk=sda --size=1    --grow
part /boot  --fstype="xfs"   --ondisk=sda --size=500  --label=boot
volgroup rootvg --pesize=4096 pv.295
logvol swap  --fstype="swap" --size=256        --name=swaplv --vgname=rootvg
logvol /home --fstype="xfs"  --size=100        --name=homelv --vgname=rootvg --label="home" 
logvol /     --fstype="xfs"  --size=1   --grow --name=rootlv --vgname=rootvg --label="root" 

%packages
@^infrastructure-server-environment
@base
@compat-libraries
@core
@large-systems
@performance
@security-tools
kexec-tools
telnet
trace-cmd
vim
%end

�don com_redhat_kdump --enable --reserve-mb='auto'

%end

# Reboot after the installation is complete.(eject DVD media before rebooting)
reboot --eject

2.2ファイル検証

作成したファイルは、ksvalidatorコマンドで内容を検証します。
ksvalidatorは通常はインストールされていませんので、yum/dnfコマンドでパッケージを個別にインストールします。

# yum install pykickstart

検証は以下のコマンドで実行します。

$ ksvalidator ks.cfg

KickStartのバージョン毎の構文差異を気にする場合は、インストールするOSバージョンを指定して、検証することもできます。*4

$ ksvalidator -v RHEL7 ks.cfg

2.3インストーラを起動しキックスタートをローディングする

主な方法を以下に列挙します。個人的には、ネットワークが使えるならネット(http/httpsなど)、ネットワークが使えないならフロッピー(判別しやすいから)から設定ファイルを読みこませるのがいいと思っています。

  1. インストーラを起動する。(私はRHELのDVDメディアからブート)
  2. 起動画面で"tabキー"で介入し"ks="、または"inst.ks="オプションでキックスタートファイルの場所を指定する。(下記画面参照)*5
    1. httpの例:"inst.ks=http://192.168.0.1/ks.cfg"
    2. フロッピーの例:"inst.ks=hd:fd0:/ks.cfg"
    3. DVDの例:"inst.ks=cdrom:/ks.cfg"

※ファイルがメディア直下で、ファイル名が"ks.cfg"の場合は、":/ks.cfg"を省略可能です。
f:id:nopipi:20160722080514p:plain

2.4インストール完了

キックスタートファイルが上手く書かれていれば、後は最後まで自動的にインストールされます。

3.補足(kickstartファイルを読み込ませるベストプラクティス)

KickStartファイルをどう読み込ませるか以外に悩みましたので、私なりの考え方を整理しました。

(1)ネットワークが利用可能な環境の場合

ネットワークが利用可能であれば、http/httpsあたりでkickstartファイルを読み込ませるのが最も簡単で確実です。

(2)ネットワークが使えない場合

この場合が悩ましいです。私がおすすめと思った順に記載します。

(2)-1 インストーラをカスタマイズする

インストーラのイメージをカスタマイズして、作成したファイルを組み込み自動的に読み込ませるのが一番確実で、全自動化が可能です。ですが、リビジョンや設定を変更都度に、インストールイメージを作りなおさなければならないのが手間なので、OSインストールの頻度が低い場合は逆に非効率かもしれません。

(2)-2 フロッピーから読み取る

RHELドキュメントには詳細な説明が無いのが気になりますが・・・。ですが個人的には、フロッピーが使える環境であればフロッピーから読み込ませるのが、デバイス名が"fd0"で明確なのもあり、一番無難な気がします。*6

(2)-3 KicStartファイル専用のdvd(isoファイル)を準備して差し替える

kickStartのファイルをisoまたはDVDにし、インストーラで差し替えて利用する方法です。(オプションは、"inst.ks=cdrom/ks.cfg"という感じです。)"Plese Insert CDROM containing"というメッセージが表示されたらDVDを差し替えますが、ロックがかかってejectできなかったりするようです。

(2)-4 USBメモリor外付けHDDを利用する

RHELドキュメントを見ると、USBメモリか外付HDDから読み込むのが無難な方法です。ですが、インストールするディスク構成が異なるとデバイス名が変わるのが難点です。UUIDでデバイスを指定する方法もあるのですが、インストールメディアをカスタマイズせず、毎回"ks="オプションを手打ちする場合は長すぎて面倒です。

4.リファレンス(kickstartドキュメント)

必要な情報は大方、利用するRHEL/fedoraバージョンの「インストールガイド」の終盤にある「キックスタートを使ったインストール」という章に載っています。

*1:RHEL/Fedoraインストーラであるanacondaに含まれる機能です。kickStartを含むanacondaは、redhat社の「Red Hat Installer Engineering Team」が開発しており、ソース&ドキュメントはgithub(Red Hat Installer Engineering Team · GitHub)で公開されています。

*2:以前はファイル作成用のGUIがありましたが、今は開発が放置されているので利用は推奨されないようですインストールガイド 23.2. キックスタートを使ったインストールの実行方法の重要を参照

*3:anacondaの中のdracut用モジュールに"fetch-kickstart-disk"というシェルがあり、そこでファイルのパスのデフォルトが"/ks.cfg"と定義されています。

*4:指定できるバージョン一覧は、"ksvalidator -l dummy"コマンドで確認できます。ファイルパスの文字を何かしら入れないとエラーになるあたりが微妙ですが。

*5:どちらでも利用可能ですが、以前の書き方が"ks="で、最近は"inst.ks="が基本のようです。

*6:以前は、ks=floppyで読み込めましたが、今はks=hd:fd0のように指定します。