北側の実習室の40台に Debian 6.0.2.1-amd64 を入れた。LDAP, pam_mount の設定は極めて楽になった。逆にユーザーリストの禁止や、dhcpでのホスト名の取得のための奮闘、勝手にできるディレクトリを抑制など、自動化にさからうことによる手数が増えた。 Clonezilla live にはこちらがかなり慣れて、NFSv4のサーバーを用意したこともあり、ほとんどトラブルなく終わった。
北側の実習室にも授業に使用する40台の実習機がありますが、こちらも今回Squeezeにします。ちょっと遅れました。
Squeezeが安定版になった2011.2.6以降、北側の実習室もSqueezeにすることは懸案でしたがサーバーを交換してからと考えて延び延びになっていました。今回ついに待てなくなり、ユーザーホームをcifsでpammountするシステムのままSqueezeにしました。
Squeezeはさらに更新版が2011年6月25日にリリースされ 6.0.2 になっています。今回はDebian 6.0.2.1-amd64 をネットワークインストールしました。
北側実習機のSqueezeはTestingですが機能がフリーズされたあとにアップグレードしているので、使用者から見るとほとんど変わりません。Gimpのバージョンアップが目立つぐらいでしょう。ただしインストール後の設定についてはかなり改良されているのでもう一度記録をしておくのも意義のあることでしょう。
パッケージの管理にはsynapticを使っている。まずソースリストに contrib,non-free を加えるが今回はメニューから[設定]-[リポジトリ]でGUIでチェックをいれるだけでうまくいった。前回は結局/etc/apt/source.listを編集した記憶がある。
gameを削除 (gnome全体が削除されると警告があるが強行(後述)) OpenOffice.org(今回はDebian製のOOoを入れることにする。今後DebianはLibreOfficeになるのであえてオリジナルOpenOfficeにしない) Blender(3Dモデリング・レンダリングツール) Audacity(デジタルオーディオエディタ) VLC(メディアプレーヤ) Geany(editor/軽量IDE) ghex(GUI Hex editor) KSeg, Maxima(数学) Stellarium(天文) Tkgate(電気回路)
Java (openjdk-6 がおすすめらしいが…sun-java6-jdkで(non-free)) sun-java6-plugin(javaアプレットのため) ruby (現在のところruby1.8が入る) libsdl-ruby(rubyのGUIプログラムのため) g++-4.4 (GNU C++) gcc-4.4 (g++で自動に入る) bsdmainutils(hd:hexdumpのためだがすでに入っている) hexer(CUI Hex editor) IPAフォント(すでにあり) flashplugin-nonfree(flashプラグイン) nautilus-open-terminal(端末の中に開く) libstdc++5, libnspr4(firefoxのプラグイン HTML Validator に必要) ntpdate(時刻同期) firmware-linux-nonfree(ドライバいろいろ) ibus(uim,scimに代わる input method) ibus-anthy(日本語入力システム)
ibusが優先になっているのでそのままでよい
# im-switch -c
で選択する
実行環境はjavaで選択。これはいくつか入っている。
# update-alternatives --list java /usr/bin/gij-4.4 /usr/lib/jvm/java-6-openjdk/jre/bin/java /usr/lib/jvm/java-6-sun/jre/bin/java
優先度が低いがjava-6-sunを選択。
# update-alternatives --config java alternative java (/usr/bin/java を提供) には 3 個の選択肢があります。 選択肢 パス 優先度 状態 ------------------------------------------------------------ * 0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 自動モード 1 /usr/bin/gij-4.4 1044 手動モード 2 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 手動モード 3 /usr/lib/jvm/java-6-sun/jre/bin/java 63 手動モード 現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 3 update-alternatives: /usr/bin/java (java) を提供するために 手動モード で /usr/lib/jvm/java-6-sun/jre/bin/java を使います。
開発環境はjavacで選択。これはひとつしか入っていない
# update-alternatives --list javac /usr/lib/jvm/java-6-sun/bin/javac
KnoppixEduの真似をしてプログラミングのメニューに、エディタと端末を開くだけのスクリプトを入れる。Linuxで Java, C, Perl, Ruby などたくさんのプログラミング言語を使えるということをアピールする。
/usr/local/bin/start-* というスクリプトを作成 /usr/share/apprications/*.desktop を作成 /usr/share/icons/hicolor/48x48/apps/*.png メニューに使うアイコンを格納 # gtk-update-icon-cache /usr/share/icons/hicolor を実行
Firefox, Thunderbird がそれぞれ Iceweasel, Icedove としてパッケージされている。メニュー表記に iconと文字で Firefox, Thunderbird と同じものであることをアピールする。
/usr/share/apprications/*.desktop への書き加え(Name[ja],Icon[ja]など) /usr/share/icons/hicolor/48x48/apps/*.png メニューに使うアイコンを格納 アイコンは今回 /usr/share/pixmaps へ # gtk-update-icon-cache /usr/share/icons/hicolor を実行
ログイン時にユーザーがリストになって表示され選択するインターフェースになっている。前回と同じくこれを排除すべく /etc/gdm3/greeter.gconf-defaults を編集
/apps/gdm/simple-greeter/disable_user_list true
次のログインから有効になる。
前回に引き続きDHCPでホスト名を設定できない。クライアントソフトを入れ替える。
前回のdhcp3というのは今回のisc-dhcpへの移行パッケージだったようだ
/etc/hostname ファイルを削除 network-manager 0.8.1-6+squeeze1 削除 isc-dhcp-client 4.1.1-P1-15+squeeze3 削除 isc-dhcp-common 4.1.1-P1-15+squeeze3 削除 dhcpcd 1:3.2.5-5 インストール dhcp-probe 1.3.0-5 インストールしていない /etc/network/interfaces の allow-hotplug eth0 をそのまま auto eth0 を追加 resolvconf 1.46 一度入れたが現在は削除 hostname.sh を前回は変更しているが今回はそのまま
ノートタイプのPCなど移動した先のdhcpを使う場合にはnetwork-managerは極めて快適。ただhostnameはインストール時に/etc/hostnameに書きこんでこれを使用する。移動しないデスクトップでもこの仕様で問題はない。
ただ、学校での使用では、OSをsave-restoreして40台をクローンにするのが便利。dhcpで各hostに別の名前を割り当てることができなければ、restoreの後にhostnameを設定して回らなければならない。
今回も見落としがないかかなり時間をかけたが、結局 dhcpcd に入れ替えてうまくいった。
今回まだ気になるのは
gamma@vine40:~$ hostname vine40 gamma@vine40:~$ hostname -d st.seiai.ed.jp gamma@vine40:~$ hostname -f vine40.st.seiai.ed.jp gamma@vine40:~$ hostname -i 127.0.1.1 gamma@vine40:~$ dnsdomainname st.seiai.ed.jp gamma@vine40:~$ domainname (none) gamma@vine40:~$ host vine40 vine40.st.seiai.ed.jp has address 10.10.20.40
domainnameはnisのものなので正常。dnsdomainnameが正しければ良い。dnsも引けるが、hostname -i では 127.0.1.1 と答える。これは多分、/etc/hosts の 127.0.1.1 の記述をそのままにしてあるから。
127.0.0.1 localhost.localdomain localhost 127.0.1.1 vine40.st.seiai.ed.jp vine40 ......IPv6が続く....
この 127.0.1.1 が何なのかは不明だが、これを消せば 正常にdhcpから取得したIPアドレスを返すようになる。 ただ、使っているうちに戻っているということもあるかもしれない。 127.0.1.1 でも実害はないのだが。
/etc/default/grub の変更は2箇所
#GRUB_TIMEOUT=5 GRUB_TIMEOUT=3 #GRUB_DISABLE_LINUX_RECOVERY="true" GRUB_DISABLE_LINUX_RECOVERY="true"
変更後 update-grub を実行。
cuiで操作するときに不便と不評の日本語ディレクトリだが、ディレクトリの作成を教えるにもないほうがいい。一般ユーザーユーザーでする対策は検索で出てくるが、管理者レベルの情報がない。
で、そもそも作らないことにする。デスクトップとダウンロードを残す。これも英字になるか試してみる。
# Default settings for user directories # # The values are relative pathnames from the home directory and # will be translated on a per-path-element basis into the users locale DESKTOP=Desktop DOWNLOAD=Downloads #adachi #TEMPLATES=Templates #PUBLICSHARE=Public #DOCUMENTS=Documents #MUSIC=Music #PICTURES=Pictures #VIDEOS=Videos # Another alternative is: #MUSIC=Documents/Music #PICTURES=Documents/Pictures #VIDEOS=Documents/Videos
これで、デスクトップとダウンロードの2つになる。
LANG=C xdg-user-dirs-gtk-update で英字になるが、起動時に日本語に直すか聞いてくる。
[システム]-[設定]-[自動起動するアプリ]でxdg-user-dirs-gtk-updateが入っていて、これが起動時にロケールに合わせて変更するらしい。日本語のものに変えるか古い(LANG=Cの)ままにするか聞いてくる。「次回から表示しない」でほうっておいてくれるのか勝手に直すのかわからんが。
今回はここで時間切れ。
(1)使用するソフトを揃えること(2010/9/10)とほとんど同じ。
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. ## add by adachi for sirver execute script test -d /mnt/sys || mkdir /mnt/sys mount -t nfs jonah:/zhome/vine-rc /mnt/sys cd /mnt/sys if [ -x ./rc.sh ] ; then ./rc.sh date >/tmp/rc-execute.txt echo 'true' >>/tmp/rc-execute.txt chmod 0666 /tmp/rc-execute.txt else date >/tmp/rc-execute.txt echo 'false' >>/tmp/rc-execute.txt chmod 0666 /tmp/rc-execute.txt fi cd - >>/tmp/rc-execute.txt umount /mnt/sys exit 0
これも前回同様、F10を空ける、proxy設定、アイコン表示
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults/ --type string --set /desktop/gnome/interface/menubar_accel F11 gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults/ --type string --set /system/proxy/autoconfig_url http://www.st.seiai.ed.jp/proxy.pac gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults/ --type bool --set /desktop/gnome/interface/menus_have_icons true
ibusが自動で起動しないことが判明。結局、im-switch 再インストールでなおった。iBusを入れたときに im-switch の再設定ができていなかったのだろう。次のバージョンであるWheezyでは im-switch から im-config に変更になった様だ。
/etc/default/ntpdate で忘れ物があった。
# cat /etc/default/ntpdate # The settings in this file are used by the program ntpdate-debian, but not # by the upstream program ntpdate. # Set to "yes" to take the server list from /etc/ntp.conf, from package ntp, # so you only have to keep it in one place. NTPDATE_USE_NTP_CONF=yes # List of NTP servers to use (Separate multiple servers with spaces.) # Not used if NTPDATE_USE_NTP_CONF is yes. NTPSERVERS="jonah.st.seiai.ed.jp" # Additional options to pass to ntpdate NTPOPTIONS=""
avahi-daemon は仮想パッケージgnomeの一部ということで、synapticで削除しようとすると、gnomeもろとも削除されると言われるのでほとんどの場合そのままにしてきた。localだから無効というのも煩わしいし、ただ授業中にネットワーク中のサービスが見つかっても困る。
しかし、gameの削除では必要なものは残った。大事を取ってgnomeの中のgnome-desktop-environmentという仮想パッケージを同時に再インストールしたのだが、gnome-desktop-environmentから外れるsynapticをはじめgame関係以外は残ったのである。
avahi-daemon も game とおなじレベルにあるので gnome-desktop-environment の削除にはならないと思ったのだが、メッセージによると削除される。話が違うぞ。
ここは思い切って削除してみる。結果は、
Commit Log for Fri Sep 9 12:42:57 2011 以下のパッケージが削除されました: avahi-daemon gnome-desktop-environment gnome-user-share libapache2-mod-dnssd libnss-mdns telepathy-salut
なのだが、avahiで通信すると思われるものだけが削除されている。
gnome-desktop-environment が入っているのは気になるが、gnome-coreのようなgnome-desktop-environmentのメンバーは残っているので、OKなのだろう。
LDAP認証は一度 /etc/init.d/nscd を停止またはリスタートすればうまくいく。jonahに登録されたUID alpha,beta,gamma。 pam_mountはほぼ自動で完成。複数ログインしているとシャットダウンに管理者権限が必要になったのを戻す。 40台コピーの前に、udev/rolesを1行削除するのは同じ。 cifs vfs no response for cmd で検索してマウント解除をスムーズにしようとしたがやはりうまくいかない。 shellスクリプトの高度な情報へのリンクも。
libnss-ldap をインストール指定すると libpam-ldap, nscd も自動でインストールされる
libnss-ldap (264-2.2) NSS module for using LDAP as a naming service libpam-ldap (184-8.5) Pluggable Authentication Module for LDAP nscd (2.11.2-10) Embedded GNU C Library: Name Service Cache Daemon
インストール時に対話的に聞いてくる。これでlibnss-ldapとlibpam-ldapが設定される。
以前は対話的設定でうまくいかず、サーバーを host で指定していたが、うまくいかない原因が nscd のキャッシュにあったと考えられる。
local# /etc/init.d/nscd stop
結局サーバーの指定は uri ldap: でOK。対話的設定では uri ldapi:/// で開始されるので、i/をとって入力する。
libnss-ldap.conf
base dc=st,dc=seiai,dc=ed,dc=jp uri ldap://10.5.5.1 ldap_version 3 rootbinddn cn=admin,dc=st,dc=seiai,dc=ed,dc=jp
pam_ldap.conf
base dc=st,dc=seiai,dc=ed,dc=jp uri ldap://10.5.5.1 ldap_version 3 rootbinddn cn=admin,dc=st,dc=seiai,dc=ed,dc=jp pam_password crypt
ldapにアクセスするためのパスワードを保存するファイル
これも対話的な設定の過程で作成される。平文で入っているので、root以外に読み込み権限を与ない(デフォルトでそうなっている)。
$ ls -l /etc/*.secret -rw------- 1 root root 9 2011-09-09 18:48 /etc/libnss-ldap.secret -rw------- 1 root root 9 2011-09-09 18:33 /etc/pam_ldap.secret
nsswitch.confの変更は手動。3箇所にldapと加えるだけ。
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat ldap
group: compat ldap
shadow: compat ldap
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
テストはrootでログインしたまま試すこと。
pam_mount をセットする。
まずパッケージをインストール。libpam-mount と cifs-utils を入れると他は自動で入る。
Commit Log for Sat Sep 10 16:25:05 2011 以下のパッケージがインストールされました: cifs-utils (2:4.5-2) libcryptsetup1 (2:1.1.3-4squeeze2) libhx25 (3.5-2) libpam-mount (2.5-3) samba-common (2:3.5.6~dfsg-3squeeze5) samba-common-bin (2:3.5.6~dfsg-3squeeze5)
pam_mount.conf.xml に加筆する。前回の記録したのとほぼおなじ。
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd"> <!-- See pam_mount.conf(5) for a description. --> <pam_mount> <!-- debug should come before everything else, since this file is still processed in a single pass from top-to-bottom --> <debug enable="0" /> <!-- Volume definitions --> <volume fstype="cifs" server="jonah" path="%(USER)" mountpoint="~" options="nobrl,dir_mode=0700,file_mode=0600"> <not> <or> <user>root</user> <user>beta</user> <user>gamma</user> </or> </not> </volume> <!-- pam_mount parameters: General tunables --> <!-- <luserconf name=".pam_mount.conf.xml" /> --> <!-- Note that commenting out mntoptions will give you the defaults. You will need to explicitly initialize it with the empty string to reset the defaults to nothing. --> <mntoptions allow="nosuid,nodev,loop,encryption,fsck,nonempty,allow_root,allow_other" /> <!-- <mntoptions deny="suid,dev" /> <mntoptions allow="*" /> <mntoptions deny="*" /> --> <mntoptions require="nosuid,nodev" /> <logout wait="0" hup="0" term="0" kill="0" /> <!-- pam_mount parameters: Volume-related --> <mkmountpoint enable="1" remove="true" /> </pam_mount>
/etc/pam.d/common-auth も前回と同様デフォルトのまま変更しなくても良い
# # /etc/pam.d/common-auth - authentication settings common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of the authentication modules that define # the central authentication scheme for use on the system # (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the # traditional Unix authentication mechanisms. # # As of pam 1.0.1-6, this file is managed by pam-auth-update by default. # To take advantage of this, it is recommended that you configure any # local modules either before or after the default block, and use # pam-auth-update to manage selection of other modules. See # pam-auth-update(8) for details. # here are the per-package modules (the "Primary" block) auth [success=2 default=ignore] pam_unix.so nullok_secure auth [success=1 default=ignore] pam_ldap.so use_first_pass # here's the fallback if no module succeeds auth requisite pam_deny.so # prime the stack with a positive return value if there isn't one already; # this avoids us returning an error just because nothing sets a success code # since the modules above will each just jump around auth required pam_permit.so # and here are more per-package modules (the "Additional" block) auth optional pam_mount.so # end of pam-auth-update config
Squeezeからこうなった。一般的には正しい設計だが、授業用ではログアウトしないで帰る生徒のコンピュータを次の生徒がshutdownできないのは不便だ。
その上複数のGUI端末を使っていた場合もログアウトとシャットダウンを同時にしようとすると管理者パスワードを要求することがある。先に全部ログアウトしてログイン画面からシャットダウンを選ぶ必要がある。困ったものだ。
いろいろ検索したところ、
org.freedesktop.consolekit.policyに書きこむ方法が http://www.len.ro/2009/11/karmic-various-tricks/ にでていた。
/usr/share/polkit-1/actions/org.freedesktop.consolekit.policy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
<!--
Policy definitions for ConsoleKit
-->
<policyconfig>
<action id="org.freedesktop.consolekit.system.stop">
<description>Stop the system</description>
<message>System policy prevents stopping the system</message>
<defaults>
<allow_inactive>no</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
</action>
<action id="org.freedesktop.consolekit.system.stop-multiple-users">
<description>Stop the system when multiple users are logged in</description>
<message>System policy prevents stopping the system when other users are logged in</message>
<defaults>
<allow_inactive>no</allow_inactive>
<!-- <allow_active>auth_admin_keep</allow_active> -->
<allow_active>yes</allow_active>
</defaults>
</action>
<action id="org.freedesktop.consolekit.system.restart">
<description>Restart the system</description>
<message>System policy prevents restarting the system</message>
<defaults>
<allow_inactive>no</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
</action>
<action id="org.freedesktop.consolekit.system.restart-multiple-users">
<description>Restart the system when multiple users are logged in</description>
<message>System policy prevents restarting the system when other users are logged in</message>
<defaults>
<allow_inactive>no</allow_inactive>
<!-- <allow_active>auth_admin_keep</allow_active> -->
<allow_active>yes</allow_active>
</defaults>
</action>
</policyconfig>
これは書きこめばすぐに効果が出る。
このディレクトリ内のファイル数は以前より少なくなった
ll /etc/udev/rules.d/
合計 8 -rw-r--r-- 1 root root 416 2011-08-23 13:23 70-persistent-cd.rules -rw-r--r-- 1 root root 445 2011-08-23 13:23 70-persistent-net.rules lrwxrwxrwx 1 root root 15 2011-08-23 15:30 z60_hdparm.rules -> ../hdparm.rules
でも,問題のnet_rulesは残っている。
/etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key. # PCI device 0x1106:0x3065 (via-rhine) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:01:29:xx:xx:xx", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
やはり最後の1行を削除する
clonezilla-live-1.2.9-19-amd64 を使用。パーティションイメージの保存先はNFSv4サーバーとして構築した別のサーバーなのでver4問題はおこらない。ディレクトリ名も合わせたことで文字入力はサーバーのIPアドレスを1文字変えるだけ。Clonezillaは発見したDHCPサーバーのIPアドレスを仮に採用する。
To RAM. BootMediaCanBeRemovedLater(プログラムをメモリに読み込みUSBを抜いて別のPCの起動に進める方法)をとったので、2つのUSBメモリで足りた。対話的処理はわかりやすいが結構時間がかかり、同時リストアが5台が限度。6台目の設定の最中に1台目のリストアが終了してしまう。
Clonezilla live はリストア開始の直前にコマンドのオプションを表示し、そのコマンドを/tmpにも保存するという。これを使って自動運転を考えたが、最初からシェルに入るとマウントが済んでいないし、ネットワークも立ち上がっていない。マウントもよく見るとコマンドオプションが表示されているので、ネットワークインターフェースの起動がわかればスクリプトでできるかもしれない。
かつてのpartimageはKnoppixだったので起動後に自動実行するファイルにマウントとリストアコマンドを書いておけばよかった。もう少し簡単にならないものか。
clonezillaはイメージをUSB中に持つリカバリUSBを作ることができる。これは優れものだ。しかし対話操作に追われて作る時間がなかった。サーバーからのリストアは帯域の問題があるので併用が望ましい。
17:10にリストアを始めて21時に終了。3時間50分。41台なので1台5分程度でやったことになる。
データ量を概算するとイメージが2.5Gとすれば
2.5GB×41台÷(100Mb÷8)=8200s 8200÷3600=2.3時間
100Mbitのネットワークでは2時間はかかるということ。この点でもリカバリUSBを使うのはスピードアップに資するはずだ。なによりキー操作が少なければ待ち時間を有効に利用できる。ここも大切。
ここで過去の記録は調査をしたら前回(昨年)はUSBが使えず、CDを使ったがCDドライブの老朽化で時間を食い4時間30分かかっていた。購入のままのUSBのフォーマットは使えないのかもしれない。パーティションわけをしない場合も領域確保をしなおさないとだめらしい。今年もそのようなことがあった。
USB起動しない機械が2台ほどあって、BIOSを調べたところ、USB Emuration OFF になっていた。DOSにUSBデバイスのサポートをするかのスイッチとあるが、boot中にUSBが見えなければそこから起動できない道理。探しにくい原因だった。
全機USB起動したことがあるはずだが、なぜこうなったかは不明。