August 2014

今日、なるせさんが




とかつぶやいていて、意味がわからないので突っ込んだところ。svn ポッキー問題と呼ばれる大きな問題が隠れている事がわかった(詳細はコチラ http://togetter.com/li/706683) ので、コミット時に ChangeLogの日付を自動更新する git hookを書いた。これで自動的にChangeLogの時刻がコミット時時刻に一致する。

ソースはこちら。これを .git/hooks/pre-commit というファイル名で保存し、実行可能権限をつける

このエントリーをはてなブックマークに追加

いまさら確認するまでもないが、Rubyコミッタは全員 git svn を使っていて、コミット時にはなるせさんの
コミットメッセージ自動整形スクリプト(http://d.hatena.ne.jp/nurse/20100413)を使ってる。
異論はみとめない(キリッ

さて、これはこれで大変いいものであるのだが、脊髄反射的に git commit -av <リターン> とか打ってることがあって、他のプロジェクトと行ったり来たりしていると今ひとつなところがあった。
そういうわけで、上記URLのスクリプトをgit hook に移植して、git commit -a したら自動的にChangeLogからコミットメッセージを生成するようにしてみた

以下のスクリプトを、/.git/hooks/prepare-commit-msg というファイル名でセーブして、実行権限をつけるとよい。


このエントリーをはてなブックマークに追加

今日知ったこと。
gtagsのupdate は global --single-update で1ファイルだけのアップデートが出来る。
よって、



みたいなスクリプトで、gitのコミットIDから変更ファイルだけアップデートが出来る。わたしはこれをcherry-pickの処理に仕込んだ
このエントリーをはてなブックマークに追加

いままで、rpmbuildするときに

mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}


して、

echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros



とかやってたんだけど、それはもう古いらしい。

% yum install rpmdevtools
% rpmdev-setuptree



すると、上記の両方をやってくれるのに加えて .rpmmacrosに並列処理設定を追加してくれる。
こんな感じ

%_topdir %(echo $HOME)/rpmbuild

%_smp_mflags %( \
[ -z "$RPM_BUILD_NCPUS" ] \\\
&& RPM_BUILD_NCPUS="`/usr/bin/nproc 2>/dev/null || \\\
/usr/bin/getconf _NPROCESSORS_ONLN`"; \\\
if [ "$RPM_BUILD_NCPUS" -gt 16 ]; then \\\
echo "-j16"; \\\
elif [ "$RPM_BUILD_NCPUS" -gt 3 ]; then \\\
echo "-j$RPM_BUILD_NCPUS"; \\\
else \\\
echo "-j3"; \\\
fi )

%__arch_install_post \
[ "%{buildarch}" = "noarch" ] || QA_CHECK_RPATHS=1 ; \
case "${QA_CHECK_RPATHS:-}" in [1yY]*) /usr/lib/rpm/check-rpaths ;; esac \
/usr/lib/rpm/check-buildroot



rpmbuildがかなり高速化されるし、間違いも起きにくいので、手で .rpmmacrosを書く必然性は
まったくなくなったと言っていい。

知らんかったなあ
このエントリーをはてなブックマークに追加

RHEL7でしばらくキーを操作しないでおくと、以下の様なカーテンが降りてくるけど、非常に鬱陶しい。

gnome3-curtain

今回はこれのdisableの仕方。

% sudo yum install -y gnome-shell-browser-plugin



で、firefoxにgnome-shell extensionを入れる。これで、ブラウザで、https://extensions.gnome.org を
閲覧すると、インストールしまっかと聞いてくるようになる。

https://extensions.gnome.org/extension/730/curtains-up/

に curtainを disable するプラグインがあるので、これをインストール。

なお、パスワード入力はGnome標準の機能でdisableできるが、これがとんでもなく分かりにくいので
ついでに紹介。

メニューバー右端の、自分の名前をクリック、Settingsを選択
setting1.png

Privacyを選択
010acd2d.png


Screen LockをOFFに変更
d6fa38f7.png


昔ながらのようにスクリーンセーバーというアイコンがコントロールパネルにあるかと思い込んでるとハマる。
このエントリーをはてなブックマークに追加

もう何百回もやってるはずなのに定期的にハマるのでメモ

kernelのspec ファイル書き換えてオレオレカーネルを作るには以下の三箇所を変更する

まず、rpm名を書き換えるために6行目ぐらいのbuildidのところ、コメントアウトされてるのを元に戻す

変更元)

# % define buildid .local



変更後)

%define buildid .mytest



ここで罠なのは % と define の後に、スペースを入れるのは許されていないのだが、なぜか
変更元はスペースが入っているのでまんまと騙されることである。
あと、名前は "." で初めておかないと、いろいろと後悔する。

kernel-3.10.0-1.el7.mytest.src.rpm

みたいなファイル名になるんだが、ここで "." がないと、前の el7 とくっついてしまう。

次に

# empty final patch to facilitate testing of kernel patches
Patch999999: linux-kernel-test.patch



となっているところに、適用するパッチを足す

変更後)

# empty final patch to facilitate testing of kernel patches
Patch999999: linux-kernel-test.patch

Patch10001: hoge1.patch



とかみたいにする。番号は適当でいいが、ユニークな番号にすること。
なお、ここでファイル名を書くときに余分なスペースは絶対に入れてはいけない。

パッチ適用をするApplyPatchという関数の中で


ApplyPatch()
{
(略)
if ! grep -E "^Patch[0-9]+: $patch\$" %{_specdir}/${RPM_PACKAGE_NAME%%%%%{?variant}}.spec ; then



というクソコードが有るため、スペースが1つでも余分にあるとパッチ適用に失敗する。
わたしは、dired から矩形選択でファイル名持ってきて、これでハマったよ。

さて、rpm specfileはクソフォーマットなので、これで話が終わりじゃなくて、別の場所にもう一度
パッチ一覧を列挙しないといけない。

変更元)

ApplyOptionalPatch linux-kernel-test.patch



変更先)

ApplyOptionalPatch linux-kernel-test.patch

ApplyPatch hoge1.patch



のように、ApplyOptionalPatchがあるあたりに、ApplyPatchを書いていく。ここで間違ってもApplyOptionalPatchを
使ってはいけない。
ApplyOptionalPatchはパッチがなきゃあスキップする関数なので、間違った時に気づくのが遅れてしまう。


で、こんなん憶えていられるはずなのでスクリプト書いた

rpmpatch kernel.spec --localname .mytest ../SOURCES/00*.patch



のように名前をファイル名を引数に取ってパッチしてくれる。

以下に置いとく。
https://gist.github.com/kosaki/de41d67a899b0d839599
このエントリーをはてなブックマークに追加

↑このページのトップヘ