«前の日記(2014-05-04) 最新 次の日記(2014-05-06)» 編集

ポケットを空にして。

1985|10|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2100|01|

「人の心に残るというのが大事」と言う話。

何か連絡がある場合はメールでどうぞ(過去の日記へのツッコミは基本的にみていません)
プレゼントは随時受け付けております :-) ここ最近のツッコミ/トラックバックリスト。


2014-05-05 [長年日記]

openSUSEでパッケージングを試してみる

RPMパッケージの作成から参考になる知見を得るため、opensuse conference 2014のパッケージングワークショップの動画を見て、プレゼン資料を見ながら作業

henrich@linux-1xx3:~> sudo zypper ar http://download.opensuse.org/repositories/openSUSE:/Tools/openSUSE_13.1/openSUSE:Tools.repo
root's password:
リポジトリ 'openSUSE.org tools (openSUSE_13.1)' を追加しています ..................................................[完了]
リポジトリ 'openSUSE.org tools (openSUSE_13.1)' を正常に追加しました
有効: はい (Y)
自動更新: いいえ (N)
GPG チェック: はい (Y)
URI: http://download.opensuse.org/repositories/openSUSE:/Tools/openSUSE_13.1/
  • 「自動更新: いいえ (N)」ってのはどういうことなんだろ。
  • 「GPG チェック: はい (Y)」ってのはパッケージごとにGPGキーでの署名が行われている?
henrich@linux-1xx3:~> sudo zypper ref
リポジトリ 'openSUSE-13.1-1.10' は最新の状態に更新済みです。
リポジトリ 'openSUSE.org tools (openSUSE_13.1)' のメタデータを取り出しています... ------------------------------------[\]
 
新しいリポジトリまたはパッケージの署名鍵を受信しました:
鍵 ID: 85753AA5EEFEFDE9
鍵名: openSUSE:Tools OBS Project 
鍵指紋: 0A031153E2F5E9DB71510D8C85753AA5EEFEFDE9
鍵の作成: 2008年01月23日 06時08分03秒
鍵の有効期限: 2014年12月20日 22時18分55秒
リポジトリ: openSUSE.org tools (openSUSE_13.1)
 
鍵を拒否しますか (R)? 一時的に信頼しますか (T)? それとも今後ずっと信頼しますか (A)? [r/t/a/? 全てのオプションを表示] (r): y
回答 'y' が正しくありません。 [r/t/a/? 全てのオプションを表示] (r): a
リポジトリ 'openSUSE.org tools (openSUSE_13.1)' のメタデータを取り出しています... .................................[完了]
リポジトリ 'openSUSE.org tools (openSUSE_13.1)' のキャッシュを構築しています ......................................[完了]
リポジトリ 'openSUSE-13.1-Non-Oss' は最新の状態に更新済みです。
リポジトリ 'openSUSE-13.1-Update' は最新の状態に更新済みです。
リポジトリ 'openSUSE-13.1-Update-Non-Oss' は最新の状態に更新済みです。
全てのリポジトリを更新しました。
  • デフォルトでNon-Ossのリポジトリを見にいくの?
  • 鍵を信頼しないで進められるのかな?
henrich@linux-1xx3:~> sudo zypper in --from openSUSE_Tools osc build
リポジトリのデータを読み込んでいます...
インストール済みのパッケージを読み込んでいます...
パッケージの依存関係を解決しています...
 
問題点: osc-0.145.0-131.1.noarch は python-urlgrabber を必要としていますが、この要求を解決する方法がありません
  インストール不可能なプロバイダ: python-urlgrabber-3.9.1-10.1.2.noarch[openSUSE-13.1-1.10]
 解決方法 1: patterns-openSUSE-minimal_base-conflicts-13.1-13.6.1.x86_64 のアンインストール
 解決方法 2: osc-0.145.0-131.1.noarch をインストールしない
 解決方法 3: osc-0.145.0-131.1.noarch をインストールしない
 解決方法 4: いくつかの依存関係を無視することによって osc-0.145.0-131.1.noarch を壊します
 
いずれかの数字を入力するか、キャンセル(C) を入力してください [1/2/3/4/c] (c): 1
依存関係を解決しています...
パッケージの依存関係を解決しています...
  • いきなり「インストール不可能なプロバイダ」ってのはいったい。。。
henrich@linux-1xx3:~> osc co home:darix:workshop
 
Your user account / password are not configured yet.
You will be asked for them below, and they will be stored in
/home/henrich/.oscrc for future use.
 
Creating osc configuration file /home/henrich/.oscrc ...
Username: henrich
Password: 
done
Server returned an error: HTTP Error 401: basic auth failed

適当なユーザー名とパスワードだとダメですね。これはopenSUSEのOBSサイトの方で先に作っておかないとダメなのかな?
→あたり。昔、アカウント作ってたのをすっかり忘れてたのでリセットした。しかし~/.oscrcファイルむっちゃながいね。。。

Use spdx format for licenses

copyright format 1.0だと spdx と違いあるかな?

Using %{?_smp_flags} can speed up your build a lot.

pbuilderrcで設定していることはあるけど、自動で判別してということではなかったから、こっちの方が賢い気がする。
できればデフォルトでsmpを判別、値を指定するようにして、例外でoffにするとかの指定をつけるようにするほうがいい気がする

"osc repos" to see what we can build for.
"osc build openSUSE_13.1 x86_64"

cowbuilder --basepath でビルド環境切り替えるのと同様か。事前に作らなくてもいいのは楽なのかな。何か改善できるかな

"pkgconfig($libraryname)" for portability, except for older distributions.

これはいいアイデアなのでは?

"osc vc"

dchと同じ。

"osc addremove"

これ、説明あったかな?

For many languages we already have guide lines or even tools (gem2rpm, py2pack)

gem2rpmってgem2debとどっちが先なのかな?

Create a seperate user/group for your package. Most of the time your daemon does not need root to run.

ユーザーとグループを作るのであれば、rulesに直書きではなく分かれたファイルにしておいた方がいいような気がしてきた

zypper in spec-cleaner

rpmlintとは別なの?

henrich@linux-1xx3:~> man spec-cleaner
-bash: man: コマンドが見つかりません

oh...

とりあえず spec-cleaner -d foobar.spec したら差分表示でいい感じに直してくれるようだ。

buildは.specファイルのあるディレクトリで osc build すれば /var/tmp/build-root/ 以下に chroot して作るっぽい。パッケージは一度取得すると/var/tmp/osbuild-packagecache/ 以下にバージョンごとにopenSUSE:13.1 のようにフォルダを作って、その下にアーキテクチャごとに分かれてパッケージが保存されているようだ。…けど、一度取得したパッケージを再展開している様子が見えない。どこに展開したイメージを保存するの?

$ osc build openSUSE_13.1  x86_64
Building librelp.spec for openSUSE_13.1/x86_64
Getting buildinfo from server and store to /home/henrich/home:darix:workshop/librelp-01-base/.osc/_buildinfo-openSUSE_13.1-x86_64.xml
Getting buildconfig from server and store to /home/henrich/home:darix:workshop/librelp-01-base/.osc/_buildconfig-openSUSE_13.1-x86_64
Updating cache of required packages
 
The build root needs packages from project 'openSUSE:13.1'.
Note that malicious packages can compromise the build result or even your system.
Would you like to ...
0 - quit (default)
1 - always trust packages from 'openSUSE:13.1'
2 - trust packages just this time
? 2
0.0% cache miss. 111/111 dependencies cached.
 
Verifying integrity of cached packages
using keys from openSUSE:13.1
Writing build configuration
Running build
root's password:
logging output to /var/tmp/build-root/openSUSE_13.1-x86_64/.build.log...
[    0s] Memory limit set to 3405340KB
[    0s] Using BUILD_ROOT=/var/tmp/build-root/openSUSE_13.1-x86_64
[    0s] Using BUILD_ARCH=x86_64:i686:i586:i486:i386
[    0s] 
[    0s] 
[    0s] linux-1xx3 started "build librelp.spec" at Mon May  5 13:02:02 UTC 2014.
[    0s] 
[    0s] 
[    0s] processing recipe /home/henrich/home:darix:workshop/librelp-01-base/librelp.spec ...
[    0s] running changelog2spec --target rpm --file /home/henrich/home:darix:workshop/librelp-01-base/librelp.spec
[    0s] init_buildsystem --configdir /usr/lib/build/configs --cachedir /var/cache/build --rpmlist /tmp/rpmlist.0R3aBQ /home/henrich/home:darix:workshop/librelp-01-base/librelp.spec ...
[    0s] reordering...cycle: libcrack2 -> cracklib
[    0s]   breaking dependency libcrack2 -> cracklib
[    0s] cycle: libtasn1-6 -> libtasn1
[    0s]   breaking dependency libtasn1-6 -> libtasn1
[    0s] done

うーん…?

henrich@linux-1xx3:/var/tmp/build-root/openSUSE_13.1-x86_64/installed-pkg> ls
aaa_base              fillup                libaudit1        libitm1          libtasn1-6         permissions
aaa_base-malloccheck  findutils             libblkid1        liblua5_1        libtasn1-devel     pkg-config
attr                  gawk                  libbz2-1         liblzma5         libtirpc1          post-build-checks
bash                  gcc                   libcap2          libmagic1        libtsan0           rpm
binutils              gcc48                 libcloog-isl4    libmount1        libustr-1_0-1      rpm-build
brp-check-suse        gettext-runtime-mini  libcrack2        libmpc3          libutempter0       rpmlint-Factory
brp-extract-appdata   gettext-tools-mini    libdb-4_8        libmpfr4         libuuid1           rpmlint-mini
build-compare         glibc                 libelf1          libncurses5      libz1              sed
build-mkbaselibs      glibc-devel           libffi4          libnettle-devel  libzio1            systemd-rpm-macros
bzip2                 glibc-locale          libgcc_s1        libnettle4       linux-glibc-devel  tar
coreutils             gmp-devel             libgdbm4         libp11-kit0      m4                 terminfo-base
cpio                  grep                  libgmp10         libpcre1         make               update-alternatives
cpp                   gzip                  libgmpxx4        libpopt0         net-tools          util-linux
cpp48                 info                  libgnutls-devel  libreadline6     p11-kit-devel      which
cracklib              insserv-compat        libgnutls28      libselinux1      pam                xz
diffutils             libacl1               libgomp1         libsemanage1     pam-modules        zlib-devel
file                  libasan0              libgssglue1      libsepol1        patch
file-magic            libatomic1            libhogweed2      libstdc++6       perl
filesystem            libattr1              libisl10         libtasn1         perl-base
 
henrich@linux-1xx3:/var/tmp/build-root/openSUSE_13.1-x86_64/installed-pkg> cat gcc48
gcc48-4.8.1_20130909-3.2.1 1380871479

あれ?別のパッケージをビルドしてみて、/var/tmp/build-root/openSUSE_13.1-x86_64/usr/include以下を見たら、ファイルが増えてるような…もしかして、最小限のchrootを作ってくれるのではなく、毎度使いまわすのか、これは。あまりうれしくないなぁ…

そして謎なのが、/var/tmp/build-root/openSUSE_13.1-x86_64/opt/testing 以下にファイルがあることですよ。なぜ/opt?

|-- bin
|   |-- checkbashisms
|   |-- dash
|   |-- desktop-file-validate
|   |-- python
|   `-- rpmlint

dashとかcheckbashismsとかがあるし、なぜここにもrpmlintがある?

カーネルイメージを作り直してみる

SWAP無効にしていたカーネルだとsnmpdがエラーログ吐きまくるぜと言われていたのがあったので、そちらを検証するために作業。 インストールガイドを参考に。

$ sudo apt-get install linux-source-3.2 kernel-package
$ tar xvf /usr/src/linux-source*
$ cd linux-source*
$ cp /boot/config-3.2.* ./.config
$ vi .config (で、SWAPのところだけ無効にして)
$ fakeroot make-kpkg --initrd --revision=1.0custome kernel_image (ガイドの--revision=custom.1.0だと無効と言われたような)
$ sudo dpkg -i ../linux-image-3.2*
$ sudo shutdown -r now

で、試したけどふつーに/proc/vmstatの下の項目が見えていて特にエラーを吐かなかったので、これ以上の深追いはいらないだろうとwontfixタグをつけました。

%{?_smp_flags} と同等のものがあるといい気がする

  • 一応/etc/pbuilderrcで DEBBUILDOPTS="-j4" などとすればいいのだけど、問題がいくつか。
    1. ビルドするユーザーが手で書かないといけない。
    2. 決め打ち
    3. そもそもその値は適切なのかどうか
  • pbuilder/cowbuilderで指定するよりも、ソース側でやったほうがいい?→でもそうするとソース側で色々対応しなければいけない気がする…これは手間。
  • となると、debhelperで対応するといいんじゃないか?
  • 新規バージョンでビルドすると自動的にsmpなフラグを立ててビルド、それで失敗するようであれば、debian/rulesに明示的にdisableにする記述する

debhelperにハックすればいい、という結論だ。

$ expr 1 + `grep ^processor /proc/cpuinfo |tail -n1|cut -d':' -f2|sed -e s/\ //`

コア数自体は上記で簡単にとれるんだけど。