February 09, 2010

iwamatsu

ghc6のビルドがこけていた

ghc6のビルドがこけていた

ショックすぐる。ghc6 いらなくね?

ツッコミを入れる

06:43pm iwamatsu by Nobuhiro Iwamatsu

Upload slim, winwrangler and pvm

Upload slim, winwrangler and pvm

pvm はNMU。

ツッコミを入れる

06:42pm iwamatsu by Nobuhiro Iwamatsu

cross コンパイラ用のapt-lineを作った

cross コンパイラ用のapt-lineを作った

sh4 クロスコンパイラ用のapt-lineを作った。適当ですが。
deb http://debian-sh4.nigauri.org/cross-compiler/bin ./

ツッコミを入れる

06:42pm iwamatsu by Nobuhiro Iwamatsu

dancerj

久しぶりにnetfortのメールを読んだ。

久しぶりにnetfortのメールを読んだ。 11月以来のようだ。 数万通のメールの中から機械処理をしたあと、6000通の残ったSPAMから数十通の本当に必要なメールを探し出す作業。 非常に効率がよろしくない。なんかもっと機械化しないと。 気づいたら Linux SymposiumのCFPが出てた

04:07pm dancerj by Junichi Uekawa

February 08, 2010

mkouhei

[Debian][Unix/Linux][仮想化]lxc 0.6.4でlxc-debian createしてもコンテナを起動できない罠。

Debian 勉強会用のネタ用にLennyの環境がほしくてlxcのコンテナで新しく用意することにしたのだが、lxcを使い始めた0.6.3ではハマらず、現在の0.6.4でハマる罠に遭遇。

lxcでコンテナを作るときは、lxcパッケージに含まれているlxc-debianスクリプト(/usr/share/doc/lxc/examples/lxc-debian.gz)を使用するのだが、コンテナとしてマウントするためのdebootstrapで作るrootfsは、どこにあっても良いのでホームディレクトリ直下で、

$ sudo bash lxc-debian create
What is the name for the container ? [debian] test
What hostname do you wish for this container ? [test]
What IP address do you wish for this container ? [172.20.0.21]
What is the gateway IP address ? [172.20.0.1]
What is the MTU size ? [1500]
Specify the location of the rootfs [./rootfs.test]

として実行し、質問形式で表示される設定項目を、コンテナ名、IPアドレス以外はデフォルトのままにしておくと、ホームディレクトリの直下に~/rootfs.test/として作られる。

lxcを使い始めた時、ホームディレクトリにせず、別のディレクトリにしていた。

$ sudo mkdir /var/cache/lxc/debian
$ cd /var/cache/lxc/debian
$ sudo bash ~/lxc-debian create

とすると、/var/cache/lxc/debianの下にrootfsが作られたのだが、ホームディレクトリでlxc-startコマンドを実行しても0.6.3の時は何の問題も無くコンテナをブートできたわけだ。

が、0.6.4になってから、この方法で行うと、rootfsが作成される場所は、/opt/lxcディレクトリ以下であるのは変わらないのだが、ホームディレクトリでlxc-startコマンドを実行すると、

$ sudo lxc-start -n test
lxc-start: No such file or directory - failed to mount './rootfs.test'->'/tmp/lxc-r7X8fyc'
lxc-start: failed to set rootfs for 'test'
lxc-start: failed to setup the container

となり、ホームディレクトリ(カレントディレクトリ)にrootfs.testが無いので起動できない。

これは0.6.4から、各コンテナの設定方法の仕様が変わったためで、testコンテナの設定ファイルは、/var/lib/lxc/test/configにある。

$ cat /var/lib/lxc/test/config
lxc.utsname = test
lxc.tty = 4
lxc.pts = 1024
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.name = eth0
lxc.network.mtu = 1500
lxc.rootfs = ./rootfs.test
lxc.cgroup.devices.deny = a
# /dev/null and zero
lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm
# consoles
lxc.cgroup.devices.allow = c 5:1 rwm
lxc.cgroup.devices.allow = c 5:0 rwm
lxc.cgroup.devices.allow = c 4:0 rwm
lxc.cgroup.devices.allow = c 4:1 rwm
# /dev/{,u}random
lxc.cgroup.devices.allow = c 1:9 rwm
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 136:* rwm
lxc.cgroup.devices.allow = c 5:2 rwm
# rtc
lxc.cgroup.devices.allow = c 254:0 rwm

lxc.rootfsの値が、"./rootfs.test"になっている。ただ、0.6.4にアップグレードした際も、元々のやつが起動できなかったことと、0.6.3の時もlxc-debian create時のrootfsのデフォルト値は相対パスだったのことを考えると、値は変わっていない気がする*1。0.6.3の時はなぜ問題なかったのか?/var/lib/lxc/test/rootfs/rootfsが、/var/cache/lxc/debian/rootfs.testへのsymlinkになっていたからじゃないかなと。

回避方法は単純で、/var/lib/lxc/test/configのlxc.rootfsの値を相対パスから絶対パスに変えてやればよい。

結論としては、"lxc-debian create"するときは、相対パスのままにしないで、絶対パスでrootfsを指定しましょう、ということ。そんだけ。

*1:0.6.3の環境が無いのとデグレートしてまで確認しようとは思わないので。

02:45am mkouhei by mkouhei

February 07, 2010

Debian JP Blog

第61回 東京エリア Debian 勉強会「でびあん温泉@木更津」のお知らせ

東京近辺にいらっしゃる皆様こんにちは。今年も Debian 勉強会が開かれます!

Debian 勉強会とは、Debian の開発者になれることをひそかに夢見るユーザたちと、 ある時にはそれを優しく手助けをし、またある時には厳しく叱咤激励する Debian 開発者らが Face to Face で Debian GNU/Linux のさまざまなトピック (新しいパッケージ、Debian 特有の機能の仕組について、Debian 界隈で起こった出来事、etc) について語り合うイベントです。

参加される方は主に東京を中心に関東近郊の国籍・性別不問の Debian ユーザです (Debian をまだ使ったことが無いが興味があるので…とか、かなり遠い所から来てくださる方もいます)。 開発の最前線にいるDebian の公式開発者や開発者予備軍の方も居ますので、 普段は聞けないような様々な情報を得るチャンスです。 興味と時間があった方、是非御参加下さい。 (また、勉強会で話をしてみたいという方も随時募集しています)。

今回は木更津工業高等専門学校 情報工学科の方々のご協力を得まして木更津での開催になります。 都内だと遠くて参加できないという木更津近郊の方々、是非ともご参加ください。
また今回は「でびあん温泉」と称して温泉合宿を同時に行います。 木更津以外からの参加者有志で集まって宿泊場所を確保し、よもやま話や温泉を楽しむ予定です。
温泉合宿と勉強会の参加申し込みは別になります。勉強会のみ参加というのも可能です。 また、温泉合宿申し込み締切りは勉強会申し込みの締切りより早め (2/10 まで)となります。ご注意ください

開催日時・会場
  • 2010年2月20日(土)13:00~17:00
    会場:木更津工業高等専門学校 第3研究棟1階専攻科講義室A
  • 2010年2月21日(日) 9:00-12:00(予定)
    会場:木更津市清見台公民館2階第1研修室
  • 費用:500円(予定、宿泊には別途実費がかかります
  • その他:飲食可能。各自ゴミは必ず持ち帰ること
  • 内容
    現在調整中です。何か希望があればご連絡ください。
    参加方法と注意事項
    • 勉強会に参加する方は、2/18 日 24 時までに下記の Debian 勉強会受付システムにて事前登録を行ってください。20、21日で登録が別々になりますのでご注意ください。
      2/20(土)
      2/21(日)
    • 温泉合宿に参加される方は 2/10 までに登録を済ませ、登録の際にコメント欄にその旨ご連絡ください
    • ノートPC、インターネット接続環境などは各自持参ください。
    • GPGキーサインしたい人:フィンガープリントを印刷したもの(名刺などが望ましい)と、公的な証明書(パスポート、運転免許証)をご用意ください。

    この件に関するお問い合わせは Debian 勉強会主催者:前田耕平 (mkouhei@{debian.or.jp} ) までお願いいたします。

    12:02am Debian JP Blog

    February 06, 2010

    Henrich

    そういえば来月は熱血高校吹奏楽部の演奏会です

    そういえば来月は熱血高校吹奏楽部の演奏会です

    予習をして臨みましょう。3/7@新宿です。

    10:13am Henrich by Henrich

    dancerj

    bash プロンプトの設定。

    bash プロンプトの設定。 以前設定した気がしていたのだが設定わすれていたので。 現在こんな感じ。PS1="$debian_chroot[\t]\$(__git_ps1 '[%s]')\h:\W> " $debian_chroot は Debian の bash 初期化スクリプトで /etc/debian_chroot をみて勝手に設定される変数で、chrootの特徴を記録してくれる。 いろいろなchrootを縦横無尽に使いまくる人には必須アイテム。 あと、__git_ps1 は git と一緒に配布されているスクリプトで設定されているもので、 git のツリー内にいる場合は現在のブランチを表示してくれる。 あとは、現在のディレクトリを表示。 時間は結構重要で、コマンドの実行時刻や実行に必要な時間とかは常に計測しておかないと不安なあなたにおすすめ。

    09:13am dancerj by Junichi Uekawa

    Henrich

    tomoyo なパッケージ

    tomoyo なパッケージ

    squeezeのカーネルが2.6.32になってたので、linux-tomoyo-patch は折り合いをみて削除してもらいます。で、どうするかというと今 experimental にいる linux-tomoyo-patch1.7 を入れます。

    tomoyo-ccstools は悩ましいというかアップデートしちゃうと困ってしまうのでやっぱりこれも同じように折を見て削除ですね。で、代わりに tomoyo-ccstools1.7 が入るように。2月真ん中目処ですね。

    tomoyo-tools (2系)はどうしましょうねぇ…誰か気合のある人がいたらお任せしたいところ。パッケージ雛形自体はできています。

    08:16am Henrich by Henrich

    昨日/今日の作業

    昨日/今日の作業

    • win32-loaderの追随
    • webの更新準備
    • non-free な ttf パッケージのアップデート準備
    • uscanいじりというかコピペワーク

    08:04am Henrich by Henrich

    Debian JP Blog

    第32回 関西 Debian 勉強会のお知らせ

    第32回 関西 Debian 勉強会」 のお知らせです。関西 Debian 勉強会は、関西方面の Debian ユーザ/ユーザ予備群/開発者らで Debian GNU/Linux のさまざまなトピックについて Face to Face で楽しく話し合っていく集まりです。

    開催日時・会場・持ち物等
    • 日時:2010 年 2 月 28 日 (日) 13:30 - 17:00 (13:15 より受付)
    • 会場:大阪 福島区民センター 303会議室 (定員:22名)
    • 費用:500円 (部屋代、印刷代などの諸費用のため)
    • 事前課題: Debianを使ったサーバーを管理している人は「運用しているサーバのセキュリティについてどうしているか、どこに気をつけているか」を教えてください。そうでない人は、「今回から新しく使うDebian勉強会予約管理システムを利用してみての感想」を教えてください。
    内容
    1. Intro
      この勉強会の簡単な説明をします。
    2. 「あなたに 5 分あげます」 (担当:参加者全員)
      5 分間で事前課題について自己紹介をしてください。 普通にしゃべるもよし、ネタをしゃべるもよし。
    3. 「Debian GNU/Linuxを実際にビジネスで使ったレンタルサーバー」 (担当:前田 学(オビタスター))
      Debian GNU/Linux使ってビジネスで、レンタルサーバーを行なっているオビタスター。 実際どのような形で利用し、何が課題で、どのようなことを今後望んでいるのか、実際に利用しているオビタスターから発表します。
    4. 「PythyonもGoogle App Engineも知らない人が『Debian勉強会予約管理システム』のソースを見てみたよ」 (担当:のがたじゅん)
      関西Debian勉強会でもDebian勉強会予約管理システムを今月から使い始めますが、そのソースは公開されています。ということで、PythyonもGoogle App Engineもまったく知らない人が、ほげってみた事を発表します。
    参加方法と注意事項
    2 月 26 日 (金) 24:00 までに Debian勉強会予約管理システムを参照して、 事前登録をしてください。登録にはGoogleアカウントが必要になりますが、事情によりGoogleアカウントを使えない/登録できない方は担当者まで連絡してください (締切りに間に合わなかった方は、下記連絡先から担当者と連絡を取ってください。 懇親会 (予定) に参加する場合は、二次会参加の欄にチェックしてください)。

    この件に関するお問い合わせは 関西 Debian 勉強会 担当:野方 純 (nogajun@{debian.or.jp} ) までお願いいたします。

    07:47am Debian JP Blog

    February 04, 2010

    iwamatsu

    恵方巻

    恵方巻

    嫁が玄関にある鬼のお面をかぶってリビングに入ってこい!というのでお面をかぶってリビングに入ったのはいいが、子供にキャッキャッと笑われる罠。思っていた反応と違ったのでガッカリですよ。

    ツッコミを入れる

    11:45pm iwamatsu by Nobuhiro Iwamatsu

    あるイーサネットデバイスのリンクアップを知るには

    あるイーサネットデバイスのリンクアップを知るには

    たまにはLinuxカーネルネタを書いてみるテスト。
    Linux であるイーサネットデバイスのリンクアップを知るにはsysfsを見ればよいです。
    $ cat /sys/class/net/eth0/carrier
    1
    
    では、カーネル空間からチェックするにはどうしたらいいのか。 __dev_get_by_index で指定したネットワークデバイス番号のstruct net_deviceを取得し、netif_carrier_ok を使って、状態をチェックします。
    キモはグローバル変数のinit_netを使うことですかね。あと、デバイス番号は見つかったネットワークデバイス番号なので、大抵の環境では lo が取れます。eth0 は2を指定します。ちゃんとしたい場合には name変数でデバイス名をチェックしましょう。
    struct net_device *dev;
    dev = __dev_get_by_index(&init_net, 1);
    if (dev)
      printk("%s: %d\n", dev->name, netif_carrier_ok(dev));
    

    ツッコミを入れる

    11:43pm iwamatsu by Nobuhiro Iwamatsu

    ghc6 が動いた

    ghc6 が動いた

    ghc6 が動きました。stage2 & helloworld だけですが。

    今、stage2 を使って ghc6 パッケージをビルド中。

    ツッコミを入れる

    11:42pm iwamatsu by Nobuhiro Iwamatsu

    binutils クロスコンパイル on amd64

    binutils クロスコンパイル on amd64

    先月の中頃までDebian/amd64でbinutilsのクロスコンパイルができなったのですが、zumbi がパッチを教えてくれたので、コンパイルできるようになりました。sh4 のクロスコンパイラはいつもの場所に置いておきます。

    ツッコミを入れる

    11:41pm iwamatsu by Nobuhiro Iwamatsu

    mkouhei

    [Unix/Linux][Debian]気がついたらだんだん増殖。

    組合サーバのバックアップは、tarでデータだけを固めて、sshでDVD-RWドライブのついているリモートホストに転送しているのだが、なんか気がついたらスクリプトが増殖していた。前回バックアップを取得してから結構時間が経っているので、どうやるんだっけかなぁと確認してみたら、どうやら以前、一発実行スクリプトを用意していた。そんなことすら忘れていたのか。スクリプトを見ると組合鯖の運用の歴史を紐解ける(気がする)ので、洗い出してみた。

    もともとのバックアップ用のスクリプトはこれ*1

    #!/bin/bash
    KEY=/home/user/.ssh/backup.key
    TARGETDIR=$1
    test -z $1 && echo -n "Target Dir (Full Path) : " && read TARGETDIR
    BACKUP=$2
    test -z $2 && echo -n "Backup File Name       : " && read BACKUP
    BACKUPFILE=${BACKUP}_$(date +%Y%m%d).tgz
    USER="user"
    BACKUPHOST="xxx.xxx.xxx.xxx"
    BACKUPDIR="~${USER}/backup/$(date +%Y%m%d)"
    tar zcf - $TARGETDIR | ssh -i $KEY ${USER}@${BACKUPHOST} "dd of=${BACKUPDIR}/${BACKUPFILE}"
    sleep 5
    

    わざわざsshで転送しているのだが、そもそもこのホストと転送先のホストの間は、外部ネットワークからアクセスできないセグメントにしてあるんだからncで良かったんじゃねぇのと今更思うが、これ書いた当時はncなんてダメだ、sshでやらなあかん、という無意味にセキュリティ重視していたのだなと。

    このホスト、MySQLも動かしているのでデータ量は大したことがないので、バックアップは上記スクリプトで/var以下を手動で指定して取得していたのだが、そのうちmysqldumpを取得するようにした。*2

    #!/bin/bash
    
    host=`awk '/^host/ {print $3}' /etc/mysql/debian.cnf`
    user=`awk '/^user/ {print $3}' /etc/mysql/debian.cnf`
    password=`awk '/^password/ {print $3}' /etc/mysql/debian.cnf`
    date=$(date +%Y%m%d)
    dbs=$(mysqlshow  -h $host -u $user --password=$password | awk -F'| ' '{print $2}' | egrep -v '^$')
    tmpdir=/tmp/mysql
    test -d $tmpdir || mkdir $tmpdir
    for db in ${dbs[@]}
    do
            mysqldump -h $host -u $user --password=$password $db > ${tmpdir}/${db}_dumpfile_${date}.sql
    done
    exit 0
    

    DebianのMySQLのパッケージは、/etc/mysql/debian.cnfに管理用のユーザ名、パスワードが設定してあるので、直接スクリプトに書くよりはマシだろうとそこから読み取り変数にしている。「bashの配列なんか使うのをはじめて見た」と先月のrelaxonでも言われたのだが、まぁ、ここでも使っているんですな。


    ある時点まで、これらのスクリプトを手動で実行していたのだが、だんだん面倒になって、スクリプト一発で取得できるように、と書いたのがこれ。*3

    #!/bin/bash
    
    KEY=/home/user/.ssh/backup.key
    DATE=$(date +%Y%m%d)
    ssh -i $KEY user@remotehost /usr/local/bin/checkdir.sh $DATE
    /usr/local/sbin/mysqldump.sh
    /usr/local/sbin/prebackup.sh stop
    /usr/local/sbin/backup.sh /etc       myhost_etc
    /usr/local/sbin/backup.sh /home      myhost_home
    /usr/local/sbin/backup.sh /var       myhost_var
    /usr/local/sbin/backup.sh /tmp/mysql myhost_mysqldump
    /usr/local/sbin/prebackup.sh start
    echo "Backup executed at $(LANG=C date)" | mail -s "backup $DATE done." root
    

    etc, home, var, mysqldumpをtarで固めてsshで転送しているのだが、他にもいくつか別のスクリプトを実行している。一つ目は、転送先のホストに指定のディレクトリがあるかをチェックするだけのスクリプト。*4

    #!/bin/bash
    if [ ! -d /home/user/backup/$1 ];
    then
      mkdir /home/user/backup/$1
    else
      echo -n
    fi
    

    二つ目は、tar実行前後にサービスを停止・起動するためのスクリプト。*5

    #!/bin/bash
    SERVICE="apache2 usermin webmin mysql samba nfs-kernel-server nfs-common portmap postfix"
    case "$1" in
    start)
    SERVICE=`echo $SERVICE | gawk -f /usr/local/bin/revword.awk`
    FLAG=start
    ;;
    stop)
    FLAG=stop
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
    ;;
    esac
    for i in $SERVICE
    do
            /etc/init.d/${i} $FLAG
    done
    

    このなかで実行しているawkスクリプトは、$SERVICEに格納した文字列を逆順に並び替えるだけのワンライナー。*6

    #!/usr/bin/gawk
    {for (i=NF; i>0; i--) {printf "%s ", $i;} printf "\n" }
    

    あとはDVDに自動追記するスクリプトを書けば良いのだろうが、growisofsコマンドの-Mオプションで追記できているように一見見える*7のだが、マウントして確認するとなぜか最初に書き込んだファイルしか見えないので、まぁそれを解決できたらかなり楽になるんだが。とはいえ、メディアは自分で交換する必要はあるんだが。

    *1:/usr/local/sbin/backup.sh

    *2:/usr/local/sbin/mysqldump.sh

    *3:/usr/local/sbin/autobackup.sh

    *4:/usr/local/bin/checkdir.sh

    *5:/usr/local/sbin/prebackup.sh

    *6:/usr/local/bin/revword.awk

    *7:エラーが出てない

    02:52pm mkouhei by mkouhei

    Debian security announce

    DSA-1992 chrony

    several vulnerabilities

    12:00am Debian security announce

    DSA-1991 squid/squid3

    denial of service

    12:00am Debian security announce

    February 03, 2010

    dancerj

    distcc のソースコードを icecream のソースコードを眺めてみる。

    distcc のソースコードを icecream のソースコードを眺めてみる。 気づいたのが、distccがCでicecreamがC++になっていること。 あと、distcc の負荷分散はかなりダサい。 しかし、icecreamも結構どろくさい感じがする。

    04:25pm dancerj by Junichi Uekawa

    Debian security announce

    DSA-1990 trac-git

    shell command injection

    12:00am Debian security announce