プラスα空間

ブログ in お市 のーと

Debianパッケージ作りに苦戦中

先週末、netatalk 3.0.1がリリースされました。

前回作成したpatchに問題がある事がわかったので、修正しました。

この問題は、次の記事で発見されました。

ご報告ありがとうございます。ご迷惑をおかけしました。

問題の要点は、debパッケージに必要なファイルが抜け落ちていた事です。手動でnetatalkをインストールした事がある人は、この問題に当たらないのです。盲点でした。

ちゃんとdebianパッケージを作ろうと思い、勉強を始めました。

文書の量が多いです。それと、一回読んだだけではわからず、実際にやってみる必要があります。

Netatalk 3.0.1をbuildしてinstallするだけならできるのですが、パッケージをremoveしたりpurgeしたりとか、netatalk 2.xからアップグレードする時にどうした方が良いのかとか、色々わかりません。

他、色々お作法があって、それを理解しないと、ちゃんとしたパッケージは作れないのです。

netatalkのdebianパッケージのメンテナは、次の方です。

すごくたくさんパッケージを抱えておられます。

Debian 新メンテナーガイドには、Debianに関わる際に関する、色々良い事が書かれています。

あなたがDebian と関わる際の準備となることを望み、Debianの社会ダイナミクスの観察結果を記します。

  • 我々全員はボランティアです。
    • 他人に何をするかを押し付けてはいけません。
    • 自分自身で行う意欲を持つべきです。
  • 友好的な協力が推進力です。
    • あなたの寄与は他人にストレスを掛けすぎてはいけません。
    • あなたの寄与は他人に評価されて初めて価値があります。
  • Debian は教師の注意が自動的にあなたに注がれるあなたの学校とは違います。
    • 多様な案件の独学能力を持つべきです。
    • 他ボランティアに注意を払ってもらうことは貴重なリソースです。
  • Debian は常に改良されています。
    • あなたには高品質パッケージを作成することが期待されています。
    • あなたは変化に自らを適合させる必要があります。

第1章 まずは正攻法で始めようより

Debianコミュニティの中で、自分だけが得をするのではなく、自分でも努力をし、きちんと協力して行きましょうと言う事ですね。自分に厳しく、他人には親切に。それを使う人も、寛容でなければならない。

Debianパッケージ作りに苦戦中”に“18”個のコメント
  • henrich より:

    official の netatalk をベースに作成しないのでしょうか?
    >>Ubuntu 10.04
    というのはパッケージを作るのには良くないですね。最新環境で作成、最低でもchrootでpreciseかsidを作るのが常道です。

    • HAT より:

      私もそう思う。
      なぜ古い環境にこだわるのか。
      まずOSを最新にした方が色々スッキリするし、読み手の参考にもなる。

      • HATさんへ、いつもコメントありがとうございます。

        古い環境を使っているのは、別コメントに書いた通りで、要は環境をupgradeするのが面倒だからです。

        とは言え、Ubuntu 10.04は4世代も前ですので、Mac OS Xで例えるとMac OS X 10.4 Tiger相当ですね。

        確かに、今時、こんな古いOSを使っている人はいません。

    • henrichさんへ、初コメントありがとうございます。
      お返事が遅くなってしまって申し訳ありません。

      まず、私が作っているnetatalk用のdebianパッケージですが、officialのパッケージを元にしています。目的は、そのパッケージを修正し、dpkgでインストールできるdebianパッケージを自分用に作る事です。

      アクセス解析を見ていますと、私が自分用に作った記事が、国内外ともそれなりのアクセスがあり、使っている方もおられます。

      なので、もう少しまともなパッケージにできれば良いと思い、debianパッケージの作り方を勉強し始めました。その前までは、try & errorで、officialのnetatalkのパッケージを修正するだけでした。

      勉強してみると、パッケージを作る為の、色々な決まりや仕組みがある事がわかりました。

      パッケージ作成に使っているシステムがPowerMac G4/MDDに入れたUbuntu 10.04 (desktop)で、これをそのまま使っています。バージョンをあげていないのは、Upgradeするのが面倒なのと、まだサポート期間内(2013年4月)であるからです。

      自分で試すだけにはこれで十分だったので、そのままにしています。

      「最新環境で作成、最低でもchrootでpreciseかsidを作るのが常道です。」と言う事ですが、次の意味であっているでしょうか?

      最新環境(リリース予定の12.10とか)もしくは現在リリースされているPrecise(12.04)の上で、
      chroot環境を構築し(当然12.10か12.04のコピー)、
      不安定版 (unstable) ディストリビューション (“sid”)を作成する。
      http://www.debian.org/releases/sid/index.ja.html

      確かに、この様な環境を準備して作った方が、安全に作業できそうです。

      よろしければ、またコメントをいただけると嬉しいです。

  • henrich より:

    状況は分かりました。

    ええっとですね、既にリリースされている環境上でパッケージを作成するのではなくて、最新環境(Debian unstableあるいはUbuntuにこだわるのであれば precise)をchrootで作成して、その中でパッケージを作り、必要に応じて古いバージョンにbackportするのが、パッケージを公開していろいろな人が使う状況であれば幸せになれる人が増える、ということです。

    多分 Jonas は、他の作業か何かで忙しいのだと思うので、良い形にしてパッチをBTSするとかすれば、Officialパッケージに反映してもらえると思います。必要であればフォローはしますよ。

    空いた時間を見つけて、作業されたやり方を確認してみますね。

    • henrichさんへ、再びコメントありがとうございます。
      なるほど、最新版でパッケージを作ってそれを古いバージョンにbackportですか。確かに、その方が多くの人の参考になりそうです。

      「パッチをBTSする」は、「パッチをBug Tracking Systemに載せる」と言う意味であっていますよね?

      私が作業に取りかかれるのは、かなり先になると思います。

      chrootしての作業はやった事が無いので、この環境にOSをインストールする所から始まると思います。

  • HAT より:

    Debian/Ubuntuパッケージのアップデート状況を見ていると、Ubuntuの新しいバージョンが出た直後に、その時点でのnetatalk最新版を使ってsid用パッケージを作り、Debian testing とUbuntu develに反映します。
    よって、次のアップデートは近い。きわどいですね。

  • henrich より:

    えーと、大抵のパッケージは、まず Debian unstable にメンテナがパッケージを入れて、それを Ubuntu 人が開発版へコピーして引っ張ってくるという形になっています。Ubuntuのリリースのスケジュールとは基本関係ないです。

    testing への移行は release critical bug が無い& unstable に入って10日経った ら、リリース前の freeze 期間で無い場合に移行されます。で、今はfreeze期間なのでunstableに入れてもtestingへは反映されません。来年2月以降にfreeze解除だと思います。

    Ubuntuへは12.10がもうfreezeですから、次の13.04までは無いですね。

    で、手元では大体3.0.1のパッケージを作りました。ちょっとまだbuild hardeningが効かないなどの問題があるので、いじくる予定です。

    そういえば、netatalk2.2系はいつまで出るのでしょうか? netatalk2.2がかなり長く続くなら、netatalk3 パッケージとして別ものにしてアップロードという形も考えられます。

  • HAT より:

    2.2.4リリース以降、product-2-2ブランチに実質的な動きがありません。1つだけ更新がありますが、開発の都合であって実用上は無関係です。つまり、いまのところ2.2.5をリリースしなければならない理由はありません。
    2.2系終了の話はまだ出てませんが、しばらく様子をみて重大なバグが報告されなかったら
    そのまま終了になると思います。

  • henrich より:

    解説ありがとうございます。
    なるほど、ではnetatalk3.0.x がそのまま後継になる、で良さそうですね。
    #Sambaみたいに4.0がなかなかでなくて3.xが出つづける、というのを心配していました。

  • HAT より:

    メジャーバージョンアップは年一回程度、
    マイナーバージョンアップは随時行うがbig fixのみで仕様変更しない、
    という申し合わせがあります。

    2.0.3リリース後の低迷期は別として、結構順調です。
    2010.04.26 2.1
    2011.07.27 2.2.0
    2012.07.09 3.0

    2.1系は終了。
    2.2系は単なる保守。
    3.0系も基本的には*保守*です。
    本当に開発中なのはspotlightブランチだけ。

  • henrichさん、HATさんへ、コメントありがとうございます。お返事が遅くなってしまい、申し訳ありません。

    henrichさんのパッケージの中身を確認しました。大きく2点だけ、メールしました。

    まず、”debian/control”の中で、AppleTalkうんぬんの説明がありますが、不要です。Netatalk 3.xでは、廃止になっていますので。

    それと、”debian/rules”の中で、”–enable-fhs”と”–with-pkgconfdir=/etc/netatalk”を指定されていると思います。”–enable-fhs”が指定されていると、”–with-pkgconfdir=/etc/netatalk”は無視される様です。設定ファイル”afp.conf”は”/etc”に置かれます。

    Netatalk 3.xでは、”/var/netatalk”も使われます。この中に、自動生成される設定ファイルと、CNIDと呼ばれるディレクトリ内に、ユーザ用のファイル(メタデータ)が置かれます。

    “/var/netatalk/afp_signature.conf”と”/var/netatalk/afp_voluuid.conf”は設定ファイルになりますので、”debian/conffile”に書く必要があるのではないでしょうか?

    たぶん、dpkg –remove/–purgeの時に、”/var/netatalk”の中が空でないと言われて怒られます。

    “debian/postrm”で消す様にしても良いかもしれません。

    また、netatalk 2.xからのupgradeの時は、”/etc/netatalk”に置かれている同名のファイルを”/var/netatalk”にコピーして来た方が良いそうです。コピーしてこなくても、”/var/netatalk”内に自動生成されるので、実質上は問題ありませんが。

    Netatalk 3.xを新規にインストールする場合も、これらのファイルは自動生成されるので不要です。

    /var/netatalk/CNIDは、–removeの時は残しておくべきだと思いますが、–purgeの時も消してしまってよい物かどうか、判断がつきません。ユーザが操作した結果が残っているので、消してしまうと復活できませんので。

    以上、いかがでしょうか? HATさん、何か間違っている事や補足がありましたら、よろしくお願いします。

    • それと、Ubuntu 10.04ではbuildできませんでした…。

      % dpkg-buildpackage -us -uc -rfakeroot -d
      dpkg-buildpackage: set CFLAGS to default value: -g -O2
      dpkg-buildpackage: set CPPFLAGS to default value:
      dpkg-buildpackage: set LDFLAGS to default value: -Wl,-Bsymbolic-functions
      dpkg-buildpackage: set FFLAGS to default value: -g -O2
      dpkg-buildpackage: set CXXFLAGS to default value: -g -O2
      dpkg-buildpackage: source package netatalk
      dpkg-buildpackage: source version 3.0.1-1
      dpkg-buildpackage: source changed by …
      dpkg-buildpackage: host architecture powerpc
      fakeroot debian/rules clean
      dh clean
      dh: Sorry, but 7 is the highest compatibility level supported by this debhelper.
      make: *** [clean] エラー 9
      dpkg-buildpackage: error: fakeroot debian/rules clean gave error exit status 2

    • HAT より:

      公式のDescriptionというものがありまして、本家の冒頭に書いてあります。
      http://netatalk.sourceforge.net/
      http://sourceforge.net/projects/netatalk/

      Netatalk is a freely-available Open Source AFP fileserver. A *NIX/*BSD system running Netatalk is capable of serving many Macintosh clients simultaneously as an AppleShare file server (AFP).

      あと、1行表示用のDescriptionというのもありまして、distrib/initscriptsディレクトリの下の幾つかのファイルに書いてあります。

      AFP fileserver for Macintosh clients

      –enable-fhsオプションは以前間違っていたので私が直しており、一応frankのチェックも通っていますが、未だに自信がないです。そもそもこんなオプションが必要だとも思いませんが。

      gentooの担当者はかなり芸が細かくて、afp_signature.confとafp_voluuid.confを移動してます。参考にどうぞ。
      http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/net-fs/netatalk/netatalk-3.0.1.ebuild?view=markup
      これの106〜117行目に注目。

      • HATさん、コメントありがとうございます。

        /var/netatalk/CNIDはどう扱うべきでしょうか?

        「完全削除」であっても残しておくべきですか?
        ユーザが捜査した結果であるから。

        でも、そのユーザは、netatalkを使わないと判断したのであり、二度とCNIDを必要としないはずなので、/var/netatalk毎、全部消してしまうのが正しいのかも知れません。

        • HAT より:

          それはDebianのルールの話だから私はわからないです。
          netatalkを使わないのなら/var/netatalkは意味をなさないのは事実です。

          • HATさんへ、お返事ありがとうございます。
            HATさんの状況、わかりました。
            私の理解だと、「”–purge”オプションは、インストールしていたパッケージのすべてを消す。」です。
            debianのパッケージング・システムに、postrm(shell script)と言う機能があるので、この中に”/bin/rm -rf /var/netatalk”と書いておけば良さそうです。

    • henrichさんへ、

      それと、私は次のconfigureオプションを使っています。

      DEB_CONFIGURE_EXTRA_FLAGS := \
      –with-shadow –enable-fhs \
      –enable-overwrite \
      –enable-krbV-uam \
      –with-libgcrypt-dir \
      –with-cracklib=/var/cache/cracklib/cracklib_dict \
      –enable-zeroconf \
      –with-init-style=debian

コメントを残す