minicpanを工夫してみた

外出時にcpanモジュール入れるのにminicpanを使っていますが、いちいちminicpanを起動して、オプション指定して、使い終わったら落とすという流れがめんどくさかったので、一連の流れをコマンドにしてみた。

(minicpan用のhttpdを常時起動しておいて、PERL_CPANM_OPTを指定しておけばいいだけですけど)

minicpanの保存先を予め決めておいて

minicpan -l ~/perl5/minicpan -r http://mirror/

こんな感じでcpanm_minicpanとして作成した。

#!/usr/bin/env perl
use strict;
use warnings;
use Plack::Builder;
use Plack::Middleware::Static;
use Plack::Runner;
use Test::TCP;

my $server = Test::TCP->new (
    code => sub {
        my $port = shift;
        my $app = builder {
            enable "Plack::Middleware::Static",
            path => qr{^/},
            root => $ENV{HOME} . '/perl5/minicpan';
        };
        my @args = ("--port=$port");
        unless ( $ENV{DEBUG} ) {
            push @args, '--access-log=/dev/null';
            open STDERR, '>', '/dev/null' or die $!;
            open STDOUT, '>', '/dev/null' or die $!;
        }
        my $runner = Plack::Runner->new;
        $runner->parse_options(@args);
        $runner->run($app);
    },
);

printf STDERR "Start minicpan server: 0.0.0.0:%s (pid: %d)\n\n", $server->port, $server->pid;
my $port = $server->port;
system 'cpanm', '--mirror-only', "--mirror=http://localhost:$port/", @ARGV;

printf STDERR "\nStopping minicpan server: 0.0.0.0:%s (pid: %d)", $server->port, $server->pid;
undef $server;

zsh functionの_cpanmの補完対象に追加しておけば、補完も効く。

cobblerのdebian用パッケージのコンパイル

https://fedorahosted.org/cobbler/wiki/DownloadInstructions
ここに書いてある通りなんだけど、認証プロキシの下だったので、pdebuildのときにパッケージが取ってこれなくて若干工夫が必要だった。

解決方法としては、apt-cacherを入れて、プロキシの認証はapt-cacherにお任せした。

apt-cacherの環境づくり

sudo aptitude install apt-cacher
sudo vim /etc/apt-cacher/apt-cacher.conf

  http_proxy=proxy_host:proxy_port
  use_proxy=1
  http_proxy_auth=id:password
  use_proxy_auth=1

sudo vim /etc/default/apt-cacher

  AUTOSTART=1

sudo /etc/init.d/apt-cacher start

0.0.0.0:3142 でapt-cacherが動きます。

pbuilderの環境づくり

sudo aptitude install pbuilder
sudo vim /etc/pbuilderrc

  MIRRORSITE=http://host_ip:3142/ftp.jp.debian.org/debian/

sudo pbuilder --create --distribution wheezy  --http-proxy http://proxy_host:proxy_port/

cobbler のコンパイル

git clone git://git.fedorahosted.org/cobbler
sudo pdebuild
dpkg -i /var/cache/pbuilder/result/cobbler_1.5.0-1_all.deb

ちなみに、koanはcobblerサーバがxmlrpcを127.0.0.1:25151でlistenしていて、外から叩けなかった。
apacheからproxyして、koan --port=80 で叩いた。

TimeMachine の続き

前回書いた記事 だけだとtimemachineからの復元ができなかったの続き

復元が動かないのは、timemachineで作成したバックアップのパーミッションが711になっていたせいの模様。

こちらを参考に修正した。
http://rewse.jp/blog/p/3569

これでタイムマシーンからの復元が動くようになった。
ただ、macには詳しくないので副作用がないかどうかは不明。。。
設定は自己責任で。

vim の動きが変

crontab編集してたらこんなエラー吐いて死んだ

crontab: "vi" exited with status 1

確かにvimを起動して:qで閉じると返り値が 1になっている。
絶対パスにしたら返り値が1にならないというバッドノウハウ。。。

#EDITOR=vim
EDITOR=/usr/bin/vim

参考にしたサイト
http://tooky.github.com/2010/04/08/there-was-a-problem-with-the-editor-vi-git-on-mac-os-x.html

TimeMachine

Macのバックアップは普通にsambaたてているだけではダメということで作業したメモ

NAS: Ubuntu 10.04
Mac: Macbook Air Darwin 11.0.1

dpkg-source -x netatalk_2.2~beta4-1.dsc
sudo apt-get install dpkg-dev fakeroot
sudo apt-get install \ 
  cdbs \ 
  autotools-dev \ 
  devscripts \ 
  debhelper \ 
  dh-buildinfo \ 
  libdb-dev \ 
  libwrap0-dev \ 
  libpam0g-dev \ 
  libcups2-dev \ 
  libkrb5-dev \ 
  libltdl3-dev \ 
  libgcrypt11-dev \ 
  libcrack2-dev \ 
  libavahi-client-dev \ 
  d-shlibs \ 
  hardening-includes 
sudo apt-get install libldap2-dev libacl1-dev
dpkg-buildpackage -us -uc -rfakeroot -d
:DEFAULT: options:upriv,usedots cnidscheme:dbd dperm:0700 fperm:0600 ea:sys
/path/to/TimeMachine "Time Machine" options:tm
ATALK_UNIX_CHARSET='UTF8'
ATALK_MAC_CHARSET='MAC_JAPANESE'

xenのゲストOSをxenserverに変換する方法

コマンド一発だった。
LVMのLVをddしてゴチャゴチャやっていたのは一体なんだったのか。

気をつける点としては、2点

・準仮想化の場合はデバイスが、sdaとかからxvdaとかになるので、fstabやgrubを変更する必要がある点。xenserverに入れてからrescueで書き換えるだけですけど。

grubのkernelオプションだけでなく、xenserver側の起動オプションも確認する点。コンソール取れなくてびっくりした。

でやり方

xva.pyを使う

ここら辺参照。READMEの言う通りにやれば上手くいった。

http://blog.xen.org/index.php/2010/04/22/xcp-migration-utility-xva-version-1-2-available/

http://www.xen.org/files/xva/README
http://www.xen.org/files/xva/xva.py

perlbrewのproxy対応

perlbrew (http://search.cpan.org/~gugod/App-perlbrew/)を教えてもらって便利そうなので使ってみたけど、proxy対応していなかったので、環境変数から呼ぶようにしてみました。
これで環境変数にhttp_proxyがあればproxy使ってくれます。
もう少し真面目に書いてCPANにパッチ送ろうかな。。。

注意点としては、HTTP::Liteのproxyメソッドが、http://host:port/ のフォーマットを前提にしているので、最後にスラッシュがないとうまく動きません。(昔yumもそんなんだったな。。。)

$ diff -ub perlbrew.orig perlbrew

--- perlbrew.orig       2010-05-31 18:36:45.630114803 +0900
+++ perlbrew    2010-05-31 18:40:10.086114474 +0900
@@ -922,6 +922,7 @@
             my $http_get = sub {
                 my ($url, $cb) = @_;
                 my $ua = HTTP::Lite->new;
+                $ua->proxy if exists $ENV{http_proxy};
 
                 my $loc = $url;
                 my $status = $ua->request($loc) or die "Fail to get $loc";