[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:27583] Re: 起動スクリプトの変更



佐野@浜松です。

In <200103231053.TAA07155@xxxxxxxxxxxxxxxxx>,
  on "Fri, 23 Mar 2001 19:53:09 +0900',
   with "Re: 起動スクリプトの変更",
 mizotec <mizotec@xxxxxxxxx> さん wrote:

> Debian ポリシーマニュアルからは、 設定扱いでないという記述を見つけること
> ができませんでした。というか「設定」の意味がよくわかりません。

えーと例えば dpkg -s kon2 とすると

Conffiles:
 /etc/kon.cfg 80d81512e4662929e5a91da4231a91ed

という表示が出てくるはずです。

前のメールで私が「設定ファイル」と書いていたのは、この conffiles の
つもりでした。

 conffiles については、例えば potato-jp の

 packaging-manual-ja (version 3.1.1.1.1, 2000-01-09) だと

  - 9 設定ファイルの取り扱い
      9.1 dpkg による設定ファイルの自動操作
      9.2 管理スクリプトによる設定の取扱い 

のあたり、特に 9.1 の中に書かれています。

他には、potato の debian-policy (version 3.1.1.1, 1999-11-22) だと

 "4.7 Configuration files"

の箇所ですね。

たぶん

 http://www.debian.or.jp/Documents/debian-policy-ja/policy.ja.html/index.html

で「バージョン 3.2.1.0, 2000-09-27」な debian-policy の日本語訳
 (これもかねこさんによる翻訳) を読めるんじゃないかと思うんですが、
これにも

  4.7 設定ファイル

として対応する説明があります。

ああ、そうか。この訳だと configuration files が「設定ファイル」で
 conffiles はそのまま (つまり「設定ファイル」ではない) になって
いますね。そうすると私の使った「設定ファイル」という用語が適切で
なかったのかな。

> 設定ファイルではあると思います。

「システムの挙動に影響を与える」という意味ではそうですね。

ただし conffiles には「すべきでない」と規定されてます。

最新の policy だと

  10.3.5 Notes

  Do not include the /etc/rcn.d/* symbolic links in the .deb file system archive!
  This will cause problems! You must create them with update-rc.d, as above.

  Do not include the /etc/rcn.d/* symbolic links in dpkg's conffiles list! This
  will cause problems! You should, however, treat the /etc/init.d scripts as
  configuration files, either by marking them as conffiles or managing them
  correctly in the maintainer scripts (see Configuration files, Section 11.7).
  (This is important since we want to give the local system administrator the
  chance to adapt the scripts to the local system--e.g., to disable a service
  without de-installing the package, or to specify some special command line
  options when starting a service--while making sure her changes aren't lost
  during the next package upgrade.)

また potato 版の policy-ja だと

  3.3.5 付記

  /etc/rcn.d 内のシンボリックリンクを .deb アーカイヴに含めることは問題を
  生ずるため、してはなりません。上記にあるように、その場合には update-rc.d を
  使わなければいけません。

  /etc/rcn.d 内のシンボリックリンクを dpkgの conffiles リストに含めることは
  問題を生ずるため、してはなりません。しかし、/etc/init.d スクリプトは設定
  ファイルとして扱うべきです。そのためには conffile としてマークし、
  メンテナスクリプト (設定ファイル, Section 4.7参照) の中で適切に扱うように
  してください (このことは、ローカルシステムの管理者が、自分達のシステムに
  あわせたスクリプトの変更ができるようにしておく (例えば、パッケージを削除
  すること無くサービスを停止するとか、サービス開始時に特殊なコマンドライン
  オプションを指定したりする場合、またその変更がパッケージのアップグレードの
  際に失われないようにする) ために重要なことです)。

と書いてあります。

つまり /etc/rcN.d 以下のリンクについては conffiles に含まれないため
 (この理由は file-rc を使う場合があるから) パッケージのアップグレード
によって設定が変更される可能性もあるが、/etc/init.d/ 以下のスクリプト
については conffiles とすることが推奨されているのでローカルな変更が
保存される可能性も高い、ということです。

> また、パッケージをアップグレードする際にも、rc*.dの設定が保存される

>  たぶん、postinstでは次の一行のみだと思うのです。
> >  update-rc.d package defaults >/dev/null
>  この場合、リンクはそのまま残ります。
>  postinstで 一度リンクを削除するのでしょうか?

 potato のパッケージだと util-linux の postinst が hwclock について
そういう対処をしてるみたいですね。

あと netbase もバージョン依存でそういう動作をする場合があるみたい。

>  ランレベルでの起動・停止を変更するのに、/etc/init.d/の起動スクリプト
> を変更するのは、なんか落ち着きません。ランレベルに関することは、
> /etc/rc*.d/に記述したい気があります。

本来はそのほうが良いだろうと思います。ただ、過去のパッケージのバグに
対処するために postinst で update-rc.d -f <package> remove してる
パッケージも無視できるほど少なくはないようです。

要するに美しさを取るか安全策を取るか、ですね。
たいていの場合は /etc/rcN.d 以下のリンクだけを直接いじる方法でも
問題無いかもしれません。

> #起動スクリプトを変えるほど使いこんでいないからかも知れません。
>  しかし、アップグレード時に、何か変更したことに気づかされるのは、
> いいかも知れません。
> #比較ができなければ、思いだすのは大変かな?

 conffiles は質問に Y と答えて新しいファイルと入れ替えた場合も、
その逆に N と答えて入れ替えなかった場合も、どちらも新旧両方の
ファイルが残ります。Y と答えた場合は古いファイルが <filename>.dpkg-old
 N と答えば場合は新しいファイルが <filename>.dpkg-new として
名前を変更されます。

たいていの場合、それほど大幅に変更されることはあまり無いので、
diff -u でどこが変更されたか調べてみると、自分が行なった変更と
バージョンの更新によって変更された箇所が両方わかるでしょう。

オプションの変更など /etc/init.d/ 以下のスクリプトをいじる機会が
けっこうあると、いちいちリンクをいじるよりスクリプトを編集して
しまうほうが楽ということも言えます。

S にしろ K にしろスクリプトが起動されるのは同じ (引数が違うだけ)
なので起動スクリプトをいじればどちらの方向にも制御できますし。

-- 
     # (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
    <kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)