Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
ディスクレスシステムのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
ディスクレスシステム
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[Category:Arch の入手とインストール]] [[en:Diskless system]] [[ru:Diskless system]] [[zh-hans:Diskless system]] {{Related articles start}} {{Related|NFS}} {{Related|NFS/トラブルシューティング}} {{Related|PXE}} {{Related|Mkinitcpio#net を使う}} {{Related|iSCSI ブート}} {{Related articles end}} [[Wikipedia:Diskless node]] より: :''ディスクレスノード (またはディスクレスワークステーション) とは、ディスクドライブを使わずに、ネットワークブートを利用してサーバーからオペレーティングシステムをロードするワークステーション、またはパーソナルコンピュータのことである。'' == サーバー設定 == まず最初に、以下をインストールする必要があります: * ディスクレスノードに IP アドレスを割り当てるための [[Dhcpd|DHCP]] サーバー。 * ブートイメージを転送するための [[TFTP]] サーバー (全ての PXE オプション ROM の必須要件)。 * Arch 環境をディスクレスノードにエクスポートするためのネットワークストレージ ([[NFS]] または NBD)。 {{Note|{{pkg|dnsmasq}} は DHCP と TFTP サーバーの両方として使うことができます。詳しくは [[dnsmasq]] の記事を参照。}} === DHCP === ISC {{Pkg|dhcp}} をインストールして設定: {{hc|/etc/dhcpd.conf|2= allow booting; allow bootp; authoritative; option domain-name-servers 10.0.0.1; option architecture code 93 = unsigned integer 16; group { next-server 10.0.0.1; if option architecture = 00:07 { filename "/grub/x86_64-efi/core.efi"; } else { filename "/grub/i386-pc/core.0"; } subnet 10.0.0.0 netmask 255.255.255.0 { option routers 10.0.0.1; range 10.0.0.128 10.0.0.254; } } }} {{Note|{{ic|next-server}} は TFTP サーバーのアドレスにしてください。他の値はネットワークにあわせて変更してください。}} RFC 4578 には "Client System Architecture Type" dhcp オプションが定義されています。上記の設定の場合、PXE クライアントが x86_64-efi バイナリ (タイプ 0x7) をリクエストした場合、適切に返答し、そうでない場合はレガシーなバイナリを使います。これによって、同一のネットワークセグメント上で同時に UEFI とレガシーな BIOS のクライアントを起動できるようにしています。 ISC DHCP の [[systemd]] サービスを起動してください。 === TFTP === TFTP サーバーはブートローダーやカーネル、initramfs などをクライアントに転送にするのに使います。 TFTP の root は {{ic|/srv/arch/boot}} に設定してください。詳しくは [[TFTP]] を参照。 === ネットワークストレージ === NFS と NBD どちらを使用する場合でも複数のクライアントを扱うことができますが、大きな違いとして、NBD では (ファイルシステムを直接操作するため) {{ic|copyonwrite}} モードを使う必要があります。そのため、クライアントが切断すると全ての書き込みが破棄されます。ただし、場合によってはこれが望ましいということも考えられます。 ==== NFS ==== サーバーに {{Pkg|nfs-utils}} をインストールしてください。 Arch 環境の root を [[NFS]] の exports に追加する必要があります: {{hc|/etc/exports|2= /srv *(rw,fsid=0,no_root_squash,no_subtree_check) /srv/arch *(rw,no_root_squash,no_subtree_check) }} そして、NFS サービスを起動してください: {{ic|rpc-idmapd}} {{ic|rpc-mountd}}。 ==== NBD ==== {{Pkg|nbd}} をインストールして設定します。 {{hc|# vim /etc/nbd-server/config|2= [generic] user = nbd group = nbd [arch] exportname = /srv/arch.img copyonwrite = false }} {{Note|複数のクライアントで NBD 共有を同時に使用したい場合 {{ic|copyonwrite}} を true に設定してください。詳しくは {{man|5|nbd-server}} を参照。}} {{ic|nbd}} systemd サービスを起動してください。 == クライアントのインストール == 次に、サーバーのサブディレクトリに完全な Arch Linux 環境を構築します。起動時、ディスクレスノードは DHCP サーバーから IP アドレスを取得して、PXE を使ってホストから起動し、構築した環境を root としてマウントします。 === ディレクトリのセットアップ === 最低でも1ギガバイトの[[Wikipedia: Sparse file|スパースファイル]]を作成して、ファイル上に btrfs ファイルシステムを作成してください (もちろん、必要であればブロックデバイスや [[LVM]] を使うこともできます)。 # truncate -s 1G /srv/arch.img # mkfs.btrfs /srv/arch.img # export root=/srv/arch # mkdir -p "$root" # mount -o loop,discard,compress=lzo /srv/arch.img "$root" {{Note|NBD ではファイルシステムを作成する必要がありますが NFS では必須ではありません。}} === ブートストラップのインストール === {{Pkg|devtools}} と {{Pkg|arch-install-scripts}} をインストールしてから {{ic|mkarchroot}} を実行してください。 # pacstrap -d "$root" base mkinitcpio-nfs-utils nfs-utils {{Note|どんな場合でも {{Pkg|mkinitcpio-nfs-utils}} は必要です。初期ブート空間で使われる {{ic|ipconfig}} が入っているためです。}} そして initramfs を生成してください。 ==== NFS ==== NFSv4 のマウントをするためには {{ic|net}} フックに細かい修正を加える必要があります ({{ic|net}} フックのデフォルトである {{ic|nfsmount}} はサポートされていません)。 # sed s/nfsmount/mount.nfs4/ "$root/usr/lib/initcpio/hooks/net" > "$root/usr/lib/initcpio/hooks/net_nfs4" # cp $root/usr/lib/initcpio/install/net{,_nfs4} クライアント側で {{pkg|mkinitcpio-nfs-utils}} がアップデートされたときに上書きされないように {{ic|net}} のコピーを作成する必要があります。 {{ic|$root/etc/mkinitcpio.conf}} を編集して {{ic|MODULES}} に {{ic|nfsv4}} を、{{ic|HOOKS}} に {{ic|net_nfs4}} を、{{ic|BINARIES}} に {{ic|/usr/bin/mount.nfs4}} を追加してください。 そして、作成した環境に [[chroot]] して ''mkinitcpio'' を実行します: # arch-chroot "$root" mkinitcpio -p linux ==== NBD ==== クライアントに {{AUR|mkinitcpio-nbd}} パッケージをインストールする必要があります。[[makepkg]] でビルドしてインストールしてください: # pacman --root "$root" --dbpath "$root/var/lib/pacman" -U mkinitcpio-nbd-0.4-1-any.pkg.tar.xz {{ic|HOOKS}} 行の {{ic|net}} の後ろに {{ic|nbd}} を追加する必要があります。{{ic|net}} はネットワークの設定を行いますが、カーネル行で {{ic|nfsroot}} が指定されていない場合 NFS のマウントは行いません。 == クライアント設定 == 以下の設定の他に、[[ネットワーク設定#ホストネームの設定|ホストネーム]]、[[時刻#タイムゾーン|タイムゾーン]]、[[ロケール#システム全体のロケールを設定する|ロケール]]、[[コンソールでのキーボード設定|キーマップ]]なども設定する必要があります。[[インストールガイド]]を見て下さい。 === ブートローダー === ==== GRUB ==== ドキュメントで明記はされていませんが、GRUB は PXE によるロードをサポートしています。 # pacman --root "$root" --dbpath "$root/var/lib/pacman" -S grub {{ic|grub-mknetdir}} を使用してターゲット環境に grub プレフィックスを作成してください: # arch-chroot "$root" grub-mknetdir --net-directory=/boot --subdir=grub grub-mknetdir は現在コンパイル・インストールされているターゲット全てのプレフィックスを作成し、{{Pkg|grub}} のメンテナは同じパッケージで両方のアーキテクチャを提供しているため、grub-mknetdir を実行するのは一度だけですみます。 以下のような GRUB の設定を作成します: {{hc|# vim "$root/boot/grub/grub.cfg"|2= menuentry "Arch Linux" { linux /vmlinuz-linux quiet add_efi_memmap ip=:::::eth0:dhcp nfsroot=10.0.0.1:/arch initrd /initramfs-linux.img } }} [[GRUB]] の黒魔術によって {{ic|1=set root=(tftp,10.0.0.1)}} が自動的に設定されるため、特に設定をしなくてもカーネルと initramfs は TFTP で転送されます。TFTP 以外のメニューエントリが必要な場合、明示的に設定すると良いでしょう。 {{Note|kernel 行を必要に応じて変更してください。NBD 関連のオプションは [[Syslinux#Pxelinux|Pxelinux]] を参照。}} ==== Pxelinux==== {{Pkg|syslinux}} には [[Syslinux|Pxelinux]] が含まれています。詳しくは [[Syslinux#Pxelinux]] を参照。 === マウントポイントの追加 === ==== NBD root ==== [[NFS]] と比べて高いディスク性能を発揮するために、ルートファイルシステムのマウントを {{ic|rw}} に切り替えて {{ic|1=compress=lzo}} を有効にすると良いでしょう: {{hc|# vim "$root/etc/fstab"|2= /dev/nbd0 / btrfs rw,noatime,discard,compress=lzo 0 0 }} ==== プログラムステートディレクトリ ==== 例えば {{ic|/var/log}} を tmpfs でマウントして、複数のホストのログが混ざらないようにしたり、同じように {{ic|/var/spool/cups}} を tmpfs でマウントして、同じスプールを使用する cups のインスタンスが互いに干渉しないようにする場合: {{hc|# vim "$root/etc/fstab"|2= tmpfs /var/log tmpfs nodev,nosuid 0 0 tmpfs /var/spool/cups tmpfs nodev,nosuid 0 0}} 一番良いのは個々のホストごとにソフトウェアの状態やデータベースが保存されるように設定することです。例として [[Puppet]] を実行したい場合、puppet のユニットファイルで {{ic|%H}} を使う方法があります: {{hc|# vim "$root/etc/systemd/system/puppetagent.service"|2= [Unit] Description=Puppet agent Wants=basic.target After=basic.target network.target [Service] Type=forking PIDFile=/run/puppet/agent.pid ExecStartPre=/usr/bin/install -d -o puppet -m 755 /run/puppet ExecStart=/usr/bin/puppet agent --vardir=/var/lib/puppet-%H --ssldir=/etc/puppet/ssl-%H [Install] WantedBy=multi-user.target }} Puppet-agent は vardir と ssldir を作成します (存在しない場合)。 上記のどちらの方法も使えない場合、[https://www.freedesktop.org/wiki/Software/systemd/Generators systemd ジェネレータ] を作成してホストごとにマウントユニットを作成するという選択肢があります (残念ながらマウントユニットで記述子は使えません)。 == クライアントの起動 == === NBD === NBD を使用する場合、クライアントを起動する前に {{ic|arch.img}} をアンマウントする必要があります。 カーネルをアップデートするとき、クライアントを起動している間にクライアントのファイルシステムをマウントすることはできないため、クライアントのファイルシステムからカーネルを分離しなくてはなりません。 クライアント環境から tftp のルートディレクトリ ({{ic|/srv/boot}}) に {{ic|$root/boot}} をコピーしてください: # cp -r "$root/boot" /srv/boot クライアントを起動する前に {{ic|$root}} をアンマウントする必要があります: # umount "$root" {{Note|この構成でカーネルをアップデートするには、[[fstab]] で [[NFS]] を使って {{ic|/srv/boot}} を (カーネルをアップデートする前に) クライアントにマウントするか、NBD からクライアントを切断した後にクライアントファイルシステムをマウントする必要があります。}} == 参照 == * [https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt kernel.org: Mounting the root filesystem via NFS (nfsroot)] * [http://www.syslinux.org/wiki/index.php/PXELINUX syslinux.org: pxelinux FAQ]
このページで使用されているテンプレート:
テンプレート:AUR
(
ソースを閲覧
)
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:META Related articles start
(
ソースを閲覧
)
テンプレート:Man
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:Related
(
ソースを閲覧
)
テンプレート:Related articles end
(
ソースを閲覧
)
テンプレート:Related articles start
(
ソースを閲覧
)
ディスクレスシステム
に戻る。
検索
検索
ディスクレスシステムのソースを表示
話題を追加