BackupPC
BackupPC は Unix, Linux, Windows, macOS の PC やデスクトップあるいはノートパソコンからサーバーまで様々なディスクをバックアップすることができる構成なエンタープライズ級のシステムです。BackupPC は細かい設定ができる上にインストールや管理が簡単になっています。
ハードディスクや RAID システムの費用は下がっているとはいえ、マシンのデータをサーバーのローカルディスクやネットワークストレージにバックアップすることは実践的かつ費用対効果からみても利益のあることです。完全なバックアップソリューションとして、またはサーバーを定期的にバックアップするアーカイブとして利用することができます。
目次
インストール
backuppc を インストール してください。 トランスポートとして rsync を使いたい場合は rsync と perl-file-rsyncp を、CGI インターフェイスに使用状況データを表示したい場合は rrdtool をインストールしてください。
そして backuppc.serviceを 起動/有効化 します。
データディレクトリを別のパーティションに配置する
BackupPC プールはデフォルトでは /var/lib/backuppc の下に保存され、backuppc ユーザのホームディレクトリとしても機能します。
このパスは、/etc/backuppc/config.pl 内の $Conf{TopDir} エントリで変更できます。
典型的な理由としては、システムを高速だが高価で小さい SSD に保存していて、バックアップを従来のハードディスクに保存する必要がある場合や、LVM で管理されたパーティションにバックアッププールを保存して、需要の変化に応じてパーティションのサイズを変更できるようにしたい場合などがあります。
ドキュメントでは $Conf{TopDir} エントリを変更せず、代わりにシンボリックリンクを使用することを提案しています。しかし、backuppc のパッケージアップグレードは、/var/lib/backuppc やデフォルトのサブディレクトリ cpool、pc、pool のシンボリックリンクを、何の警告もなしに 空のディレクトリに置き換えるので、注意してください。
従って、シンボリックリンクの代わりに fstab でバインドマウントを使うか、/etc/backuppc/config.pl の推奨を意図的に無視して $Conf{TopDir} を変更することを推奨します。代わりに、以下のような pacman の トランザクションフック を使ってください (シェルスクリプトを 実行可能 にするのを忘れないでください):
/etc/pacman.d/hooks/backuppc-restore-symlinks-post.hook
[Trigger] Operation = Upgrade Type = Package Target = backuppc [Action] Description = Restore symlinks for BackupPC pool directories When = PostTransaction Exec = /etc/pacman.d/hooks/backuppc-restore-symlinks-post.sh
/etc/pacman.d/hooks/backuppc-restore-symlinks-post.sh
#!/usr/bin/bash
if [ ! -d /tmp/backuppc-symlinks-cache ]; then
exit 0
fi
if [ -L /tmp/backuppc-symlinks-cache/backuppc ]; then
rmdir /var/lib/backuppc/{cpool,pc,pool,}
mv /tmp/backuppc-symlinks-cache/backuppc /var/lib/
echo "==> Restored /var/lib/backuppc => $(readlink /var/lib/backuppc)"
fi
for dir in cpool pc pool; do
if [ -L /tmp/backuppc-symlinks-cache/$dir ]; then
rmdir /var/lib/backuppc/$dir
mv /tmp/backuppc-symlinks-cache/$dir /var/lib/backuppc/
echo "==> Restored /var/lib/backuppc/${dir} => $(readlink /var/lib/backuppc/$dir)"
fi
done
if [ -f /tmp/backuppc-symlinks-cache/was-running ]; then
echo '==> BackupPC service was stopped for upgrade.'
echo '==> Check the configuration and run `systemctl start backuppc.service` to restart the service.'
rm -f /tmp/backuppc-symlinks-cache/was-running
fi
rmdir --ignore-fail-on-non-empty /tmp/backuppc-symlinks-cache &>/dev/null
/etc/pacman.d/hooks/backuppc-restore-symlinks-pre.hook
[Trigger] Operation = Upgrade Type = Package Target = backuppc [Action] Description = Stash symlinks for BackupPC pool directories When = PreTransaction Exec = /etc/pacman.d/hooks/backuppc-restore-symlinks-pre.sh
/etc/pacman.d/hooks/backuppc-restore-symlinks-pre.sh
#!/usr/bin/bash
if systemctl is-active backuppc.service &>/dev/null; then
systemctl stop backuppc.service
mkdir -p /tmp/backuppc-symlinks-cache
touch /tmp/backuppc-symlinks-cache/was-running
fi
for dir in /var/lib/backuppc/{cpool,pc,pool,}; do
if [ -L $dir ]; then
mkdir -p /tmp/backuppc-symlinks-cache
mv $dir /tmp/backuppc-symlinks-cache
fi
done
Apache の設定
BackupPC には簡単に制御することができるウェブインターフェイスが備わっています。Apache と mod_perl を使用するか C のラッパーを使用して使うことができます。lighttpd など他のウェブサーバーでも動作します。
Apache の設定の編集
BackupPC のウェブ UI は backuppc ユーザーで動作させる必要がありますが、通常 Apache は http ユーザーで動作します。ユーザーを変更する方法は複数あります。BackupPC の UI を表示するためだけに Apache を使用する場合と、通常の http ユーザーで他のウェブサイトも公開する場合の例を以下に示します。
単一目的で Apache を設定する方が簡単ではありますが柔軟性に欠けます。
一般的な設定
/etc/backuppc/config.pl を編集して管理者の名前を設定してください:
$Conf{CgiAdminUsers} = 'admin';
そして users ファイルを追加して管理者のパスワードを設定してください:
# htpasswd -c /etc/backuppc/backuppc.users admin
BackupPC-Webfrontend は最初ローカルホストからしかアクセスできないように設定されています。ネットワーク内の全てのマシンからアクセスできるようにしたい場合、/etc/httpd/conf/extra/backuppc.conf を編集してください。以下の行を:
Require ip 127.0.0.1
以下のように変更:
Require ip 127.0.0.1 192.168.0
192.168.0 はアクセス権を与えたい適切な IP アドレスに置き換えてください。以下のセクションのどちらかの設定を行ったら、Apache のサービスを(再)起動してください。
単一目的の Apache の設定
mod_perlAUR パッケージを インストール してください。
Apache の設定ファイルを編集して mod_perl をロードし、backuppc ユーザーで Apache を実行して /etc/httpd/conf/extra/backuppc.conf を読み込みます:
/etc/httpd/conf/httpd.conf
LoadModule perl_module modules/mod_perl.so User backuppc Group backuppc Include conf/extra/backuppc.conf
多目的の Apache の設定
上記のように Apache のユーザーとグループを全体的に変更するのではなく、BackupPC の CGI スクリプトだけを backuppc ユーザーで動作させて他のファイルはデフォルトユーザーを使うようにします。外部の mod_perl を使うかわりに mod_cgi を使って C で書かれたラッパーを呼び出します。ラッパーから BackupPC のスクリプトを実行するのに perl をインストールする必要があります。
Apache が CGI プログラムを動作させることができる状態であることを確認して、/etc/httpd/conf/extra/backuppc.conf を読み込んで BackupPC の設定を使用するようにしてください:
/etc/httpd/conf/httpd.conf
LoadModule cgi_module modules/mod_cgi.so ... Include conf/extra/backuppc.conf
ウェブサーバーのユーザーと suid の問題
現在の BackupPC の設定だと、ウェブサーバーを backuppc ユーザーで動作させる必要があり、他の用途でウェブサーバーを使っている場合に問題になります。昔は Perl スクリプトに suid を設定していましたが、セキュリティの問題が原因で数年前に禁止されました。回避策として perl-suid を使う方法がありましたが、同じく最近になって禁止されました。suid ビットを使ってスクリプトを安全に動作させることは不可能です。ランチャーとして suid を使うシンプルなバイナリプログラムを使うことで適切なユーザーで backuppc の Perl スクリプトを実行できます。Perl スクリプトが別環境に分離されるため安全です。
オリジナルの backuppc の CGI を以下の C コードプログラムに置き換えて backuppc の CGI は別の場所に移動する必要があります。
実際の CGI である /usr/share/backuppc/cgi-bin/BackupPC_Admin は lib ディレクトリの /usr/share/backuppc/lib/real-BackupPC_Admin.cgi に移動してください。
以下のコードを wrapper.c というファイル名で保存してください (必要に応じて CGI のパスを修正してください):
#include <unistd.h>
#define REAL_PATH "/usr/share/backuppc/lib/real-BackupPC_Admin.cgi"
int main(ac, av)
char **av;
{
execv(REAL_PATH, av);
return 0;
}
そして以下のコマンドでコンパイルしてください:
$ gcc -o BackupPC_Admin wrapper.c
作成されたバイナリ BackupPC_Admin を cgi-bin ディレクトリに配置してバイナリ CGI の所有者を backuppc:http に変更して suid ビットを設定してください:
# chown backuppc:http /usr/share/backuppc/cgi-bin/BackupPC_Admin # chmod 4750 /usr/share/backuppc/cgi-bin/BackupPC_Admin
元の Perl スクリプトに suid ビットを設定していた場合は解除してください:
# chmod 0755 /usr/share/backuppc/lib/real-BackupPC_Admin.cgi
これでウェブサーバーを通常ユーザーで実行しつつバックアップを適切に実行できるようになりました。
nginx の設定
fcgiwrap をインストールして fcgiwrap.socket を起動・有効化してください。
以下のサーバー設定を作成:
/etc/nginx/sites-available/backuppc
server {
listen <your_server_port>;
server_name <your_server_name>;
root /usr/share/backuppc/html;
index /index.cgi;
access_log /var/log/nginx/backuppc.access.log;
error_log /var/log/nginx/backuppc.error.log;
location / {
allow 127.0.0.1/32;
# allow 192.168.0.0/24;
deny all;
# auth_basic "Backup";
# auth_basic_user_file conf/backuppc.users;
}
location /backuppc {
alias /usr/share/backuppc/html/;
}
location ~\.cgi$ {
include fastcgi_params;
fastcgi_pass unix:/run/fcgiwrap.sock;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_USER $remote_user;
fastcgi_param SCRIPT_FILENAME /usr/share/backuppc/cgi-bin/BackupPC_Admin;
}
}
上記のファイルを作成したら sites-enabled に対してシンボリックリンクを作成してください:
# ln -s /etc/nginx/sites-available/backuppc /etc/nginx/sites-enabled
systemd の fcgiwrap.service ファイルを編集して fcgiwrap の実行ユーザーを backuppc に変更してください。
lighttpd の設定
/etc/lighttpd/lighttpd.conf
server.port = 81
server.username = "backuppc"
server.groupname = "backuppc"
server.document-root = "/srv/http"
server.errorlog = "/var/log/lighttpd/error.log"
dir-listing.activate = "enable"
index-file.names = ( "index.html", "index.php", "index.cgi" )
mimetype.assign = ( ".html" => "text/html", ".txt" => "text/plain", ".jpg" => "image/jpeg", ".png" => "image/png", "" => "application/octet-stream" )
server.modules = ("mod_alias", "mod_cgi", "mod_auth", "mod_access" )
alias.url = ( "/BackupPC_Admin" => "/usr/share/backuppc/cgi-bin/BackupPC_Admin" )
alias.url += ( "/backuppc" => "/usr/share/backuppc/html" )
cgi.assign += ( ".cgi" => "/usr/bin/perl" )
cgi.assign += ( "BackupPC_Admin" => "/usr/bin/perl" )
auth.backend = "plain"
auth.backend.plain.userfile = "/etc/lighttpd/passwd"
auth.require = ( "/BackupPC_Admin" => ( "method" => "basic", "realm" => "BackupPC", "require" => "user=admin" ) )
/etc/lighttpd/passwd
admin:yourpassword
ログファイルを作成:
# touch /var/log/lighttpd/error.log # chown backuppc:backuppc /var/log/lighttpd/error.log
管理ページへアクセス
管理ページにアクセスするまえに BackupPC の設定を編集できるユーザーやグループを指定する必要があります:
/etc/backuppc/config.pl
$Conf{CgiAdminUserGroup} = '<authorized groups>';
$Conf{CgiAdminUsers} = '<authorized users>'; # <-- set to '*' if the webserver is not autenticating users
設定したら http://localhost/BackupPC_Admin あるいは http://your_backuppc_server_ip/BackupPC_Admin を開いてください。
ウェブサイトの表示がおかしい
Apache のディレクティブが原因でウェブインターフェイスが正しく表示されない場合があります。そのような場合、クライアントから .htaccess や .htpasswd を見えないようにしている /etc/httpd/conf/httpd.conf の設定を変更するか、/usr/share/backuppc/html ディレクトリの名前を /usr/share/backuppc/files に変更して新しいパスにあわせて /etc/httpd/conf/extra/backuppc.conf を以下のように更新してください:
/etc/httpd/conf/extra/backuppc.conf
Alias /BackupPC/images /usr/share/BackupPC/files/