PXE/NFSサーバー(192.168.1.10)、クライアントPC、およびディスクレスPCがあります。クライアントPCにベースubuntuをインストールしました。このスクリプト(update.sh)は、クライアントPCにログインした後に機能するように作成しました。
SERVER=192.168.1.10
echo "Copying files"
mount $SERVER:/srv/nfs/updatefiles ~/nfs
cp ~/nfs/file.txt ~/texts/
umount ~/nfs
echo "Reconfigure SSH"
dpkg-reconfigure openssh-server
echo "Completed"
Chownとchmodを変更し、sudoersの最後に権限を追加しました。
Sudo chown root:root ~/updatefiles/update.sh
Sudo chmod 700 ~/updatefiles/update.sh
Sudo nano /etc/sudoers
- hduser ALL=(ALL) NOPASSWD:/home/hduser/updatefiles/update.sh
ログイン後にこのスクリプトを呼び出すために.bash_profile
を作成しました。
Sudo nano ~/.bash_profile
- Sudo $HOME/updatefiles/update.sh
クライアントPCを再起動した後は正しく動作します。次に、Relinux(remastersysの実装)を使用して、クライアントPCからLinux Live CD(ubuntu.iso)を作成しました。 ubuntu.iso
をNFSサーバーにコピーし、PXE/NFS経由でディスクレスPCを起動しました。ディスクレスPCにログインした後、このエラーメッセージが表示されます。
Copying files
mount.nfs: /home/hduser/nfs is busy or already mounted
umount.nfs: /home/hduser/nfs: device is busy
debconf: DbDriver "config": /var/cache/debconf/config.dat is locked by another process: Resource temporarilt unavailable.
Completed
NFSマウントが機能することもあれば、SSHの再構成が機能することもありますが、ほとんどの場合、このエラーが発生します。スクリプトの先頭にsleep 5
を追加して機能させましたが、同じエラーメッセージが再度表示されました。ログイン完了後に手動でupdate.sh
を呼び出すと、正しく機能します。このエラーの原因は何ですか?助けてくれてありがとう。
一部のプロセスは書き込み用にファイルを開いたままにしているため、次を使用してみてください。
while :; do mount $SERVER:/srv/nfs/updatefiles ~/nfs && break || sleep 3; done
これにより、成功するまで3秒ごとにmount
コマンドが実行されます(必要に応じてこれを変更します)。
そして、怠惰なアンマウントも試してください:
umount -l ~/nfs
詳細とオプションについては、man mount
とman umount
もお読みください。