85 関西 Debian 勉強会資料
関西 Debian 勉強会担当者 佐々木・倉敷・のがた・かわだ・八津尾
2014 6 22
85 関西 Debian 勉強会 2014 6
1 Introduction
Debian JP
関西 Debian 勉強会は Debian GNU/Linux のさまざまなトピック (新しいパッケージ、Debian 特有の機能の仕組、
Debian 界隈で起こった出来事、などなど)について話し合う会です
目的として次の三つを考えています
ML や掲示板ではなく、直接顔を合わせる事での情報交換の促進
定期的に集まれる場所
資料の作成
それでは、楽しい一時をお過ごしください。
1
関西Debian 勉強会
目次
1 Introduction 1
2 最近の Debian 関係のイベント報告 3
3 事前課題 5
4 Debian での systemd とのつきあい方 8
5 Linux のドライバメンテナになった体験記 15
6 もくもくの会 20
7 今後の予定 21
8 メモ 22
2
85 関西 Debian 勉強会 2014 6
2 最近のDebian関係のイベン
ト報告
Debian JP
2.1 84 回関西 Debian 勉強会
84 回目の関西 Debian 勉強会は 5 25 () に、福島区民センターで行なわれました。
もくもくの会中心の開催でしたが、キーサイン、systemd の話しが話題にあがりました。今回はその続きという感
じで systemd のお話しになります
2.2 114 回東京エリア Debian 勉強会
114 回目エリ Debian 会は 6 14 () に株会社ウェア・エニック 会議れま
した。
吉田さんによる「GPG 秘密鍵取り扱い方法の提案」ともくもくの会の形式で行なわれました。
みなさん悩みどころの GPG 秘密鍵の扱いをどうするかについて、このセッションでは GPG 秘密鍵 RAID5
ように複数のファイルとパリティに分割して管理するアイデアが紹介されています。面白い方法だと思いますのでぜ
ひ資料に目を通してみてください。
2.3 Debian Project
2.3.1 MATE 1.8
MATE Packaging Team より「MATE 1.8 has now fully arrived in Debian
*
1
MATE 1.8 Debian 追加
されしたMATE GNOME2 フォーしたトップジェク
GNOME3 を好ましいと思っていない方にとっては好評で、よほどうれしかったのか 10 分も経たないうちに Norbert
Preining さんから
*big*big*big* thanks for all your work, it is very very much appreciated!
と感謝のメールが飛んでいました。
すでに、unstable だけでなく testingwheezy-backports にもパッケージが用意されていますので試してみたい方
は次のメタパッケージをインストールしてみてください。
$ sudo apt-get install mate-desktop-environment
*
1
https://lists.debian.org/debian-devel/2014/06/msg00041.html
3
2.3.2 Debian 6 “squeeze” LTS
Debian Project から「Debian 6 debuts its long term support period
*
2
Debian 初とな LTS (Long Term
Support) Debian GNU/Linux 6.0 “squeeze” に提供しますとアナウンスがありました。このサポートは 2016
2 月まで続けられる予定です
LTS を利用してみようと思われる方は「How to use the updates from LTS
*
3
によく目を通してから利用してく
ださい。全アーキテクチャ、全パッケージが LTS サポートの対象ではありませんので十分に注意してください。どの
パッケージが LTS のサポートの対象外となるかは debian-security-support パッケージを使って確認することができ
ます
2.3.3 Berkeley DB
New project goal: Get rid of Berkeley DB (post jessie)
*
4
Berkeley DB LMDB
。ちょうに「Berkeley DB 6.0 license change to
AGPLv3
*
5
なった AGPLv3 。こ Berkeley DB 6.0
Debian のリポジトリに入っていません。
*
6
先月も Ghostscript AGPL にリライセンスされた話題がありましたが、ライセンス変更の問題は悩ましいです
*
2
https://lists.debian.org/debian-announce/2014/msg00004.html
*
3
lhttps://wiki.debian.org/LTS/Using
*
4
https://lists.debian.org/debian-devel/2014/06/msg00328.html
*
5
https://lists.debian.org/debian-devel/2013/07/msg00031.html
*
6
バージョン 6.0.19 experimental に入ったことがあるのですが、その後 5.3.21 に戻されました。
4
85 関西 Debian 勉強会 2014 6
3 事前課題
Debian JP
今回の課題は以下の通りです
1. もくもくの会で行なう作業、質問などの課題を用意して教えてください。(電源とネットワーク (WiMAX
など) はありますが、それ以外の作業に必要な環境はご用意ください。)
2. ( 84 ) の勉加さ、前題がなった教え
さい。
3. LT(ライトニングトーク) 歓迎です。何かお話したい方はタイトルを下さい。
4. Debian Init systemd 。仮
unstable をお使方は systemd-sysv パッケーを導する sysvinit-core replace れて Init
して systemd が動作するようになります
参加者の皆さんの解答は以下の通りです:
3.1 かわだてつたろう
1. uim-skk を使用しているのですが、
chromium titanpad にかな入力できない
xmonad+gnucache でかな入力できない
のをなんとかしたい
3.2 佐々木洋平
申し込みわすれてたわー。
1. jekyll の依存が newqueue から unstable に落ちたので、ようやく new upstream upload できます
3.3 木下
1.aEucalyptus(プライベートクラウドとして)の調査・研究
b)グリッドコンピューティング関連の調査・研究
GlobusToolkit で何ができる?
AndroidOS のクロスコンパイルで使えたら嬉しいかも。
cDebian7 on PANDABOARD の調査・研究
5
WiFi モジュール(On BoardTI 製)の有効化
GPU デバイスドライバの有効化
2. ※前回 ( 84 ) は欠席だった為、第 83 回の内容になります
aEucalyptus(プライベートクラウドとして)の調査・研究
実績:インスタンスの保存と自動化に成功
保存したインスタンスを起動させるとネットワーク接続が絶たれてしまっていた原因
→ファイル:/etc/udev/rules.d/70-persistent-net.rules NIC デバイス情報が残っていると新た
NIC デバイス情報が登録されてしまい、NIC 番号が変更され、通信不可となっていた。
Eucalyptus 関係者の方のお話では、Debian 用ツールのバグかも」とのこと。インスタンス保存
にクリアすることで解決した。
インスタンスを OS イメージファイル化し、ハイパーバイザ上にバックアップする
スクリプトを作成し、crontab で定期的に起動できるようになった。
bDistCC の調査・研究
実績:上記プライベートクラウドシステムを用いて複数の VM で分散コンパイルさせる環境構築に成功。
ン(distcc )と VMdistcc 4 PANDABOARDOSAn-
droid4.0.4)用 FW を分散コンパイルさせ、コンパイル時間の短縮が可能となった。
課題AndroidOS の場合、JAVA のコンパイル箇所がかなり存在するので、この部分が複数マシンで分散
コンパイルできるようになれば、かなりのコンパイル時間の短縮となりそうなので、このあたりについて
再調査必要。
c)グリッドコンピューティング関連の調査・研究
実績:保留
dDebian7 on PANDABOARD の調査・研究
実績:保留
3.4 takata
1. 課題:LUKS パーティションのパスワード入力を省略する件(未解決)
keyfile を登録してみましたが、依然として swap パーティシンに関しては起動時にパスワードを聞かれます
ググってみると同様の問題がいくつかヒットするようなので、もくもくの会の時間でもう少し調べてみたいと
思っています
stop crypttab asking for password for swap
http://askubuntu.com/questions/43432/stop-crypttab-asking-for-password-for-swap
”/”ティション keyfile 。間まった key slot
cryptsetup luksRemoveKey ようので、パスを登 key slot を誤って除し
てしまい、cryptsetup luksAddKey でキーを登録できなくなるばかりかパスワードが解除できなくなってしま
No key available with this passphrase.一瞬冷や汗が出ました。幸い、keyfile を設定した Key Slot
残っていたので、cryptsetup luksAddKey –key-file=... で回避でき何とか事なきを得したが、Key Slot
削除する場合はくれぐれもご注意ください。
2. インターネットからの 22 番ポート (ssh) への不正アクセスについて
教えていただいたとおりfail2ban を適用することで不正アクセスに対して有効にブロックできているようで
。ありがとうございました。
6
3.5 西山和広
1. ansible でのサーバー設定を進めたいです
2. 前回不参加です
3. blog の記事から ^Xg の話を予定しています
4. 用意しておきます
3.6 yyatsuo
1. kernel-handbook の日本語訳をそろそろなんとかしますあとは某雑誌の記事査読とか
2. fcitx-skk new que に入りました!(new que で止まってるとも言います)
3. 仕事の愚痴なら溜まってますよ?
4. もう入ってる
3.7 榎真治
Debian wheezy Anthy 使っていますが、日本語入力の変換効率(候補が期待したような順番で並んでくれな
いなど)がいまひとつと感じていますので、環境を変更してみたいと考えています
お勧めの方法はありますか?
mozc を試すとしたら uim,ibus などのどれがお勧めですか?
3.8 坂本 貴史
1. 英語ドキュメントを Tex フォーマットで作成しているので、その続きを書きます
2. 前回は参加していません
3.Linux のドライバメンテナになった体験記」というタイトルで短いセッションをする予定です
3.9 lurdan
1. 手持ちパッケージの bug squash
2. webwml-git CI できるようにはなったけど、運用が煩雑なので再検討中です
3.10 川江
1. emacs にて、HTML5 形式のサイトの作成。で、wed-mode.el debian のパッケージにないのですが、これ
て「anthy-el」のようにパッケージにできます? というか「.el」ファイルというのはそもそも何?
3.11 Hiroyuki Nagata
1. RFS のやり方、GPG 鍵の交換 … 今度はある程度準備をしてくるつもり
2. GPG 鍵を作成しました、Mac Book Pro Debian jessie をインストールしました
3. 今月はむりかもしれませんが Debian でルータ構築とか
7
85 関西 Debian 勉強会 2014 6
4 Debian での systemd とのつ
きあい方
佐々木 洋平
Yes, it is written systemd, not system D or System D, or even SystemD. And it isn’t system d either.
Spelling - http://www.freedesktop.org/wiki/Software/systemd/
4.1 はじめに
少し前の話ですが、次 Debian 安定 Jessie でのデフォルトの Init して systemd 採用されました。勉強会
参加皆様かれてはdebian-devel@lists.debian.org 流れた品の無い (?) に新
とでしょう
*
7
な意見はあるでしうけれども、「デフォルトとして採用される以上 (好むと好まざるとにかかわら)Debian
の開発 (含ワナビ) とって systemd の知識は必須事項になりそうで。そんな訳でsystemd のものについ
て調べた結果と Debian における現状についてまとめてみます。ちなみに主にテストした環境は以下の通り:
% LANG=C date
Sat Jun 21 10:15:59 JST 2014
% lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux unstable (sid)
Release: unstable
Codename: sid
% dpkg -l | grep systemd
ii libpam-systemd:amd64 204-10 amd64 system and service manager - PAM module
ii libsystemd-daemon0:amd64 204-10 amd64 systemd utility library
ii libsystemd-id128-0:amd64 204-10 amd64 systemd 128 bit ID utility library
ii libsystemd-journal0:amd64 204-10 amd64 systemd journal utility library
ii libsystemd-login0:amd64 204-10 amd64 systemd login utility library
ii systemd 204-10 amd64 system and service manager
ii systemd-gui 1:3-2 all transitional package for systemd-ui
ii systemd-sysv 204-10 amd64 system and service manager - SysV links
ii systemd-ui 3-2 amd64 graphical frontend for systemd
本原稿の執筆時間がよくわかります
*
8
。一応 whezzy + wheezy-backports でもテストはしてみましたが。
... しかし, v204 って...
*
7
Fsck SystemD and its developers and its users. GR to override this please.
https://lists.debian.org/debian-devel/2014/02/msg00316.html
*
8
lsb-base lsb-release しかインストールしていないので lsb release -a の出力結果はこんなモンです
8
4.2 そもそも systemd ってナニよ?
systemd Lennart Poettering
*
9
よって Init です。今
る「Init 」と り「Linux ( ) 」となって 。開
freedesktop.org
*
10
で行なわれており、ライセンスは LGPL-2.1+、最新バージョンは v214 となっています
Linux のサービス (デーモン) 管理フレームワーク」としての systemd の特徴は
1. Init として、SysV および LSB init script との互換性の提供。
2. サービスの起動をソケットとバス (D-Bus) で行なう
3. サービス間の依存関係を明確にし、よりアグレッシブに並列起動する。
4. オンデマンドなサービスの起動。
5. プロセス管理を pid ではなく cgroups(control groups) で行なう
といった所です
既に Linux カーネル用のデバイス管理ツールである udev systemd のソースにマージされており、デバイスの状
態に応じてオンデマンドにサービスが起動したりしま。将来的に cron acpid 代替機能も提供する予定ら
いです
*
11
。その他、systemd に関する開発者の思想、現状に関しては
http://0pointer.de/blog/projects/systemd.html
http://0pointer.de/blog/projects/systemd-for-admins-1.html から始まる一連のエントリ
*
12
が非常に参考になるでしょう
4.3 Debian で使うには?
systemd の必要要件は以下の通りです:
1. Linux カーネルのバージョンは 2.6.39 以上
2. 以下の機能が有効となっていること
devtmpfs
fanotify
autofs4
cgroups
カスタムカーネルを使用されている場合には、カーネルのバージョン等にご注意下さい。
Debian でパッケージとして提供されている systemd のバージョンは
wheezy: v44
wheezy-backports: 204-8˜bpo70+1
jessie/sid: 204-10
です以下、ケージとして提供されている最新版である v204 のお話をしま
*
13
では導入してみましwheezy
をお使いの方は wheezy-backports を有効にして下さいinit sysvinit から置き換えるために、systemd-sysv
*
9
Red Hat Inc. のエンジニアさんですsystemd の開発者だけでなく様々なフリーソフトウェアの開発者でもあります例えば PulseAudio
とか Avahi なんかのメイン開発者でもありますね。
*
10
http://www.freedesktop.org/wiki/Software/systemd/
*
11
ここまで来るとやりすぎな感も否めませんが...
*
12
現在#20 まであります。長くて読むの辛い...
*
13
ちなみに、v44 を使用する場合の手順はsystemd install →起動時 init=/lib/systemd/systemd と指定す or grub エント
の書き換えを行なう、です
9
導入します
% sudo aptitude install systemd-sysv -t wheezy-backports <-- wheezy の場合
% sudp aptitude install systemd-sysv <-- jessie/sid の場合
wheezy の場合には sysvinit core パッケージなので、インストール時の依存関係解決に多少手間どるかもしれま
せん。以下のパッケージが依存関係でインストールされます
===============================================================================
[インストール] libpam-systemd:amd64
[インストール] libsystemd-journal0:amd64
[インストール] libudev1:amd64
[インストール] systemd:amd64
[インストール] systemd-sysv:amd64
[削除] sysvinit:amd64
[更新] libsystemd-daemon0:amd64 44-11+deb7u4 -> 204-8~bpo70+1
[更新] libsystemd-login0:amd64 44-11+deb7u4 -> 204-8~bpo70+1
===============================================================================
インストールが終わったら reboot します... 無事起動できたでしょうか?
systemd boot プロセスの解析ツールがあり、起動時にかかった時間が直ぐにわかります
% systemd-analyze
Startup finished in 1.632s (kernel) + 3min 2.710s (userspace) = 3min 4.343s
... あれ?
% systemd-analyze blame
3min 12ms dnsmasq.service
2.074s systemd-udev-settle.service
630ms psd.service
307ms NetworkManager.service
127ms squid3.service
106ms bluetooth.service
98ms udisks2.service
96ms exim4.service
93ms keyboard-setup.service
87ms bootlogs.service
87ms avahi-daemon.service
80ms resolvconf.service
76ms console-setup.service
74ms networking.service
73ms systemd-logind.service
69ms netfilter-persistent.service
64ms console-kit-log-system-start.service
... 以下略...
燦然と輝く 3min 12ms dnsmasq.service。…おかしい。これはおかしい。
4.4 現状どうなのよ?
気を取りなおして。
4.4.1 systemd の用語
systemd を理解するために、先ずは用語を確認しましょう
ユニット (unit):
SysVinit の初期化スクリプトにまとめて含まれていた個々の処理を抜き出した最小単位。個々の Unit はそれ
ぞれ以下の通り:
サービス (.service):
デーモンを起動する
ソケット (.socket):
systemd 指定され socket を監視し、接続があると指定.service を起動し、socket を渡すinetd
の様な役割。
ターゲット (.target):
10
複数のユニットをまとめて、依存関係や順序関係を定義する。SysVinit runlevel に対応
*
14
マウントポイント (.mount):
ファイルをマウントする
スワップ (.swap):
スワップを有効化
デバイス (.device):
udev がデバイスを認識すると有効化される。
このうち、.mount,.swap /etc/fstab から、.device udev から、それぞれ自動生成されますこれら「ユニッ
ト」を定義したファイルは/lib/systemd 以下に置かれ、/etc/systemd 以下の適切な場所へ symbolic link をはる
ことで有効になります
また、ターゲットは SysvInit runlevel (なんとなく) 対応しておりDebian の場合には となっていま。起
SysVinit runlevel systemd target
0 poweroff.target
1 rescue.target
2 - 5 multi-user.target
6 reboot.target
1 Debian での runlevel .target の対応
動時に何も指しない場には default.target 行されま。手元環境では default.target graphical.target
への symbolic link になっていました.
% ls -la /lib/systemd/system/default.target
lrwxrwxrwx 1 root root 16 2014-04-27 19:43 /lib/systemd/system/default.target -> graphical.target
では graphical.target の中身を見てみましょう
% cat /lib/systemd/system/graphical.target | grep -v ^#
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
After=multi-user.target
Conflicts=rescue.target
Wants=display-manager.service
AllowIsolate=yes
[Install]
Alias=default.target
RequiresAfterConflictsWants」が依存/順序関係を表現しています。それぞれ
Require: ここで指定されているユニットが起動していることが必要 (依存関係)Require で指定されたユニッ
トの起動に失敗すると、このユニットは実行されない。
Wants: ここで指定されているユニットが起動していることが求められる (依存関係)。ただし、Wants で指定
されたユニットの起動に失敗しても、このユニットは実行開始される。
After: ここで指定されたユニットの起動「後」に実行される (順序関係)
Before: ここで指定されたユニットの起動「前」に実行される (順序関係)
となっています
ユニットの操作は全て systemctl コマンドで行ないます。では、現状の依存/順序関係を表示してみましょう
*
14
厳密に 1 1 に対応する訳ではない。
11
% systemctl list-dependencies [unit ]
unit 名省略時は default.target
% systemctl list-dependencies [unit ] --after
% systemctl list-dependencies [unit ] --before
% systemctl list-dependencies
default.target
├─ bootlogs.service
├─ chrony.service
├─ dovecot.service
├─ exim4.service
├─ hyperestraier.service
├─ lightdm.service
├─ motd.service
├─ psd.service
├─ pulseaudio.service
├─ schroot.service
├─ systemd-update-utmp-runlevel.service
├─ yaskkserv.service
└─ multi-user.target
├─ anacron.service
├─ atd.service
...
個々の unit の状況は status で表示できます:
% systemctl status ssh
ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled)
Active: active (running) since 2014-06-22 14:17:07 JST; 25s ago
Main PID: 9180 (sshd)
CGroup: name=systemd:/system/ssh.service
└─ 9180 /usr/sbin/sshd -D
6 22 14:17:07 daphne systemd[1]: Started OpenBSD Secure Shell server.
6 22 14:17:07 daphne sshd[9180]: Server listening on 0.0.0.0 port 22.
個々の unit の開始/停止/再起動はそれぞれ start/stop/restart で可能です.
% sudo systemctl stop ssh
% systemctl status ssh
ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled)
Active: inactive (dead) since 2014-06-22 14:18:27 JST; 40s ago
Process: 9180 ExecStart=/usr/sbin/sshd -D $SSHD_OPTS (code=exited, status=0/SUCCESS)
6 22 14:17:07 daphne systemd[1]: Started OpenBSD Secure Shell server.
6 22 14:17:07 daphne sshd[9180]: Server listening on 0.0.0.0 port 22.
6 22 14:18:27 daphne systemd[1]: Stopping OpenBSD Secure Shell server...
6 22 14:18:27 daphne systemd[1]: Stopped OpenBSD Secure Shell server.
% sudo systemctl start ssh
% systemctl status ssh
ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled)
Active: active (running) since 2014-06-22 14:19:52 JST; 13s ago
Main PID: 10819 (sshd)
CGroup: name=systemd:/system/ssh.service
└─ 10819 /usr/sbin/sshd -D
といった塩梅ですね。また、ユニットファイルを編集した場合には reload unit を再起動できます
現状のユニトの状況を見てみましインストールされているユニットの一覧は list-unit-files で表示できます.
% systemctl list-unit-files
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
dev-hugepages.mount static
dev-mqueue.mount static
proc-sys-fs-binfmt_misc.mount static
run-lock.mount static
run-user.mount static
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug.mount static
tmp.mount disabled
cups.path enabled
systemd-ask-password-console.path static
systemd-ask-password-wall.path static
acpid.service disabled
...
12
また、現在実行されたユニットの一覧は systemctl をオプション無し実行するか、list-units を実行します。type
指定してユニットを表示することも可能です
% systemctl list-units
UNIT LOAD ACTIVE SUB DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary E...
sys-devices-pci0000:00-0000:00:03.0-sound-card0.device loaded active plugged /sys/device...
sys-devices-pci0000:00-00...4.0-usb1-1\x2d4-1\x2d4:1.0-bluetooth-hci0.device loaded active plugged /sys/device...
sys-devices-pci0000:00-0000:00:16.3-tty-ttyS0.device loaded active plugged Lynx Point-...
sys-devices-pci0000:00-0000:00:19.0-net-eth0.device loaded active plugged Ethernet Co...
sys-devices-pci0000:00-0000:00:1b.0-sound-card1.device loaded active plugged Lynx Point-...
sys-devices-pci0000:00-0000:00:1c.2-0000:02:00.0-net-wlan0.device loaded active plugged Dual Band W...
...
% systemctl list-units --type=socket
UNIT LOAD ACTIVE SUB DESCRIPTION
acpid.socket loaded active listening ACPID Listen Socket
avahi-daemon.socket loaded active listening Avahi mDNS/DNS-SD Stack Activation Socket
cups.socket loaded active listening CUPS Printing Service Sockets
dbus.socket loaded active running D-Bus System Message Bus Socket
lvm2-lvmetad.socket loaded active listening LVM2 metadata daemon socket
syslog.socket loaded active running Syslog Socket
systemd-initctl.socket loaded active listening /dev/initctl Compatibility Named Pipe
systemd-journald.socket loaded active running Journal Socket
systemd-shutdownd.socket loaded active listening Delayed Shutdown Socket
systemd-udevd-control.socket loaded active running udev Control Socket
systemd-udevd-kernel.socket loaded active running udev Kernel Socket
virtlockd.socket loaded active listening Virtual machine lock manager socket
4.4.2 で、dnsmasq ?
起動途中の tree は以下の通りです:
...
811 ? Ss 0:00 /bin/sh /etc/init.d/dnsmasq systemd-start-resolvconf
821 ? S 0:00 \_ run-parts --arg=-a --arg=lo.dnsmasq /etc/resolvconf/update.d
863 ? S 0:00 \_ run-parts /etc/resolvconf/update-libc.d
901 ? S 0:00 \_ /bin/sh /etc/resolvconf/update-libc.d/squid3
902 ? S 0:00 \_ /bin/sh /usr/sbin/invoke-rc.d squid3 reload
936 ? S 0:00 \_ systemctl reload squid3.service
...
さて...
% cat /etc/resolvconf/update-libc.d/squid3
#!/bin/sh
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
# Make squid aware of changes to resolv.conf
invoke-rc.d squid3 reload || true
invoke-rc.d の呼出し systemctl に行ってけで、ここまっている見えdnsmasq,
resolvconf, squid3 の状況を見てみましょう
% systemctl status dnsmasq
dnsmasq.service - A lightweight DHCP and caching DNS server
Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled)
Drop-In: /run/systemd/generator/dnsmasq.service.d
└─ 50-dnsmasq-$named.conf, 50-insserv.conf-$named.conf
...
ユニットファイルの中身は以下:
% cat /lib/systemd/system/dnsmasq.service | grep -v ^# | sed ’/^$/d’
[Unit]
Description=A lightweight DHCP and caching DNS server
[Service]
Type=dbus
BusName=uk.org.thekelleys.dnsmasq
ExecStartPre=/usr/sbin/dnsmasq --test
ExecStart=/etc/init.d/dnsmasq systemd-exec
ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf
ExecStop=/etc/init.d/dnsmasq systemd-stop-resolvconf
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
dnsmasq dbus 経由で起動されているようです
13
% systemctl status resovconf
resolvconf.service - Nameserver information manager
Loaded: loaded (/lib/systemd/system/resolvconf.service; enabled)
...
ユニットファイルの中身は以下の通り:
[Unit]
Description=Nameserver information manager
Documentation=man:resolvconf(8)
DefaultDependencies=no
[Service]
RemainAfterExit=yes
ExecStartPre=/bin/mkdir -p /run/resolvconf/interface
ExecStartPre=/bin/touch /run/resolvconf/postponed-update
ExecStart=/sbin/resolvconf --enable-updates
ExecStop=/sbin/resolvconf --disable-updates
[Install]
WantedBy=network.target
resolvconf network.target ネット resolvconf
ます
そして squid3 の起動は
% systemctl status squid3
squid3.service - LSB: Squid HTTP Proxy version 3.x
Loaded: loaded (/etc/init.d/squid3)
...
squid3 systemd service multi-user.target
/etc/init.d/squid3 が呼び出されます。結果として、
(1) squid3 の起動を試みる
(2) network の状態が変更されたので、resolvconf.service が呼び出される
(3) resolvconf.service にお/etc/resolvconf/update-libc.d/squid3 が呼びされ、その squid3
reload される
(4) (1) に戻る
となって timeout まで止まっている様です
% cat /etc/resolvconf/update-libc.d/squid3
#!/bin/sh
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
# Make squid aware of changes to resolv.conf
# invoke-rc.d squid3 reload || true
とした所
% systemd-analyze
Startup finished in 1.646s (kernel) + 3.396s (userspace) = 5.042s
となりました (やったね)。…さて、これはどうしたら良いのでしょうか?
4.5 まとまりませんが
というわけで、次回 (があたら)こうい「既存のサービス」 systemd への移行やjounrnaldtimedatectl
systemd-cron あたりについてまとめてみたいと思います
14
85 関西 Debian 勉強会 2014 6
5 Linuxのドライバメンテナに
なった体験記
坂本貴史
5.1 今日の話題
。そ、サ6 Linux
3.16-rc1 マージされました。サブシステムか Linux にコード pull される流れを、実体験を基にして簡単に
話します
5.2 Linux の開発サイクル
「前の」「今の」「次の」バージョンと表現したとき、以下のようになります
0 前のバージョンをリリース。今のバージョンのマージウィンドウ開始。
02 この間、新機能が pull される。
2 マージウィンドウ閉鎖。今のバージョンの rc1 をリリース。
2 週∼(N-1) この間、バグ修正が pull され、だいたい 1 週間おきに rc がリリースされる
(N-1) 今のバージョンの rc(N-2) をリリース
N 今のバージョンをリリース。次のバージョンのマージウィンドウ開始。
5.3 Linux のサブシステム
機能別にサブシステムに分割されており、それぞれのサブシステムを開発するプロジェクトがあります
Scheduler
Memory management
Networking
Filesystems
Read-Copy update (RCU)
. . .
IEEE1394 bus
Sound
15
5.4 Linux のサブシステムのメンテナ
サブシステム内の開発をまとめる役割を果します
開発者から送られたパッチは、メンテナがマージするかどうかを決定します
マージウィンドウが開いたら、メンテナが Linus pull request を出します
Linus request ack し、tree にマージします
メンテナはあらかじめ、Linus との信頼関係を築いているため、拒否されることは珍しいようです
5.5 Linux の開発者の活動
典型的には、サブシステム開発プロジェクトのメーリングリストで活動します
自分が書いたパッチのマージに向け、メンテナや他の開発者を説得します
RFC (Request for comment) を出し、他の開発者の反応を見ることが有効です
他の人が投げたパッチをレビューすると喜ばれます
5.6 私がやったこと
サウンドサブシステム
ALSA firewire stack の開発
firewire のプロトコルスタック
プロトコルスタックの実装
ドライバの実装
5.7 開発の初期
2013 1 月∼2013 8
目標は、デバイス仕様を把握することと、自分の活動をアピールすることです
ライブラリモジュールの拡張
ドライバの作成
Linux firewire subsystem のバグ
5.8 開発の中期
2013 9 月∼2014 1
目標は、パッチセットの最終候補を作成し、テスターを募ることです
別なデバイスチップの調査
ドライバのブラッシュアップ
既存実装のリグレッションテスト
最終 RFC CFT
16
5.9 開発の後期
2014 2 月∼2014 6
目標は、ALSA の上流にマージされるよう、コミュニケーションすることです
影響のあるプロジェクトとの調整
3.14 のマージウィンドウの閉鎖
マージリクエスト 1 3
3.15 のマージウィンドウの閉鎖
マージリクエスト 4
メンテナの緩い同意
topic/firewire ブランチ
0day kernel testing
*
15
*
16
testing backend のレポートへの対応
sound.git for-next
5.10 マージ以降
2014 6
目標は、Linux へのマージを見届けることです
3.16 のマージウィンドウオープン
サブシステムメンテナから Linus へのプルリクエスト
コードの軽微な修正
サブシステムメンテナから Linus へのプルリクエスト
3.16 のマージウィンドウの閉鎖
5.11 まとめ
Linux とそのサブシステムの間で、開発サイクルがどのように進められるかを、実体験を踏まえて説明しました。
5.12 質問への回答
5.12.1 キャラクタデバイスとは何ですか?
キャラクターデバイスとは、ユーザープロセスが、カーネルランドにあるコードを利用するためのエントリーポイ
です。ユーを行、カ
コードが実行され、ハードウェアとデータが交換されます
一般的に、オペレーティングシステムは、ハードウェアの違いを吸収するレイヤを設け、同じプログラムルーチン
で、同じ機能を持つ異なるハードウェアを扱えるようにしています。これによ、異なるハードウェアに対して異
るソフトウェアを書く必要がなくなるわけで。古い文献では、この機能を仮想マシ (virtual machine) と呼びま
*
17
*
15
0day kernel testing back-end (2012/05/17) https://lkml.org/lkml/2012/5/17/126
*
16
KS2012: Kernel build/boot testing (2012/09/05) http://lwn.net/Articles/514278/
*
17
「オペレーティング・システムの機能は、ユーザーに拡張マシン (extended machine) またはその下のハードウェアよりプログラムしやす
い仮想マシン (virtual machine) を提供することであるといえる(ANDREW S. TANENBAUM (1989) MINIX オペレーティン
17
この「仮想マシン」という文脈からキャラクタデバイスに言及すると、ハードウェアを抽象化してソフトウェアか
ら利用できるようにしたもののひとつ、となります
また一般に、オレーティングシテム、複数ユーープロセが、擬的に時にる機を持ます
これを Time Sharing System と呼びますTime Sharing System は、ユーザープロセスがある条件を満たしたとき
あるいはシステムである事象が発生したとき、そのプロセスの実行を休止して状態を保存し、別なプロセスの状態を
復元して実行を再開することで成立します
Time Sharing System では、様々なプロセスが、同時にシステム資源へアクセスすることがあります。そのためオ
ペレーティングシステムは、システム資源に対するアクセスを管理する機能を持ちます。オペレーティングシステム
は、ユーザープロセスに対し、ハードウェアへのアクセス方法をエントリーポイントに限定することで、システム資
源を管理します。このシステム資源管理方法は、最近のメニーコア (CPU を複数持つ) マシンでも役に立ちます
Linux おいて、大抵のエントリーポイントはファイルの形となっています。これは Linux が、システムリソース
をファイルで表現するという UNIX の設計思想に影響を受けているからです。キャラクタデバイスやブロックデバイ
スのエントリーポイントとなっているファイルを、特別に、「特殊ファイル ( special file)」と呼びます。ユーザープ
ロセは、基に、特ファイルしてファイル操行い、ハードウェアのデタ交行い。なお
このデータ交換を入出力 (input/output = I/O) と呼びます
キャラクタデバイスは、バイト単位で入出力可能なハードウェアを表現します。身近なところでは、マウスやキー
ボードはキャラクタデバイスとなります(最も、これらはシステムへの入力限定、つまりキャラクタデバイスからの
読み出し限定ですが)Linux にはこの他のエントリーポイントとして、ブロックデバイスがあります。固定サイズで
データを入出力可能なハードウェアを表現します。例えばハードディスクドライブが該当し、/dev/sda1 となります
さて、ユーザープロセスが特殊ファイルに対してファイル操作を行うと、システムコールが呼ばれ CPU の動作
モードがユーザーモードからカーネルモードに変わ、ハードウェアにアクセスできるようになります。この時に実
行されるコードのうち、カーネルランドにあるものをドライバと呼びます。キャラクタデバイスに対するドライバは
キャラクタデバイスドライバ、ブロックデバイスに対するドライバはブロックデバイスドライバとなります
Linux のデバイスドライバにはこの他に、ネットワークデバイスドライバがありま。ネットワークデバイスドラ
イバは他の 2 種類のドライバとは異な、エントリーポイントがファイルではありません。ユーザープロセスは、専
用の関数を実行し、ネットワークデバイスのエントリーポイントを取得します。このエントリーポイントに対する操
作も、専用の関数となります。これら関数群をソケットインターフェイスと呼びます
キャラクタデバイスおよび Linux における他の 2 種類のデバイスに関して、オペレーティングシステムの基本機能
やユーザープロセスからの利用方法も踏まえて説明しました。
5.12.2 デバッグはどのように行いましたか?
デバッグですが、printk などのカーネ API ログを出力してカーネルスペースのデータ構造の状態を確認す
ことと、簡単なプログラムを実行してデバイスの状態を確認することで行いました。便利なツールがたくさんありそ
うな気がしますが、私が気にしなければならないことに対して学習コストが高すぎると考えました。
私が書いたドライバの構造を簡単に述べると、下の方 (ボトムハーフ) IEEE 1394 バス上のユニット (デバイス)
と入出力を行い、上の方 (トップハーフ) ALSA Core を使ってユーザープロセスと入出力を行いますドライバの
仕事はALSA Core がパターン化したユーザープロセスからの要求に合わせ、デバイスを操作し、特定の挙動を
せることです。ユニットに相当するスタブドライバを書くことも考えたのですが、Linux firewire subsystem が持つ
OHCI1394 コントローラードライバをもうひとつ書くような大掛かりな仕事になるので、諦めました。
実はデバイスへの入出力は、ユーザースペースからも行うことができますLinux firewire subsystem は、バス上
にあるそれぞれのユニットに対して fw キャラクタデバイスを設けlibraw1394 を通じて API を提供しています。デ
バイスの状態は、この API を利用する簡単なプログラムを実行して確認することができました。デバイスの挙動の調
査は、だいたいこのユーザープログラムから行いました。
グシステム)』坂本文 監修、大西照代 翻訳、アスキー出版局)
18
デバイスの挙動が明確になりさえすれば、あとはそれを C 言語で書くだけでgit コードを管理し、コードの
修正がある度にテストデバイスすべてを使って挙動を確認し、printk のログ出力で構造体の状態を確認するという作
業がデバッグの中心でした。コードの分量が、個人がその実行パスを把握できる程度 (10,000 行以下と言われてい
) だったのも幸いしました、
こうして振り返ってみると、kgdb を使ってカーネルスペースの構造体の確認をしたりLinux firewire subsystem
の学習のためにスタブドライバを書いたりするべきだったと思います
デバッグ方法について説明しました。
19
85 関西 Debian 勉強会 2014 6
6 もくもくの会
20
85 関西 Debian 勉強会 2014 6
7 今後の予定
Debian JP
7.1 関西 Debian 勉強会
次回、第 86 回関西 Debian 勉強会は 7 27 () に福島区民センターで開催予定です
8 2 () に開催される OSC 2014 Kansai@Kyoto に出張開催します
7.2 東京エリア Debian 勉強会
115 回東京エリア Debian 勉強会は 7 19 () に株式会社スクウェアエニック 応接 11 で開催予定です
内容は、中尾さんの「簡易ヲレヲレタイルサーバを作った」発表があるとかないとか。
21
85 関西 Debian 勉強会 2014 6
8 メモ
22
関西Debian 勉強会
Debian 勉強会資料
2014 6 22 初版第 1 刷発行
関西 Debian 勉強会 (編集・印刷・発行)
23