メンテナンス
|
Ubuntu server 14.04メンテナンス自宅のサーバー Ubuntu 14.04 のメンテナンスに関するメモです.内容は,IPの自動通知,データのバックアップ方法(自動と手動),OSのアップグレードについて説明します. 目次ダイナミックIPのDDNSの問題自宅のサーバーで「固定IP」を使える人はほとんどいないでしょう.通常は,IPアドレスが変わる「ダイナミックIP」です.このように動的に変化するIPアドレスに対しては、一意のホスト・ドメイン(私の場合,www.yamamo10.jp)をあたえるダイナミックDNS(DDNS)が使われます.この仕組みでは,ホスト側のIPアドレスが変更されるとDDNS側は,ホスト側のIPを調べる手段が無くなります.そのため,IPアドレスが変わったときには,ホスト側はDDNS側にIPアドレスを通知する必要があります.もちろん,手動で通知は可能ですが,面倒です.ここでは,自動的にIPアドレスを通知する方法を示します. ここで示す方法は,VALUE-DOMAIN.COM で確認しています.これは,私が契約しているDDNSサービスを提供する業者です. ダイナミックDNS IP設定スクリプト(IP_update)IPアドレスを通知するスクリプト(IP_update.pl)について説明します.これは,あにょの自宅サーバ構築メモ(Fedora)の「IPアドレス自動更新スクリプト」に書かれていたものを適当に修正したものです. スクリプトは,下に示すとおりです.その動作は単純です.以前に設定したIPアドレスと現在のIPアドレスを比較し,それらが異なっていれば,httpでサーバーにアクセスするだけです.サーバーは呼び出し側のIPアドレスが分かるので,それを元に再設定を行います.短いので,すぐに動作は理解できると思います.スクリプトで分かりにくいところは,以下の通りです.
001 #!/usr/bin/perl 002 # 003 $OLD_IPF = 'OLD_IP.dat'; 004 $NEW_IPF = 'NEW_IP.dat'; 005 $WGET_RESULT = 'wget.log'; 006 $LOG = '/var/log/ddns.log'; 007 008 open INPUT,"$OLD_IPF"; 009 $OLD_IP=<INPUT>; 010 chomp($OLD_IP); 011 $OLD_IP =~ s/^\s*(.*?)\s*$/$1/; 012 close INPUT; 013 014 system("wget -q -O $NEW_IPF http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip"); 015 open(INPUT,$NEW_IPF); 016 $NEW_IP = <INPUT>; 017 chomp($NEW_IP); 018 $NEW_IP =~ s/^\s*(.*?)\s*$/$1/; 019 close(INPUT); 020 021 if($NEW_IP ne "" && $OLD_IP ne $NEW_IP){ 022 system("wget -q -O $WGET_RESULT 'http://dyn.value-domain.com/cgi-bin/dyn.fcg?d=ドメイン&p=パスワード&h=*'"); 023 024 open WLOG,"$WGET_RESULT"; 025 $wgr=<WLOG>; 026 chomp($wgr); 027 $wgr =~ s/^\s*(.*?)\s*$/$1/; 028 close WLOG; 029 030 if($wgr eq "status=0"){ 031 open(OUTPUT, ">$OLD_IPF"); 032 print OUTPUT $NEW_IP; 033 close OUTPUT; 034 } 035 036 $now = localtime; 037 open (OUTPUT ,">>$LOG"); 038 print OUTPUT "$now DDNS IP Address Updated. $OLD_IP to $NEW_IP $wgr\n"; 039 close OUTPUT; 040 } 設定ダイナミックIPの場合,IPアドレスが変わるタイミングが分かりません.ただし,IPアドレスの変更は,それほど頻繁ではありません.とはいえ,人がIPアドレスを監視するわけにも生きませんので,先ほどのスクリプトを定期的に実行させる必要があります.定期的なコマンド実行には,cronが便利です.ファイル「/var/spool/cron/crontabs/root」に以下を追加することにより,2時間毎に「IP_update.pl」が実行されます. 0 */1 * * * /usr/local/ddns/IP_update.pl IPアドレスの確認サーバーのダイナミックIPのアドレスの確認は,いろいろの方法でできます.たとえば,以下のようにします.
逆にホスト・ドメイン名からIPアドレスを調べる方法もいろいろあります.たとえば,以下のようにします.
自動的にファイルのバックアップ自宅のサーバーだとファイルの破損が怖いので自動でバックアップをとるようにします.バックアップの方法は,初代のサーバーと同じ方法を使います. バックアップ用スクリプトサーバーの運用では,データを失わないようにすることが最も重要です.そのために,データのバックアップが効果的です.これは,手動ではとても面倒なので,自動的にコンピューターにやらせることにします.そのために,次のような Perl のスクリプトを作成しました.これを coron を使い定期的に実行させると,「/home」と「データベース」が自動的にバックアップできます.バックアップ先は,「/mnt/LinkStation/web_backup」です.これはファイルサーバー(NAS)で,webサーバーとは別の場所にあります. 001 #!/usr/bin/perl 002 #============================================================================ 003 # サーバーのデータバックアップ 004 # 元ネタは、次のWEBページ. 005 # http://lucenhangul.com/wiki/lucenwiki?itemid=68 006 # ここに書かれていたシェルスクリプトを Perl に直した. 007 # Masashi Yamamoto 008 # ymm10m34@khaki.plala.or.jp 009 #============================================================================ 010 $today = `date +%Y%m%d`; # 本日の日付 011 $oldday = `date --d "1 months ago" +%Y%m%d`; # これよりも古いものは削除 012 $mysql = "/usr/bin/mysql"; 013 $db_dump = "/usr/bin/mysqldump"; 014 $db_user = "yamamoto"; # データベースのユーザー名 015 $db_passwd = "XXXXXXXXXXXXXX"; # データベースのパスワード 016 $home_dir = "/home"; # バックアップ対象ディレクトリー 017 $backup_dir = "/mnt/LinkStation/web_backup"; # バックアップの場所 018 $backup_HOME = "HOME"; 019 $backup_DB = "DB"; 020 $log_file = "log.txt"; 021 022 chomp $today; 023 chomp $oldday; 024 025 &open_log; 026 &mk_dir; 027 &home_backup; 028 &db_backup; 029 &rm_old_backup; 030 &close_log; 031 032 #============================================================================ 033 # ログファイルのオープン 034 #============================================================================ 035 sub open_log{ 036 my $time; 037 $time=localtime; 038 open(LOG, ">>$log_file"); 039 printf LOG "$time\n"; 040 printf LOG "$today\n"; 041 } 042 043 #============================================================================ 044 # ログファイルのクローズ 045 #============================================================================ 046 sub close_log{ 047 my $time; 048 $time=localtime; 049 printf LOG "$time\n\n"; 050 close LOG; 051 } 052 053 #============================================================================ 054 # バックアップ用のディレクトリーの作成 055 #============================================================================ 056 sub mk_dir{ 057 if(! -e "$backup_dir/$today"){ 058 059 `mkdir -p $backup_dir/$today/$backup_DB`; 060 if(-d "$backup_dir/$today/$backup_DB"){ 061 printf LOG "make DB \t$backup_dir/$today/$backup_DB \n"; 062 } 063 064 `mkdir -p $backup_dir/$today/$backup_HOME`; 065 if(-d "$backup_dir/$today/$backup_HOME"){ 066 printf LOG "make HOME\t$backup_dir/$today/$backup_HOME\n"; 067 } 068 } 069 } 070 071 #============================================================================ 072 # ホームディレクトリーのバックアップ 073 #============================================================================ 074 sub home_backup{ 075 my $user, @user_list; 076 my $ret; 077 078 opendir(DIR, $home_dir); 079 080 while (defined($user=readdir(DIR))){ # ディレクトリー名の取得 081 if((-d $home_dir.'/'.$user) && 082 ($user ne ".") && ($user ne "..")){ 083 push(@user_list, $user); 084 } 085 } 086 087 foreach(@user_list){ # tarを使ってバックアップ 088 $ret=system("tar cPfz $backup_dir/$today/$backup_HOME/$_.tar.gz \\ 089 $home_dir/$_"); 090 printf LOG "backup home dir\t$_\t\t$ret\n"; 091 } 092 093 closedir(DIR); 094 } 095 096 #============================================================================ 097 # データベースのバックアップ 098 #============================================================================ 099 sub db_backup(){ 100 my $database, @list; 101 my $ret; 102 103 $database = 104 `$mysql -u $db_user --password=$db_passwd -e "show databases" | 105 grep -v Database`; 106 107 print $database; 108 109 @list = split(/\n/,$database); 110 111 foreach(@list){ 112 if($_ eq "information_schema" || $_ eq "performance_schema" || $_ eq "mysql"){next;} 113 $ret = system("$db_dump -u $db_user --password=$db_passwd $_ > \\ 114 $backup_dir/$today/$backup_DB/$_.DB.sql"); 115 printf LOG "backup data base\t$_\t\t$ret\n"; 116 } 117 } 118 119 #============================================================================ 120 # 期限の過ぎたバックアップの削除 121 #============================================================================ 122 sub rm_old_backup(){ 123 my $dir, @dir_list; 124 my $ret; 125 126 opendir(DIR, $backup_dir); 127 128 while (defined($dir=readdir(DIR))){ # ディレクトリー名の取得 129 if((-d $backup_dir.'/'.$dir) && 130 ($dir ne ".") && ($dir ne "..")){ 131 push(@dir_list, $dir); 132 } 133 } 134 135 close DIR; 136 137 @sort_dir_list = sort{$a<=>$b}@dir_list; 138 139 for($i=0; $i<@sort_dir_list; $i++){ 140 if(($i < @sort_dir_list-1) && ($sort_dir_list[$i]<$oldday)){ 141 $ret = system("rm -rf $backup_dir/$sort_dir_list[$i]"); 142 printf LOG "delete old backup\t$sort_dir_list[$i]\t$ret\n"; 143 } 144 } 145 } 146 147 定期的に実行いざというときに大事なデータを復旧させるためには,まめにバックアップ作業を行っておく必要があります.サーバーのハードディスクが壊れたとき,バックアップは二年前のものしかないとなると泣けてきます.定期的にコマンドを実行させるには,cron を使うのが良いでしょう.私の場合は,1週間に1回バックアップをとれば十分なので,cronの設定ファイル「/var/spool/cron/crontabs/root」に以下を追記しました. 02 04 * * 2 mount -a 03 04 * * 2 /root/BackUp/backup.pl これで,毎週火曜日の AM 04:03 に定期的にバックアップスクリプトが実行されます.その前の AM 04:02 にファイルをマウントするコマンド「mout -a」が実行されます.理由は分かりませんが,外部のディスクがマウントポイントから外れることがあるからです. 確認動作の確認は,以下のように行います.
手動でバックアップスクリプトの起動自動バックアップのスクリプト (backup.pl) を,手動で実行させます.これが最も簡単なバックアップ方法です. $ sudo /root/BackUp/backup.pl 完全手動samba で WEB サーバーのホームディレクトリーを共有しているので,バックアップ (コピー) は簡単です.データベースのバックアップは,「データの引っ越し」のとおりです. DropboxDropbox はクラウドにファイルが保存されるとともに,複数の PC でファイル共有ができるので便利です.ここでは,Ubuntu Server で Dropbox を使う方法を示す. インストールまずは,Linux 64 ビット版の Dropbox の インストールファイルを,ダウンロードします. $ cd ~$ wget -O dropbox.tar.gz "https://www.dropbox.com/download?plat=lnx.x86_64" すると「dropbox.tar.gz」がダウンロードされます.これを以下のコマンドで,解凍します. $ tar xzf dropbox.tar.gz このコマンドにより,ディレクトリ「~/.dropbox-dist」に Dropbox クライアント(Ubuntu server) がインストールされます.Ubuntu server では GUI は使えないので,コマンドラインで操作できるようにします.Python プログラムをダウンロードし,実行可能にします. $ sudo wget -O /usr/local/sbin/dropbox 'https://www.dropbox.com/download?dl=packages/dropbox.py'$ sudo chmod u+x /usr/local/sbin/dropbox これは,不要かも.初回のインストールと実行します. $ sudo dropbox start -i 次に,一般ユーザーでも dropbox コマンドが使えるようにします. $ sudo chown ユーザー名 /usr/local/sbin/dropbox この dropbox コマンドは「dropbox コマンド オプション」で構成され,様々な設定が可能です.コマンドは「dropbox help」で調べることができます.あるいは「dropbox help コマンド」でオプションまで調べることが可能です.容易されているコマンドは以下の通りです.詳細は「Linux で Dropbox を利用する」を参照してください.
設定同期するディレクトリーDropbox で同期するディレクトリーを作成します. $ mkdir ~/Dropbox 次に,Dropbox を起動します. $ dropbox start 同期するファイルの設定を行います.そのためのコマンドは,以下のとおりです.
自動起動アップグレード (14.04 LTS)Ubuntu server 12.04 LTS から,14.04 LTS にアップグレードします. まずは,コマンド 「lsb_release -a」 を使い現在のバージョンを確認します. lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 12.04.5 LTS Release: 12.04 Codename: precise コマンド 「sudo do-release-upgrade -d」 を使う. $ sudo do-release-upgrade ページ作成情報参考資料
更新履歴
|