Bacularisで Baculaの設定をします。
「Baculaで Ubuntu Serverのバックアップ(その1)」で Baculaをインストールをし、
「Baculaで Ubuntu Serverのバックアップ(その2)」で WebGUIのBacularisをインストールし、
「Baculaで Ubuntu Serverのバックアップ(その3)」で Baculaの構成要素につき復習し、
「Baculaで Ubuntu Serverのバックアップ(その4)」で Baculaの設定に必要な言葉を学びました。
ここでは Bacularisを使って Baculaのバックアップ設定をしていくんですが、その過程でこんなエラーに遭遇します。
Error Error 1000: Internal error. [Warning] file_put_contents(/opt/bacula/etc/bacula-sd.conf): Failed to open stream: Permission denied (@line 64 in file /usr/share/bacularis/protected/vendor/bacularis/bacularis-common/Common/Modules/ConfigBacula.php).
これは [/opt/bacula/etc/]ディレクトリ以下の設定ファイル変更がパーミッションにより蹴られた、という事なんですが「何でこんなエラーが?」と思います。
調べてみました。
subro@UbuntuServer2204-2:~$ ls -la /opt/bacula/etc
ls: ディレクトリ '/opt/bacula/etc/' を開くことが出来ません: 許可がありません
subro@UbuntuServer2204-2:~$ sudo ls -la /opt/bacula/etc
合計 40
drwxr-x--- 2 bacula bacula 4096 5月 12 17:16 .
drwxr-xr-x 11 root root 4096 5月 12 17:12 ..
-rw-r----- 1 bacula bacula 9512 5月 12 17:16 bacula-dir.conf
-rw-r----- 1 bacula root 1181 5月 12 17:12 bacula-fd.conf
-rw-r----- 1 bacula bacula 9969 5月 12 17:16 bacula-sd.conf
-rw-r----- 1 bacula bacula 287 5月 12 17:12 bconsole.conf
ディレクトリとファイルのパーミッションが非常に厳しくなっています。
Bacularisの実体は NGINX+PHPですので [www-data]ユーザーで実行されいるのに、[bacula]ユーザー:[bacula]グループのファイルのパーミッションで、グループ外には一切の権限がないのが原因です。
Bacularisのインストールの過程で、Baculaの設定を行うプログラム実行のために [www-data]ユーザーが sudoできるよう設定しましたけど、あれは指定したコマンド実行時のみ有効にする設定でした。
こちらは PHPでファイルを直接操作するので、ファイルシステムのパーミッションに阻まれているわけです。
当件に関しては、Bacula謹製の WEBツール Baculumのマニュアルに「よくあるエラー」として記載がありました。
Permission denied error when saving Bacula configuration
解決策は上記ディレクトリ・ファイルのパーミッションを「適切に設定する」ことと曖昧に書いてあります。
しかし Baculaのファイルパーミッションが厳しくなっているのは理由があるからで、外部ツールのためにそれを緩めるのはちょっとどうかと思います。
WEBツールの設計として少し難があるのかも知れません。
腑に落ちないところはありますが、以下の対策を取ることにしました。
- [www-data]ユーザーを [bacula]グループに所属させる
- [/opt/bacula/etc/bacula-sd.conf][/opt/bacula/etc/bacula-dir.conf]ファイルを [www-data]ユーザーで書き換えられるようにグループパーミッションを緩める
設定します。
subro@UbuntuServer2204-2:~$ sudo usermod -aG bacula www-data
subro@UbuntuServer2204-2:~$ sudo chmod 660 /opt/bacula/etc/bacula-sd.conf
subro@UbuntuServer2204-2:~$ sudo chmod 660 /opt/bacula/etc/bacula-dir.conf
この後一度 OSリブートをして Baculaを立ち上げ直しました。
ここでの実験ではテープの代わりにファイルをバックアップ先にするつもりなので、GUIでの設定を開始する前にそのためのディレクトリ [/backup]作り、オーナー:グループを [bacula]:[bacula]とし、パーミッションは [rwxr-xr-x(755)]にしておきました。
このディレクトリは Baculaの中で「デバイス」として扱われます。
subro@UbuntuServer2204-2:~$ sudo mkdir /backup
subro@UbuntuServer2204-2:~$ sudo chown bacula:bacula /backup
subro@UbuntuServer2204-2:~$ sudo chmod 755 /backup
subro@UbuntuServer2204-2:~$ ls -ld /backup
drwxr-xr-x 2 bacula bacula 4096 5月 18 16:13 /backup
デバイスの中には「ボリューム」が必要ですが、ボリューム作成は GUIでできますので、それは後ほど。
それでは Bacularisにログインして、バックアップのための設定をしていきます。
ここまで長かった…。
上の [/backup]ディレクトリを新規デバイスとして設定します。
ハンバーガーメニューから [Storages]を選択します。
+ Add deviceを押します。
デバイスの設定画面です。
一番上の [Copy configuration from:]で既存のものをコピーできますので、デフォルトで登録されている[FileChgr1-Dev1]デバイスを真似することにしました。
赤枠が今回の設定として変更した箇所です。
[Media Type]は既存のものと重ならないよう [File3]としています。
画面の一番下にCreateが出ているのでこれを押します。
OKを押します。
新規ストレージを作ります。
+ Add Storageを押します。
一番上の [Copy configuration from:]で既存のものをコピーできますので、[FileChgr1-Dev1]デバイスに紐付いている [File1]ストレージを真似することにしました。
赤枠が今回の設定として変更した箇所です。
Createを押します。
OKを押します。
ストレージができました。
新規プールを作ります。
ハンバーガーメニューから[Pools]を選択します。
Add poolを押します。
プールの設定画面です。
一番上の [Copy configuration from:]で既存のものをコピーできますので、デフォルトで登録されている[Fil1]プールを真似することにしました。
赤枠が今回の設定として変更した箇所です。
画面の一番下にCreateが出ているのでこれを押します。
OKを押します。
プールができました。
ボリューム作成とプールへの紐付けをします。
ハンバーガーメニューから [Volumes]を選択します。
Label volume(s)を押します。
ボリュームの設定画面です。
[Pool:][Storage:]には上で作ったものを指定しています。
Labelを押します。
こんな風に進捗がでます。
上手く言っているようなので右上の×で閉じます。
[/backup]ディレクトリを見てみます。
subro@UbuntuServer2204-2:~$ ls -l /backup
合計 4
-rw-r----- 1 bacula tape 261 5月 18 17:25 TestBackupVolume01
ボリュームに相当するファイルができていますね。
グループは[tape]になっていました。
もう一回 Poolを見ます。
[TestBackupPool]の [No. vols]列が 1になりました。
詳細を押します。
[Volumes in pool]を選択すると、プールに紐付けられたボリュームが表示されました。
バックアップの設定をします。
ハンバーガーメニューから [Jobs]を選択します。
New backup jobを押します。
[Job name:]を入力し、次へを押します。
[Client:]に自分自身の [UbuntuServer2204-2-fd]クライアントを選択しました。
まだファイルセットの設定が無いので、+ Add new FileSetを押します。
そうすると、下にこの入力項目が出てきます。
[Name:]を設定し、+ 追加を押すとメニューが出ますので、[+ Add include block]を選択します。
そうすると、また下にこのように伸びます。
+ 追加を押すとメニューが出ますので、[+ Add files by file browser]を選択します。
①クライアントを選択します
②ここでクライアント内のファイルシステムを閲覧できます
③バックアップしたいものを左の枠(②)からこちらにドラッグ&ドロップします
④Apply file selectionを押します。
こう表示されますので、Createを押します。
(このボタンを押すべきと分かり辛い…)
[FileSet:]に今作ったものが自動で入りますので、次へを押します。
[Storage:]と[Pool:]を指定し、次へを押します。
[Level:]には[Full]を指定しました。他は「差分バックアップ」ですかね。
[Messages:]は良く分かりませんが [Standard]にしておきました。
次へを押します。
実行スケジュールです。
とりあえず [WeeklyCycle](週次)にしました。
+ Add new Scheduleを押すと新規のスケジュール設定を細々とできます。
次へを押します。
設定のサマリが表示されますので、良ければCreate jobを押します。
ジョブができました。
詳細を押します。
ジョブを実行してみます。
ジョブ実行を押します。
ジョブ実行を押します。
バックアップができました。
ダッシュボードに戻ってきますと、こんな風になっていました。
宜しいんじゃないでしょうか。
というわけで、このシリーズも長くなってきましたが、やっとこバックアップができました。
次回「Baculaで Ubuntu Serverのバックアップ(その6)」ではバックアップからファイルをリストアしてみようと思います。