UT-VPNを自動起動するように設定する

新しいUT-VPNがリリースされました。Linux版はビルドした後、インストーラーがvpnserverをサービスに登録してくれたりするようになっているかなぁと期待していましたが、旧バージョンのインストーラーと同じで、そこまでは面倒を見てくれないようです。従って、サーバーをリブートした後も、自動でvpnserverがサービスとして自動起動するように設定します。(というか、旧バージョンの時からサービス起動するようにしていました。)方法は次のとおりです。

ます、utvpnserverの場所をwhichコマンドで確認します。

# which utvpnserver
/usr/bin/utvpnserver

パスが分かりましたので、次の内容を記述したファイルを/etc/init.d/に「utvpnserver」など適当な名前で作成します。

#!/bin/sh
# chkconfig: 2345 99 01
# description: UT-VPN Server 4.0
DAEMON=/usr/bin/utvpnserver
LOCK=/var/lock/utvpnserver

test -x $DAEMON || exit 0

case "$1" in
start)
$DAEMON start
touch $LOCK
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

作成したファイルのパーミッションを変更し、スクリプトからvpnserverを起動し動作確認します。

# chmod 755 /etc/init.d/utvpnserver
# /etc/init.d/utvpnserver start

きちんと起動が確認できたら、chkconfigで自動起動登録しておきます。

# chkconfig --add utvpnclient

同様にvpnclientの自動起動ファイルも作成します。上記のコードおよびコマンドライン引数のvpnserverをvpnclientに変更するだけです。

が、これだけではサーバーに対してリモートデスクトップ接続をしようとしてもうまくいきません。仮想LANカードにIPアドレスが割り当てられていないためです。
これもサーバーの起動時に、意中のIPアドレスを割り振ることとします。

ifconfigコマンドで仮想NICに固定IPを割り当てます。

# ifconfig utvpn_vpn 192.168.100.60 netmask 255.255.255.0

この場合だと、192.168.100.60を割り当てています。IPは構築した環境に合わせて意中のものを指定します。

これを自動化するスクリプトにして、先ほどの自動起動スクリプトに組み込むことにします。

#!/bin/sh 
/sbin/ifconfig utvpn_vpn 192.168.100.60 netmask 255.255.255.0

上記のコードを記述したファイルを/sbinあたりにset_ipaddr.shとして作成し、実行権限を与えておきます。

そして、先ほどの自動起動スクリプトにこのset_ipaddr.shを呼び出すように記述を加えます。

#!/bin/sh
#!/bin/sh
# chkconfig: 2345 99 01
# description: UT-VPN Server 4.0
DAEMON=/usr/bin/utvpnserver
LOCK=/var/lock/utvpnserver
 
test -x $DAEMON || exit 0
case "$1" in
    start)
        $DAEMON start
        touch $LOCK
        sleep 4
        /sbin/set_ipaddr.sh
        ;;
    stop)
        $DAEMON stop
        rm $LOCK
        ;;
    restart)
        $0 stop
        sleep 3
        $0 start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac
exit 0

これで、仮想NICに意中のIPが自動で付与されるようになりました。念のために、サーバを再起動して、ifconfigで指定したIPが割り振られているか確認してみて、問題なければOKです。

zenphotoで西野カナギャラリー作ってみた

カナグラフィー

カナグラフィー

思い立ってzenphotoに好きな画像を集めてみることにした。
zenphotoにしたのは、FTPで画像を含んだフォルダをアップロードすると、そのままアルバムを作ってくれるらしいから・・・。
じゃ、サーバーサイドでスクリプト走らせて任意の画像を、zenphotoのalbums配下の任意のディレクトリにダウンロードしたら自動でアルバムできるよね、って訳で採用です。

zenphotoのインストールは問題なく完了しました。何度かセットアップ中に警告が出ましたが、その警告のほとんどはディレクトリを作れとかパーミッションを適宜に設定せよといった内容なので、5分ほどでインストールは完了しました。
むしろ、サーバーにzehphotoのファイルをアップロードする方が時間かかっています。レンタルサーバーなんかで、zenphotoが自動インストールできるようになっていれば、楽だったかも。

画像の取得スクリプトは「いかにしておっぱい画像をダウンロードするか〜2012」が大いに参考になりました。
萌える対象は違いますが画像取得という目的は同じでしたから、参考にさせていただきました。
そのままでは動かなかったので、BingのAPI周りを少し変えました。

#!/usr/bin/perl

use strict;
use warnings;
use Encode qw{encode_utf8 decode_utf8};
use utf8;
use LWP::UserAgent;
use HTTP::Request;
use Digest::MD5 qw/md5_hex/;
use Path::Class qw/dir file/;
use URI;
use JSON qw{decode_json};
use LWP::Protocol::https;

my $word=”西野カナ”;
my $query       = @ARGV ? encode_utf8(shift) : $word;
my $account_key = 'ACCNT_KEY'; #自分のアカウントキーをセット
my $url         = URI->new('https://api.datamarket.azure.com/Bing/Search/Image');
my $ua          = LWP::UserAgent->new;
my $dir= dir('/hoge/zenphoto/albums/kana_graphy'); #zenphotoのalubumsディレクトリを指定する。

my $page_count     = 0;
my $download_count = 0;
my $interval       = 50;

$dir->mkpath if ! -d $dir;

STDOUT->autoflush;

while (1) {
    my $skip = $page_count * $interval;
    $url->query_form(
        'Query'   => qq{'$query'},
        '$top'    => $interval,
        '$skip'   => $skip,
        '$format' => 'json',
    );

    my $req = HTTP::Request->new(GET => $url);
    $req->authorization_basic('', $account_key);

    my $res = $ua->request($req);
    die $res->status_line if !$res->is_success;

    my $json = decode_json $res->content;
    last if !defined $json->{d}{results};

    for my $entry (@{ $json->{d}{results} }) {
        my $media_url = $entry->{MediaUrl};
        next unless $media_url =~ /\.jpg$/;
        $download_count++;
        my $filename = md5_hex(encode_utf8($media_url)) . '.jpg';
        my $filepath = $dir->file($filename);
        next if -f $filepath;
        print encode_utf8("$download_count : download... $media_url\n");
        $res = $ua->get(
            $media_url,
            ':content_file' => $filepath->stringify
        );
        unless ( $res->content_type =~ m/^image/ ) {
            unlink $filepath;
        }
    }
    $page_count++;
}

若干のノイズもあるけど、カナやん画像がどっさりと取得でき、ギャラリーに自動追加できるようになりました。