Upload slim, winwrangler and pvm
pvm はNMU。
deb http://debian-sh4.nigauri.org/cross-compiler/bin ./
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の環境が無いのとデグレートしてまで確認しようとは思わないので。
東京近辺にいらっしゃる皆様こんにちは。今年も Debian 勉強会が開かれます!
Debian 勉強会とは、Debian の開発者になれることをひそかに夢見るユーザたちと、 ある時にはそれを優しく手助けをし、またある時には厳しく叱咤激励する Debian 開発者らが Face to Face で Debian GNU/Linux のさまざまなトピック (新しいパッケージ、Debian 特有の機能の仕組について、Debian 界隈で起こった出来事、etc) について語り合うイベントです。
参加される方は主に東京を中心に関東近郊の国籍・性別不問の Debian ユーザです (Debian をまだ使ったことが無いが興味があるので…とか、かなり遠い所から来てくださる方もいます)。 開発の最前線にいるDebian の公式開発者や開発者予備軍の方も居ますので、 普段は聞けないような様々な情報を得るチャンスです。 興味と時間があった方、是非御参加下さい。 (また、勉強会で話をしてみたいという方も随時募集しています)。
今回は木更津工業高等専門学校 情報工学科の方々のご協力を得まして木更津での開催になります。
都内だと遠くて参加できないという木更津近郊の方々、是非ともご参加ください。
また今回は「でびあん温泉」と称して温泉合宿を同時に行います。
木更津以外からの参加者有志で集まって宿泊場所を確保し、よもやま話や温泉を楽しむ予定です。
温泉合宿と勉強会の参加申し込みは別になります。勉強会のみ参加というのも可能です。
また、温泉合宿申し込み締切りは勉強会申し込みの締切りより早め (2/10 まで)となります。ご注意ください。
この件に関するお問い合わせは Debian 勉強会主催者:前田耕平 (mkouhei@{debian.or.jp} ) までお願いいたします。
squeezeのカーネルが2.6.32になってたので、linux-tomoyo-patch は折り合いをみて削除してもらいます。で、どうするかというと今 experimental にいる linux-tomoyo-patch1.7 を入れます。
tomoyo-ccstools は悩ましいというかアップデートしちゃうと困ってしまうのでやっぱりこれも同じように折を見て削除ですね。で、代わりに tomoyo-ccstools1.7 が入るように。2月真ん中目処ですね。
tomoyo-tools (2系)はどうしましょうねぇ…誰か気合のある人がいたらお任せしたいところ。パッケージ雛形自体はできています。
「第32回 関西 Debian 勉強会」 のお知らせです。関西 Debian 勉強会は、関西方面の Debian ユーザ/ユーザ予備群/開発者らで Debian GNU/Linux のさまざまなトピックについて Face to Face で楽しく話し合っていく集まりです。
この件に関するお問い合わせは 関西 Debian 勉強会 担当:野方 純 (nogajun@{debian.or.jp} ) までお願いいたします。
嫁が玄関にある鬼のお面をかぶってリビングに入ってこい!というのでお面をかぶってリビングに入ったのはいいが、子供にキャッキャッと笑われる罠。思っていた反応と違ったのでガッカリですよ。
$ cat /sys/class/net/eth0/carrier 1では、カーネル空間からチェックするにはどうしたらいいのか。 __dev_get_by_index で指定したネットワークデバイス番号のstruct net_deviceを取得し、netif_carrier_ok を使って、状態をチェックします。
struct net_device *dev;
dev = __dev_get_by_index(&init_net, 1);
if (dev)
printk("%s: %d\n", dev->name, netif_carrier_ok(dev));
先月の中頃までDebian/amd64でbinutilsのクロスコンパイルができなったのですが、zumbi がパッチを教えてくれたので、コンパイルできるようになりました。sh4 のクロスコンパイラはいつもの場所に置いておきます。
組合サーバのバックアップは、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のだが、マウントして確認するとなぜか最初に書き込んだファイルしか見えないので、まぁそれを解決できたらかなり楽になるんだが。とはいえ、メディアは自分で交換する必要はあるんだが。