super-smack
$ wget http://vegan.net/tony/supersmack/super-smack-1.3.tar.gz $ tar xvzf super-smack-1.3.tar.gz $ cd super-smack-1.3/ $ ./configure --with-mysql --prefix=$HOME --with-smacks-dir=$HOME/share --with-datadir=$HOME/var --with-mysql-lib=/usr/lib64/mysql/ --with-mysql-include=/usr/include/mysql
で動くかと思いきや、何カ所か手を入れる必要があった。
strlenが無い(おそらくgccが新しすぎる)って怒られる場合は、src/dictionary.hに下記を追加
#include <string.h>
また、キャストできない(おそらく64bit環境なため)って怒られる場合は、src/query.ccを修正。
--- query.cc~ 2005-04-30 22:51:29.000000000 +0900 +++ query.cc 2009-10-11 19:05:46.000000000 +0900 @@ -197,7 +197,7 @@ { string s((*i).first); int str_len = (*i).first.length(); - if((unsigned)p + str_len + 3 *sizeof(int) < (unsigned)p_end ) + if((unsigned long)p + str_len + 3 *sizeof(long) < (unsigned long)p_end ) { *p++ = (char) str_len; const char* q_type_name = s.c_str(); @@ -216,7 +216,7 @@ die(0, "report buffer overflow -- too many query types"); } - len = (unsigned)p - (unsigned)buf; + len = (unsigned long)p - (unsigned long)buf; *(buf) = num_recs; if(write(fd, buf, len) != len)
並外れて投げやりな修正だが、動いているようだ。しかし、上記のようにsizeof(void *)==sizeof(int)を仮定している場所が他にもあるようなら、あまりマトモには動かないかもしれない。
また、インストールにflexとbison(or byacc)が必要なのだが、無くてもconfigureで何も言ってくれないので注意。
useradd時のホームディレクトリのスケルトン
useraddすると勝手にホームディレクトリが作られ、デフォルトの.bashrcなどがコピーされます。このコピー元はデフォルトでは/etc/skel以下です。
$ ls -la /etc/skel total 64 drwxr-xr-x 3 root root 4096 Sep 24 18:45 . drwxr-xr-x 108 root root 12288 Oct 4 04:02 .. -rw-r--r-- 1 root root 33 Jan 22 2009 .bash_logout -rw-r--r-- 1 root root 176 Jan 22 2009 .bash_profile -rw-r--r-- 1 root root 124 Jan 22 2009 .bashrc -rw-r--r-- 1 root root 515 Jun 15 2008 .emacs drwxr-xr-x 4 root root 4096 Sep 11 19:31 .mozilla -rw-r--r-- 1 root root 658 Jan 7 2007 .zshrc $
ここに好きなファイルを追加すれば、useradd時に作られるファイルを追加できます。ユーザーごとに.ssh/を手動で掘るのはアホらしいので、OSインストール直後にまず/etc/skel/.sshを作るべきだと思います。
$ su - # mkdir /etc/skel/.ssh # chmod 700 /etc/skel/.ssh # touch /etc/skel/.ssh/authorized_keys # chmod 600 /etc/skel/.ssh/authorized_keys
これディストリビューション標準にしてくれないかな。
SRPMの中身を見る
10/2の記事「SRPMの取得」の続きです。取ってきたSRPMの探検方法を紹介します。
$ mkdir -p RPM/{BUILD,RPMS/{i386,i586,i686,noarch},SOURCES,SPECS,SRPMS} $ echo %_topdir $HOME/RPM >> .rpmmacros
過去にSRPMをいじったことが無い場合、上記の準備が必要です。ディレクトリ名は好みで。
$ rpm -ihv lv-4.51-8.1.src.rpm 1:lv 警告: ユーザ mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザ mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザ mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザ mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザ mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザ mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します 警告: ユーザ mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します ########################################### [100%] $ cd RPM/SPECS/ $ lv lv.spec
SRPMをインストールすると、先ほど準備したディレクトリに何ファイルかインストールされます。まず見るべきものはRPM/SPECS以下のSPECファイル(パッケージの設計書)です。初めて見る人でもそこそこ読めるかと思います。
SPECファイルを見たところ、CentOSのlvには5個のパッチが当たっています。パッチはRPM/SOURCES以下にあります。
$ cd ../SOURCES $ ls lv-+num-option.patch lv-4.49.4-nonstrip.patch lv-4.51-162372.patch lv-fastio.patch lv-lfs.patch lv451.tar.gz $
パッチの中身をざっと見たところ、「lv-+num-option.patch」で下記のコマンドラインオプションが追加されているようです。
+number Jump to the specified line immediately when lv is invoked. +/grep-pattern Search the specified pattern immediately when lv is invoked.
それ以外に興味を引くようなものは無さそうですが、パッチ適用後のソースコードも眺めてみます。
$ cd ../SPECS/ $ sudo yum install rpm-build $ rpmbuild -bp lv.spec 実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.71712 + umask 022 + cd /home/install-memo/RPM/BUILD + cd /home/install-memo/RPM/BUILD + rm -rf lv451 + /bin/gzip -dc /home/install-memo/RPM/SOURCES/lv451.tar.gz + tar -xf - + STATUS=0 + '[' 0 -ne 0 ']' + cd lv451 ++ /usr/bin/id -u + '[' 500 = 0 ']' ++ /usr/bin/id -u + '[' 500 = 0 ']' + /bin/chmod -Rf a+rX,u+w,g-w,o-w . + echo 'Patch #1 (lv-4.49.4-nonstrip.patch):' Patch #1 (lv-4.49.4-nonstrip.patch): + patch -p1 -b --suffix .nonstrip -s + echo 'Patch #2 (lv-4.51-162372.patch):' Patch #2 (lv-4.51-162372.patch): + patch -p1 -b --suffix .162372 -s + echo 'Patch #3 (lv-+num-option.patch):' Patch #3 (lv-+num-option.patch): + patch -p1 -b --suffix .num -s + echo 'Patch #4 (lv-fastio.patch):' Patch #4 (lv-fastio.patch): + patch -p1 -b --suffix .fastio -s + echo 'Patch #5 (lv-lfs.patch):' Patch #5 (lv-lfs.patch): + patch -p1 -b --suffix .lfs -s + exit 0 $ cd ../BUILD/lv451/
ちなみに、期待していた機能は見つかりませんでした。
GNOME端末のカスタマイズ
- 「キーボード・ショートカット」
- 「メニューのアクセスキーを全て無効にする」
- デフォルトだとAltがメニューに取られてしまい、Emacsライクなmetaキーが使えないため
- 「前のタブに切り替える」Ctrl+Shift+[
- 「次のタブに切り替える」Ctrl+Shift+]
- 「メニューのアクセスキーを全て無効にする」
- 「プロファイル」
- 背景色を青に。
Ctrl+Shift+tで新規タブ。
SRPMの取得
SRPMが突然欲しくなることってないですか?僕はCentOS 5のlvにどんなパッチが当たっているのか、今すぐ知りたくなりました。
まずyum-utilsをインストール。
# yum install yum-utils
次に、/etc/yum.repos.d/CentOS-Base.repo に下記のように追記しました。
[base-srpm] name=CentOS-$releasever - Base SRPM baseurl=http://mirror.centos.org/centos/$releasever/os/SRPMS/ enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 [updates-srpm] name=CentOS-$releasever - Updates SRPM baseurl=http://mirror.centos.org/centos/$releasever/updates/SRPMS/ enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
準備完了。
$ sudo yum --enablerepo=base-srpm,updates-srpm check-update # 初回アクセス時に必要? (略) $ yumdownloader --enablerepo=base-srpm,updates-srpm --source lv Loaded plugins: fastestmirror, priorities lv-4.51-8.1.src.rpm | 587 kB 00:02 $
無事ダウンロードできました。