※実際には12/24のネタです。
■「apt-get upgrade」したら、oracle-xeのinitスクリプトでWarningが出た。
というか導入時にも出てました。。。
insserv: warning: script 'K01oracle-xe' missing LSB tags and overrides
insserv: warning: script 'oracle-xe' missing LSB tags and overrides
参考:Debian init.d script の LSB tag
http://is.ec.kagawa-u.ac.jp/wp/archives/430
■以下の両方、というよりdebian系を使っている人が対象です。
Debian LennyにOracle11g Express Editionを導入する
http://ameblo.jp/labunix/entry-11109590013.html
Debian SquuezeにもOracle11g Express Editionを入れてみた。
http://ameblo.jp/labunix/entry-11109670450.html
■実質1箇所だけ修正すれば良い。
$ ls -l /etc/init.d/oracle-xe | cut -c 47-
/etc/init.d/oracle-xe
$ ls -l /etc/rc*/K01oracle-xe | cut -c 44-
/etc/rc0.d/K01oracle-xe -> ../init.d/oracle-xe
/etc/rc1.d/K01oracle-xe -> ../init.d/oracle-xe
/etc/rc6.d/K01oracle-xe -> ../init.d/oracle-xe
■一行目にbashを使う記述がある。
$ sudo head -1 /etc/init.d/oracle-xe
■そんな記述があるのはoracle-xeだけだったw。
$ for list in /etc/init.d/*;do grep bash "$list" > /dev/null 2>&1 && echo "$list";done
/etc/init.d/oracle-xe
■PATH変数指定が必要な、cronをサンプルに見てみる
※雛形は、「/etc/init.d/skeleton」にある。
$ head -17 /etc/init.d/cron
■なるほど。chkconfigでcronとoracle-xeの起動リストをチェック
$ sudo chkconfig --list cron oracle-xe
cron 0:off 1:off 2:on 3:on 4:on 5:on 6:off
oracle-xe 0:off 1:off 2:on 3:on 4:on 5:on 6:off
■各変数の意味はdebianの公式ページにあった。
参考:How to LSBize an Init Script
http://wiki.debian.org/LSBInitScripts
■以下にもありました。
参考:Oracle 11g XEをUbuntuにインストール
http://blog.liris.org/2011/09/oracle-11g-xeubuntu.html
■というわけで以下のように修正
$ sudo head -13 /etc/init.d/oracle-xe
■今後は「update-rc.d」では無く、「insserv」を使うとの事なので、
以下のようにします。
$ sudo /sbin/insserv -v oracle-xe
insserv: creating .depend.boot
insserv: creating .depend.start
insserv: creating .depend.stop
■おまけ
コメント内には、「SS KK」が「80 05」となってますが、これはrpm用です。
squeezeでは「K01」「S18」、lennyでは「K01」「S19」となっています。
debianの場合は自動設定されます。(手動設定はしない方がよさそうです)
$ sudo grep chkconfig /etc/init.d/oracle-xe
■debian系の「update-rc.d/insserv」について
参考:Dependency based boot sequence
http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot
★squeeze(update-rc.d)
$ ls /etc/rc*/S*oracle-xe
/etc/rc2.d/S18oracle-xe /etc/rc4.d/S18oracle-xe
/etc/rc3.d/S18oracle-xe /etc/rc5.d/S18oracle-xe
$ sudo update-rc.d oracle-xe defaults 18 01
update-rc.d: using dependency based boot sequencing
★lenny(update-rc.d)
$ ls /etc/rc*/S*oracle-xe
/etc/rc2.d/S19oracle-xe /etc/rc4.d/S19oracle-xe
/etc/rc3.d/S19oracle-xe /etc/rc5.d/S19oracle-xe
$ sudo update-rc.d oracle-xe defaults 19 01
System startup links for /etc/init.d/oracle-xe already exist.
★squeeze(insserv)
$ sudo /sbin/insserv -v oracle-xe
insserv: creating .depend.boot
insserv: creating .depend.start
insserv: creating .depend.stop
★lenny(insserv)
$ sudo /sbin/insserv oracle-xe
insserv: creating .depend.boot
insserv: creating .depend.start
insserv: creating .depend.stop
$ sudo /sbin/insserv -v oracle-xe 2>&1 | grep warning
insserv: warning: current start runlevel(s) (0) of script `halt' overwrites defaults (empty).
insserv: warning: current start runlevel(s) (0 6) of script `umountroot' overwrites defaults (empty).
insserv: warning: current start runlevel(s) (0 6) of script `sendsigs' overwrites defaults (empty).
insserv: warning: current start runlevel(s) (0 6) of script `umountfs' overwrites defaults (empty).
insserv: warning: current start runlevel(s) (6) of script `reboot' overwrites defaults (empty).
insserv: warning: current start runlevel(s) (0 6) of script `umountnfs.sh' overwrites defaults (empty).
■lennyについては上記の警告通り、空だった。
$ echo "halt umountroot sendsigs umountfs reboot umountnfs.sh" | \
for list in `xargs`;do grep Default-Start /etc/init.d/"$list";done | uniq -c
6
■cronの場合は以下のようになっている
$ grep Default-Start /etc/init.d/cron
■chkconfig で見てみると。。。
$ echo "halt umountroot sendsigs umountfs reboot umountnfs.sh" | \
for list in `xargs`;do sudo chkconfig --list "$list";done | \
sed s/"[0-6]:off"//g
halt 0:on
umountroot 0:on
sendsigs 0:on
umountfs 0:on
reboot
umountnfs.sh 0:on
※試しにhaltスクリプトを「Default-Start:0」とすると、Warningが消えます。
修正は不要ですので、無視します。
■ソースを探る。
alianで変換したrpmパッケージなので、debian用のスクリプトが無いが、
debian がポリシーに沿って自動的に割り当てているものなので
変更する必要は無いようだ。
★ コメントにある「# chkconfig: 2345 80 05」を読み込んでいない。
$ for list in postinst prerm ;do echo -n "$list :" ;grep chkconfig "$list";done
postinst : /sbin/chkconfig --add oracle-xe
prerm : /sbin/chkconfig --del oracle-xe
※debパッケージからのファイルの取得方法は以下の通り
$ ar -x oracle-xe_11.2.0-2_amd64.deb
$ tar zxvf control.tar.gz
★以下の通り、「/etc/SuSE-release」のようなdebian向けのスクリプトが無い。
$ sudo grep -A 1 -B 7 chkconfig postinst
if [ -f /etc/SuSE-release ]
then
cp -f /u01/app/oracle/product/11.2.0/xe/config/scripts/oracle-xe.sles /etc/init.d/oracle-xe
/usr/lib/lsb/install_initd /etc/init.d/oracle-xe > /dev/null 2>&1
/sbin/insserv /etc/init.d/oracle-xe > /dev/null 2>&1
/sbin/SuSEconfig > /dev/null 2>&1
else
/sbin/chkconfig --add oracle-xe
fi
$ sudo grep -B 5 -A 1 chkconfig prerm
if [ -f /etc/SuSE-release ]
then
/usr/lib/lsb/remove_initd /etc/init.d/oracle-xe > /dev/null 2>&1
/sbin/SuSEconfig > /dev/null 2>&1
else
/sbin/chkconfig --del oracle-xe
fi