web-dev-qa-db-ja.com

Live CD:ログイン後にスクリプトが正しく機能しない

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を呼び出すと、正しく機能します。このエラーの原因は何ですか?助けてくれてありがとう。

1
Eyüp Alemdar

一部のプロセスは書き込み用にファイルを開いたままにしているため、次を使用してみてください。

while :; do mount $SERVER:/srv/nfs/updatefiles ~/nfs && break || sleep 3; done

これにより、成功するまで3秒ごとにmountコマンドが実行されます(必要に応じてこれを変更します)。

そして、怠惰なアンマウントも試してください:

umount -l ~/nfs

詳細とオプションについては、man mountman umountもお読みください。

1
Radu Rădeanu