4 debconf

*2      
_________________________________________________________________________________________________________________________________________________

4.1 はじめに

debconf とはDebian においてなうためのフレムワおよびそれをしたですそも そもはDebian Project Leader Wichert Akkerman 発案configuration database framework *3 であ debconf それにづく Joey Hess によるです

のうちジメンテナデフルトめにくいものつまりシステムによされるようなものは メンテナスクリプト*4 プロンプトをだししたづいてイル生成するようにしていましたこれはこれで *5 のですが によ*6 やりかたがてしまいストリビとしてのけてしまうというがありまし またインストプグレ必要になてしまうため インストプグレコンソ離れているわけにはいかないというもはらんでい ま す

そこでされたのが debconf ですdebconf 使うことでしてうことができるようになり ます

4.2 debconf 使ている

apt-utils インストしておくと apt-extracttemplates 使ダウンロしてインストをする *7 debconf 使をおこなうことができるようになりますこのdebconf debconf/frontend フロン トエンド*8 つかとのやりとりがおこなわれますまたには優先(priority) *9がつけ られておりdebconf/priority より優先いものだけがフロントエンドしてとやりとりをおこなわれるよ うになります

またインストしたdpkg-reconfigure をしなおすことができますdpkg-reconfigure debconf/priority にか かわらず優先(low)*10 すなわちすべてのをやりなおすようになています

また現在その定値がどうなているかをりたいdebconf-show コマンド使 ます

 # debconf-show debconf
 * debconf/priority: critical
 * debconf/frontend: Dialog

4.3 debconf 裏側

apt-get ダウンロしてくると/etc/apt/apt.conf.d/70debconf というイルにより dpkg-preconfigure -apt されるようになります

// Pre-configure all packages with debconf before they are installed.
// If you don’t like it, comment it out.
DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt || true";};

dpkg-preconfigure ではapt-utils apt-extracttempaltes 使ているためapt-utils インストされていないと debconf はこのタイミングではおこなわれません

dpkg-preconfigure -apt していまダウンロしたリストがわたされるのでそれらから template をと りだして config スクリプトをおこないます

的にはconfig スクリプト*13 postinst スクリプトでそれをみだしてイルなどにきだすというをおこなうことになり ます

なおdebconf タベregistry として使 *14 debconf タベするのはメンテナスクリプトだけにしておく必要がありますまたdebconf イルされたその上書きすることなく反映する必要があります






ルコマンド のむき 使場所




db_version ”2.0” ンネゴシエ




db_capb multiselect パビリテネゴシエ




db_title タイトル タイトル文字スクリプトconfig




db_stop debconf postinst, postrm




db_input プライオリテへのテンプレDB config




db_go config




db_get のとりだし DB スクリプト postinst




db_set 名値 スクリプトDB config




db_reset テンプレDB




db_subst 名鍵テンプレ (スクリプト)config




db_fget 名フラグ フラグのとりだし DB スクリプト




db_fset 名フラグフラグスクリプトDB




db_metaget 名フルド ルドのとりだし テンプレスクリプト




db_register テンプレ生成 テンプレテンプレ config




db_unregister テンプレ




db_purge タベからテンプレDB postrm





1: debconf コマンド

debconf ではメンテナスクリプトdebconf タベのやりとりのプロトコルめていますこうすることで フロントエンドをかえたりクエンドタベしたりすることができるようになているわけ です

4.3.1 テンプレ

debconf では templates イルテンプレそのテンプレられるして debconf プロトコル 使したりみだしたりしていますテンプレするとそれと同名のがつくられるのでほとんどの ではテンプレ名と同名の使うことがほとんどですが同じようなをいくつかちたいなどではテンプ から複数生成するがあります

テンプレdebian/templates イルもしくは debian/.templates イル ます

Template:  名前
Type: 
Default:  デフルト
Description:  短かい
  長い

名前としては的には/という文字使います名がプレフクスについているので 他のテンプレすることはありませんもし複数有するようなテンプレshare/ 有名/のような名前をつかうことが推奨されています

としてはのようなものがあります






string

文字



boolean

true false



select

Choices:されているから(“, ” )



multiselect

select 複数べる



note

Description:するだけとしてもられる



text

Description:する



password

パスワ




2: テンプレType

debconf 使翻訳するdebconf-gettextize 使debian/po/レクトリ以下国語po イルけるようにをします

 % debconf-gettextize templates

  To complete conversion, you must:
    a. Check that new templates files contain all the localized fields
    b. Add po-debconf to Build-Depends or Build-Depends-Indep in debian/control
    c. Remove obsolete files:
         templates.old
    d. Edit debian/rules to generate the localized templates file, either
       with dh\_installdebconf or directly with po2debconf

このように templates イル指示して debconf-gettextize するとtemplates イル.old サフクス がついたものにされしい templates イルられますしい templates イル翻訳すべき ルド“_” プレフクスとしてつくようになりますそして po レクトリPOTFILES.in templates.pot 生成されます翻訳するtemplates.pot ロケ.po コピして gettext 翻訳するのと同じようにして翻訳していきますマルチパ複数templates イルがある それをすべて debconf-gettextize 指示しますtemplates.old してしまてかまいま せん

このようにしてられる翻訳deb にちんととりこめるようにするにはまず debian/control Build-Depends(Build-Depends-Indep) po-debconf します

debian/rules binary-archbinary-indep dh_installdebconf dh_installdeb 直前くらいにぶよう にしておけばdh_installdebconf がしかるべきをしてくれますcdbs 使ているinclude /usr/share/cdbs/1/rules/debhelper.mk すればdh_installdebconf してくれますまた Depends: $misc:Depends をいれるのを忘れないようにしましdh_installdebconf がしかるべき存関してくれ ます

L10N バグ (po 翻訳) けとそのイルdebian/po レクトリにしかるべき名前 (ロケ.po) だけで OK です

4.3.2 config スクリプト

config スクリプトdeb インストされる *15 されますconfig スクリプトでやるべきことは的には以下のようなになります

#!/bin/sh -e
# sample config
#
. /usr/share/debconf/confmodule
db_version 2.0
db_capb multiselect
if [ -f /etc/default/mypackage ]; then
  . /etc/default/mypackage
  db_set mypackage/foo "$FOOR"
  db_set mypackage/bar "$BAR"
  db_go
fi

db_title "My Package Configuration"
db_input low mypackage/foo || true
db_input low mypackage/bar || true
db_go

config スクリプト使debconf コマンド以下のとおり

debconf db_input したそのseen フラグtrue しますこのフラグするには db_fset 使います

db_fset   seen false

デフルトしたいdb_reset 使いますこれでテンプレされていたデフルトすことができ ます

db_reset 

的 に は テ ン プ レ 同 名 の 使 う こ と で 足 り る 多 い で す が 必 要 が あ れ ば テ ン プ レ か ら しい たりすることができますをつくたりけしたりするdb_registerdb_unregister 使 ます

db_register  テンプレ 
db_unregister 

またたにつくえることが多いでし *17 のために db_subst というのが使えますテンプレ${文字}というのをめこんでおいてのように db_subst すると${文字}部分文字きかえられます

Template: mypackage/baz
...
Description: ${文字}  ?
 ${文字}してください
 db_register mypackage/baz mypackage/baz2
 db_subst    文字  文字
...
Description:  文字  ?
  文字してください
4.3.3 postinst スクリプト

postinst スクリプト*18 debconf からをよみだしてイル生成することが仕事となりますdebconf では postinst echo read コマンドなどをつかをいれていたのをここでは debconf からとてくるようにするわけ です

#!/bin/sh -e
#  postinst
. /usr/share/debconf/confmodule

case "$1" in
 configure)
   db_get mypackage/foo
   FOO="$RET"
   db_get mypackage/bar
   BAR="$RET"
   if [ -f /etc/default/mypackage ]; then
     sed -e ’s/^FOO=.*/FOO="’"$FOO"’"/’ \
 -e ’s/^BAR=.*/BAR="’"$BAR"’"/’
< /etc/default/mypackage > /etc/default/mypackage.dpkg-tmp
     if cmp -s /etc/default/mypackage /etc/default/mypackage.dpkg-tmp; then
   rm -f /etc/default/mypackage.dpkg-tmp
     else
   mv -f /etc/default/mypackage /etc/default/mypackage.dpkg-old
   mv /etc/default/mypackage.dpkg-tmp /etc/default/mypackage
     fi
   else
     cat <<DEFAULT > /etc/default/mypackage
# mypackage configuration file
# see /usr/share/doc/mypackage/README.Debian.
# this file is automatically managed by debconf.
#
# FOO="..."
#  foo is blah blah
FOO="$FOO"
#
# BAR="..."
#  bar is blah blha
BAR="$BAR"
# END OF FILE
DEFAULT
   fi
   ;;
 abort-upgrade|abort-remove|abort-deconfigure)
   ;;
 *)
   echo "postinst called with unknown argument ‘$1’" >&2
   exit 1
   ;;
esac
db_stop
#DEBHELPER#
exit 0

config スクリプト使debconf コマンド以下のとおり

postinst ではこのにあるように存のイルをできるだけしつつされた定値だけをいれかえるよう にすることがされています

4.3.4 postrm スクリプト

postrm スクリプトではこのdebconf debconf タベからしておく必要があり ます

#!/bin/sh -e
#

case "$1" in
 purse
   . /usr/share/debconf/confmodule
   db_purge
   db_stop
   ;;
 remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disapper)
   ;;
 *)
   echo "$0 called with unknown argument ‘$1’" >&2
   exit 0
   ;;
esac
#DEBHELPER#
4.3.5 debconf プロトコルのやりとり

debconf confmodule することでfrontend exec していますそのconfmodule びだした script open2 動して db_ コマンドfrontend とのにしてをおこなています

fd=3 コマンドするとfrontend プログラム釈実されがかえてきますそのスクリプト標準 与えられるので read みとスペコマンド了コスペ$RET 納されるとなり ます

スクリプトがおわると frontend はそれをしてタベして了となります

PIC

4.4 debconf タベ

debconf したはどこにあるのでしうか? この/etc/debconf.conf されています

デフルトでは /var/cache/debconf のようなイルとして納されています




イル



templates.dat

templates



config.dat



password.dat

パスワドデ




4: debconf タベ

debconf タベdebconf-get-selections 使うとダンプすることができ ますこのdebconf-set-selections としてすとすることができます *19

debconf-get-selections –installer debian-installer 使debconf タベをとりだすことができ ます

その他に debconf-copydb 使うことでタベスフイルコピすることができます

4.5 debconf 使ているスクリプトデバ

debconf 使てるスクリプトデバ単ではありませんしかしDEBCONF_DEBUG してスクリ プトすればいい多いでし

 # DEBCONF_DEBUG=’.*’ /var/lib/dpkg/info/.postinst configure  最後された

これでするdebconf 動きをうことができますなお単にするために dpkg-reconfigure debconf debconf フロントエンドReadline などをにしておいたがいいでし

DEBCONF_DEBUG=’.*’ というのは DEBCONF_DEBUG=userDEBCONF_DEBUG=developer DEBCONF_DEBUG=db すべてをしたのと同じ味になります

debconf-communicate 使うとdebconf タベ直接やりとりすることができます標準からコマンド与え ると標準をかえしますコマンドdebconf ルモジでつかうコマンドから db_ をとりのぞいたものに なることにしましえばのように使います

 # echo ’get debconf/priority’ | debconf-communicate
 0 critical

0 *20 critical debconf/priority *21 味します

4.6 おわりに

文書では Debian ている debconf についてしました

エ リ ア Debian 2005_________________________________________________________________

PIC