Arch Linux:Sambaのルートパーティション

友人の皆さん、ご挨拶!
今日、私がArch Linuxを愛する理由を説明しません。あなたはすべてを自分で見るでしょう。

挑戦する


-ルートパーティションがSambaサーバーからネットワーク経由でマウントされるようにArch Linuxをインストールする

解決策


この問題を解決するには、次のものが必要です。
-Arch Linux(またはLiveCD)がインストールされている
-AURのmkinitcpio-mount-hook(http://aur.archlinux.org/packages.php?ID=40372)
-さらに2つの小さなフック:mount.cifsおよびmount.loop
-extra / devtools(mkarchrootを含む)
-core / mkinitcpio-nfs-utils(このパッケージには、IPアドレスを取得するためのユーティリティとスクリプトが含まれています)
-収集スクリプト

1.そして、後者から始めます。

build.sh
#!/bin/bash -e chroot_path=/tmp/chroot # Install base and some needed packages mkarchroot -f $chroot_path base mkinitcpio-nfs-utils # This adds cifs and loop modules to the initcpio image cp mount.cifs mount.loop -t $chroot_path/lib/initcpio/install # Add mount hook (http://aur.archlinux.org/packages.php?ID=40372) wget "http://people.oh14.de/andrej/mkinitcpio-mount-hook/mkinitcpio-mount-hook-0.3-stickbuild.tar.xz" -O - | tar -xJ --wildcards -C /tmp mkinitcpio-mount-hook-0.3/initcpio/*/mount cp -r /tmp/mkinitcpio-mount-hook-0.3/initcpio/* -t $chroot_path/lib/initcpio # Remove hard drives support and keep only needed hooks (added: net, mount, mount.cifs, mount.loop) sudo sed -i 's/^HOOKS=".*"/HOOKS="base udev net filesystems mount mount.cifs mount.loop"/' $chroot_path/etc/mkinitcpio.conf # Keep only one initcpio image (we don't need fallback) sed -i "s/^PRESETS=.*/PRESETS=('default')/" $chroot_path/etc/mkinitcpio.d/kernel26.preset # Adapt network configuration for network-based root sed -i 's/^DHCPCD_ARGS="-q"$/DHCPCD_ARGS="-q -p"/' $chroot_path/etc/conf.d/dhcpcd sed -i 's/^interface=$/interface=eth0/' $chroot_path/etc/rc.conf sed -i 's/^NETWORK_PERSIST="no"$/NETWORK_PERSIST="yes"/' $chroot_path/etc/rc.conf # Rebuild initcpio image mkarchroot -r "mkinitcpio -p kernel26" $chroot_path 


最初のコマンドで、chroot環境を作成し、ベースグループmkinitcpio-nfs-utilsからパッケージをインストールします。ここで、必要に応じて他のパッケージを追加できます。 2番目のコマンドは、initrcpioのcifsおよびループデバイスのサポートを追加します。 3番目のコマンドは、ルートパーティションをマウントする機能を拡張します。 4番目は、initcpioからの物理ハードドライブサポートを無効にし、cifs、ループ、および拡張マウント用のフックを接続します。 5番目のコマンドは、フォールバックのinitcpioイメージを無効にします。これは必要ありません。 アセンブリ中に自動検出を使用しません。 6番目のコマンドは、ネットワークが作業の完了時に事前に切断されないように、新しいシステムを構成します。 そして最後のチームは、すでにネットワークサポート、cifs、ループ、高度なマウントを備え、ローカルハードドライブをサポートしていないinitcpioを再構築します。

2.次の2つのファイルには、cifs(samba)とループ(ディスクイメージのマウント)の操作に必要なinitcpioモジュールが含まれています。

mount.cifs
 # vim:set ft=sh: install () { MODULES="cifs hmac md4 md5" BINARIES="" FILES="" SCRIPT="" } help () { cat <<HELPEOF This hook helps to mount cifs. HELPEOF } 


マウントループ
 # vim:set ft=sh: install () { MODULES="loop" BINARIES="" FILES="" SCRIPT="" } help () { cat <<HELPEOF This hook helps to mount loop images. HELPEOF } 


これはすでにchrootとinitcpioをアセンブルするには十分ですが、ディスクイメージにchrootを配置する必要があります。 これは、Sambaサーバーでのacl、symlinks、およびhardlinksのサポートについて困惑しないようにするために必要です。 ディスクイメージの利点は、LinuxだけでなくWindowsもサーバーとして使用できることです。

3. 1Gbファイルを作成し、たとえばext4の下でフォーマットして、/ tmp / chrootにマウントします。

 #!/bin/bash -e dd if=/dev/null of=/tmp/arch.img bs=1M seek=1024 mkfs.ext4 -F /tmp/arch.img mkdir /tmp/chroot mount /tmp/arch.img /tmp/chroot 


4.これで、すでにbuild.shを実行できます。 スクリプトの実行後、/ tmp / chroot / boot / vmlinuz26および/tmp/chroot/boot/kernel26.imgファイルをコピーして(これらはまだ便利です)、イメージをアンマウントする必要があります。

 #!/bin/bash -e cp /tmp/chroot/boot/{vmlinuz26,kernel26.img} /tmp umount /tmp/arch.img 


5.それだけですか? はい、それだけです。 まあ、ほとんどすべて。 これをすべてロードする方法を見つけることは今なお残っています。 これを行うには、次のものが必要です。
1)/tmp/arch.imgを取得して、Sambaサーバーに配置します。
2)ブート方法(CD-ROM、PXE、Grub、または想像できるその他の方法)を決定します。
3)/ tmp / chroot / boot / vmlinuz26および/tmp/chroot/boot/kernel26.imgをロード先にコピーします。

ダウンロードオプション
# grub
kernel /boot/vmlinuz26 ip=::::::dhcp mounts=cifs,root cifs_dev=//SERVER_IP/share cifs_target=/cifs cifs_type=cifs cifs_opts=username=guest root_dev=/cifs/arch.img root_type=ext4
initrd /boot/kernel26.img

# isolinux/pxelinux
kernel vmlinuz26
append initrd=kernel26.img ip=::::::dhcp mounts=cifs,root cifs_dev=//SERVER_IP/share cifs_target=/cifs cifs_type=cifs cifs_opts=username=guest root_dev=/cifs/arch.img root_type=ext4


:ユーザー名= guestのパラメーターに注意してください。 誰もがディレクトリにアクセスできるようにしたくない場合は、username = guestの代わりに特定のアカウントとパスワードを指定できます。

結果


次のように起動するシステムを取得しました。
1)vmlinuz26はkernel26.imgでローカルに起動されます(これらのファイルはハードディスク、CD、tftpサーバーにあります)。
2)ネットワークディレクトリ// SERVER_IP / shareを/ cifsディレクトリにマウントします。
3)/cifs/arch.imgをルートパーティションとしてマウントすると、システムは起動し続けます。

ほぼ同じ方法で、nfsにイメージを配置できます。 この実験は、イメージファイルが読み取り専用でマウントされ、変更がtmpfsに書き込まれるときにaufsでも実行されましたが、残念ながら、現在のカーネルではaufsサポートが除外されています。

Source: https://habr.com/ru/post/J122708/


All Articles