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サポートが除外されています。



All Articles