
Ubuntu日本語フォーラム

ログインしていません。
すみませんがお知恵を拝借させてください。
現在、仮想マシン(vmware, Ubuntu10.04 desktop amd64)に追加の仮想HDDを設定し、自動マウントで中身も見えている状態です。
勉強も兼ねて rsync 等を使ったバックアップ作業のスクリプトを書いてみることにしました。
dpkg で追加(バックアップ)HDDへインストールされたパッケージリストを出力させようとしたのですが、
./backup-anything.sh: line 6: /media/backup/install-pkg.txt: Permission denied
と出てしまいます。
検索すると SELinux や mount の nosuid が出てきました。
実機での動作も想定しており、出来れば自動マウント下でやりたいのですが良い方法はあるのでしょうか?
また、rsync の使い方で「こうした方が良いよ。」とかのレクチャーもいただけたら嬉しいです。
よろしくお願いします。
backup-anything.sh の内容
#!/usr/bin/env bash sudo rsync -va --exclude=/media/backup/ --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/tmp --delete / /media/backup # get the Installed Packages list sudo dpkg --get-selections > /media/backup/install-pkg.txt
mount の実行結果
proc on /proc type proc (rw,noexec,nosuid,nodev) none on /sys type sysfs (rw,noexec,nosuid,nodev) none on /sys/fs/fuse/connections type fusectl (rw) none on /sys/kernel/debug type debugfs (rw) none on /sys/kernel/security type securityfs (rw) none on /dev type devtmpfs (rw,mode=0755) none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620) none on /dev/shm type tmpfs (rw,nosuid,nodev) none on /var/run type tmpfs (rw,nosuid,mode=0755) none on /var/lock type tmpfs (rw,noexec,nosuid,nodev) none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755) binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev) gvfs-fuse-daemon on /home/ユーザー名/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=ユーザー名) /dev/sdb on /media/backup type ext4 (rw,nosuid,nodev,uhelper=udisks)
オフライン
makopi による投稿:
コード:
./backup-anything.sh: line 6: /media/backup/install-pkg.txt: Permission deniedと出てしまいます。
エラーメッセージにあるように権限不足のようです。
makopi による投稿:
backup-anything.sh の内容
コード:
#!/usr/bin/env bash sudo rsync -va --exclude=/media/backup/ --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/tmp --delete / /media/backup # get the Installed Packages list sudo dpkg --get-selections > /media/backup/install-pkg.txt
このスクリプトを実行すると、
sudo dpkg --get-selections
の部分は管理者権限で実行されますが、
> /media/backup/install-pkg.txt
の部分が一般ユーザ権限での実行となります。
/media/backupにマウントされている領域がext4のようですので、このディレクトリが管理者権限で無いと書き込めない状態になっているのでは無いでしょうか。
一般ユーザで読み書き可能に設定するか、
sudo dpkg --get-selections | sudo tee /media/backup/install-pkg.txt
のようにして管理者権限でファイルを書き出す必要があるかと思います。
オフライン
hmatsue さん
sudo dpkg --get-selections | sudo tee /media/backup/install-pkg.txt
を実行したところ、意図する動作となりました。
ありがとうございました。
オフライン
書き込み先に一般ユーザの権限を与えられないという制限があるとして,
スクリプト内のコマンドの殆どを root 権限で動かさなければならないという状況下では,瑣末な問題ですが,
makopi さん による投稿:
勉強も兼ねて
とのことなので,正確な「権限」の理解のために…
#1 の文脈においては,厳密に言えば,dpkg --get-selections の前の sudo は不必要です.
dpkg --get-selections | sudo tee /media/backup/install-pkg.txt
オフライン
einundzwanzighundertsechs さん による投稿:
厳密に言えば,dpkg --get-selections の前の sudo は不必要です.
コード:
dpkg --get-selections | sudo tee /media/backup/install-pkg.txt
動作を確認しました。アップデート時にパスワードを要求されるのでパッケージ関連は管理者権限だと思っていました。
まだ試してはいませんが
sudo dpkg --set-selections sudo apt-get dselect-upgrade
も sudo は要らないのでしょうか?
オフライン
/ 以下をまとめてrsyncしているようですが、 ubuntuは再インストールが比較的楽なので、更新されるディレクトリのみをバックアップした方が効率がいいです。
例えば、/home だけとか。
場合によっては/etc /var なども。
と思ったのですが、ubuntuをvmwareで動かしているのならばvmwareでスナップショットを取っておくのが一番簡単な方法かと…
オフライン
makopi による投稿:
動作を確認しました。アップデート時にパスワードを要求されるのでパッケージ関連は管理者権限だと思っていました。
まだ試してはいませんがコード:
sudo dpkg --set-selections sudo apt-get dselect-upgradeも sudo は要らないのでしょうか?
お恥ずかしながら自分もdpkgだから、と思ってみてしまっていてsudoの部分をスルーしてしまっていました。。
--get-selectionsは情報を取ってくるだけなので管理者権限は必要ありません。
--set-selectionsやapt-getでのパッケージのインストール作業などはシステムに変更を加えるため管理者権限が必要になります。
つまりsudoを付ける必要があります。
同様に、
apt-cache search package-name
apt-get source package-name
などは管理者権限は不要ですし、
apt-get install package-name
apt-get remove package-name
などでは管理者権限が必要になります。
オフライン
yama さん による投稿:
更新されるディレクトリのみをバックアップした方が効率がいいです。
例えば、/home だけとか。
場合によっては/etc /var なども。
参考にさせていただきます。
対象ディレクトリーの絞り込みはこの後やるつもりです。
ubuntuをvmwareで動かしているのならばvmwareでスナップショットを取っておくのが一番簡単な方法かと…
はい、普段はそうしています。今回は実機に向けての勉強と見ていただければよろしいかと思います。
ありがとうございました。
オフライン
hmatsue さん による投稿:
--get-selectionsは情報を取ってくるだけなので管理者権限は必要ありません。
--set-selectionsやapt-getでのパッケージのインストール作業などはシステムに変更を加えるため管理者権限が必要になります。
つまりsudoを付ける必要があります。
同様に、
apt-cache search package-name
apt-get source package-name
などは管理者権限は不要ですし、
apt-get install package-name
apt-get remove package-name
などでは管理者権限が必要になります。
詳しい説明ありがとうございました。
オフライン