SlideShare ist ein Scribd-Unternehmen logo
1 von 33
SYSTEMDに入門してみた
@papi_tokei
第 146 回関西 Debian 勉強会
自己紹介
• 所属
• 京都のIT会社勤務(社会人2年目)
• 取り組んでいること
• AWSを使ったバックエンドの構築
• Vue.jsなどを使ったフロントエンド開発
• SORACOMのサービスを利用したIoT開
発
• Openblocksと戯れる日々…
なぜ今頃systemd?
弊社で使用しているOpenblocks EX1のファームのバージョンが
2系から3系に上がった際に、sysvinitからsystemdに変更されたので、
systemdの知識が必要になったからです。。。
OSが立ち上がるまで
電源ON⇒BIOSが起動⇒BIOSがブートローダー(GRUB)を起動
⇒ブートローダーがカーネルを起動
⇒カーネルがinitプロセス(sysvinit or systemd)を起動
⇒intiプロセス(PID1)が諸々のサービスを起動
Debianのinitプロセスは?
■ Debian squeeze(Debian 6)まではsysvinit
■ Debian wheezy(Debian 7)はsysvinit、ただしプレビューとして
systemdが利用可能
■ Debian jessie(Debian 8)以降はデフォルトsystemd、
ただしsysvinitも利用可能
Initプロセスを見てみる(sysvinit)
Initプロセスを見てみる(systemd)
systemdのメリット
■ これまでのinitプロセスでは以下の問題が発生していた
– シェルスクリプトを順番に実行していくので、
システムの起動に時間がかかる
– サービスごとにcgroupsでリソース配分を調整するなどの
仕組みがない
■ systemdでは?
– プロセスの起動を出来る限り並列で行おうとするので、
起動が早い
– Cgroupでプロセスの管理を行うので、リソース管理、
生存確認などが出来る
– リファレンスがめっちゃ丁寧に書かれている
sysvinitの
起動プロセス
sysvinitの
起動プロセス
/etc/init.d/rc
/etc/rc*.d以下のスクリプトを
順番に実行する
systemdの
起動プロセス
systemdのユニット
■ systemdはプロセスをユニットという単位で管理する
■ 全部で11個のユニットが存在する
– サービスユニット
– ターゲットユニット
– ソケットユニット
– …
サービスユニット
■ プロセスを制御・管理するための
ユニット
■ .serviceで終わるユニットファイル
■ 一般的なユースケースで
使用するユニットはほとんどこれ
ターゲットユニット
■ 複数のユニットをグルーピングする
ためのユニット
■ .targetで終わるユニットファイル
■ ユニット間の起動順序を
わかりやすくするために利用される
systemdの起動順序
■ ユニットの関係性は「依存」と「順序」の2つの考え方が存在
■ 依存
– プロセス同士が同時起動するかどうか
– あくまで、同時に起動するかどうかであり、
起動順序は考慮しない
■ 順序
– プロセス起動の順序関係を定義する
例えば、プロセスAがプロセスBを必要とする場合(依存)、
明示的に順序を指定しないと、プロセスAとBは同時に起動する
systemdの起動順序
■ まず、default.targetから依存関係、順序関係を構築
systemdではどんなプロセスが
起動するの?
■ sysvinitでは、/etc/rc*.d内のプロセスが起動する
■ systemdでは、以下のディレクトリのプロセスが起動対象
– /etc/systemd/system(ユーザーのコンフィグ)
– /lib/systemd/system(インストールパッケージのコンフィグ)
systemctlって?
■ systemdにあれこれと命令を出すことが出来るコマンド
– systemctl status … unitの状態を見ることが出来る
– systemctl edit … drop inという起動でunitファイルを編集
– systemctl show/cat … unitファイルを表示
– systemctl enable/disable … プロセスの自動起動を制御
– systemctl daemon-reload … unitファイルの変更を反映
– systemctl start/stop/restart … プロセスの起動制御
– systemctl list-unit-files --type=service … サービスの一覧を表示
実際にサービスを作ってみる
(自動起動)
[Service]
ExecStart=/bin/bash -c "date > /home/hiroya/sampleA.txt; sleep 10"
[Install]
RequiredBy=multi-user.target
sampleA.service
現在の日時をsampleA.txtの出力するプロセス
multi-user.tagetの逆依存を指定
実際にサービスを作ってみる
(自動起動)
sampleA.service
sampleAの明示的な設定は2行だけだが、
後ろでいろいろな設定が勝手に付与される
実際にサービスを作ってみる
(依存あり)
自動起動の有効化
実際にサービスを作ってみる
(依存あり)
[Unit]
Requires=sampleB.service
[Service]
ExecStart=/bin/bash -c "date > /home/hiroya/sampleA.txt; sleep 10"
[Install]
RequiredBy=multi-user.target
sampleA.service
sampleB.serviceへの依存を追加
sampleAには、sampleBが必要、
ということ
[Service]
ExecStart=/bin/bash -c "date > /home/hiroya/sampleB.txt"
sampleB.service
実際にサービスを作ってみる
(依存あり)
sampleAからsampleBが呼び出されていることがわかる
また、依存のみなので、sampleAとsampleBは同時に起動している
実際にサービスを作ってみる
(順序あり)
[Unit]
Requires=sampleB.service
Before=sampleB.service
[Service]
Type=oneshot
ExecStart=/bin/bash -c "date > /home/hiroya/sampleA.txt; sleep 10"
[Install]
RequiredBy=multi-user.target
sampleA.service
BeforeとType=oneshotを追加することで、
sampleAの後に、sampleBを起動することが出来る
実際にサービスを作ってみる
(順序あり)
sampleAの10秒後にsampleBが起動していることがわかる
おまけ
journalctlって?
■ systemd環境では、ログの収集はjournald(system-journald)が担当
■ journalctlはjournaldに対して命令を行う事ができるコマンド
■ Systemdのサービスのログを表示できるので、エラーの際は便利
graphical.targetの遷移を邪魔してみる
[Unit]
Before=sysinit.target
DefaultDependencies=no
OnFailure=emergency.target
[Service]
Type=oneshot
ExecStart=/bin/false
[Install]
RequiredBy=sysinit.target
sample.service
sysinit.targetが完了せず、次のターゲットに遷移せずに、
強制的にemergency.targetに遷移する
systemdの
起動プロセス
(再掲)
graphical.targetの遷移を邪魔してみる
[Unit]
Before=sysinit.target
DefaultDependencies=no
#OnFailure=emergency.target
[Service]
Type=oneshot
ExecStart=/bin/false
[Install]
RequiredBy=sysinit.target
sample.service
OnFailureをコメントアウトすると、正常にOSが起動しなくなる
(プロンプト受付をしなくなる)
もし、sysinit.targetよりも前のサービスを作成する場合は、
OnFailureを設定しておくと安心
ご清聴ありがとうございました

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Open Build Serviceで楽をする
Open Build Serviceで楽をするOpen Build Serviceで楽をする
Open Build Serviceで楽をする
 
UEFIで始めるLinux From Scratch
UEFIで始めるLinux From ScratchUEFIで始めるLinux From Scratch
UEFIで始めるLinux From Scratch
 
AllwinnerタブレットのOSを作ってみる (途中版)
AllwinnerタブレットのOSを作ってみる (途中版)AllwinnerタブレットのOSを作ってみる (途中版)
AllwinnerタブレットのOSを作ってみる (途中版)
 
いまどきのLinuxインストールバトル(新型PC編) OSC2015 Nagoya LT
いまどきのLinuxインストールバトル(新型PC編) OSC2015 Nagoya LTいまどきのLinuxインストールバトル(新型PC編) OSC2015 Nagoya LT
いまどきのLinuxインストールバトル(新型PC編) OSC2015 Nagoya LT
 
TUI作業で便利なソフト2題
TUI作業で便利なソフト2題TUI作業で便利なソフト2題
TUI作業で便利なソフト2題
 
Inside wsl
Inside wslInside wsl
Inside wsl
 
UEFI向け自作OSの紹介
UEFI向け自作OSの紹介UEFI向け自作OSの紹介
UEFI向け自作OSの紹介
 
CybozuのOSS(WalB)へコミットしてみた/使ってみた
CybozuのOSS(WalB)へコミットしてみた/使ってみたCybozuのOSS(WalB)へコミットしてみた/使ってみた
CybozuのOSS(WalB)へコミットしてみた/使ってみた
 
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
XenServerとZFSストレージでサーバ仮想化 - OSC2011 Tokyo/Spring 自宅SAN友の会(後半)
 
第2回JAZUG総会 LT - FreeBSD on Azure
第2回JAZUG総会 LT - FreeBSD on Azure第2回JAZUG総会 LT - FreeBSD on Azure
第2回JAZUG総会 LT - FreeBSD on Azure
 
Ancient Unixes on emu (OSC2017 Shimane)
Ancient Unixes on emu (OSC2017 Shimane)Ancient Unixes on emu (OSC2017 Shimane)
Ancient Unixes on emu (OSC2017 Shimane)
 
32bit UEFIマシンで遊ぶ
32bit UEFIマシンで遊ぶ32bit UEFIマシンで遊ぶ
32bit UEFIマシンで遊ぶ
 
構成管理のアンチパターン
構成管理のアンチパターン構成管理のアンチパターン
構成管理のアンチパターン
 
qpstudy05 lignhing talk - virtio
qpstudy05 lignhing talk - virtioqpstudy05 lignhing talk - virtio
qpstudy05 lignhing talk - virtio
 
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -
 
Xenとzfsで作る家庭内VDIサーバ
Xenとzfsで作る家庭内VDIサーバXenとzfsで作る家庭内VDIサーバ
Xenとzfsで作る家庭内VDIサーバ
 
openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料
openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料
openSUSEで最強仮想環境をつくろう - ゲーミングから仮想通貨まで - OSC名古屋2017セミナー資料
 
Bit visorsummit7material
Bit visorsummit7materialBit visorsummit7material
Bit visorsummit7material
 
全文検索くん(Search++)簡単導入の手引き
全文検索くん(Search++)簡単導入の手引き全文検索くん(Search++)簡単導入の手引き
全文検索くん(Search++)簡単導入の手引き
 
Zrouter
ZrouterZrouter
Zrouter
 

Ähnlich wie Lt debian 20190526

Cent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみようCent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみよう
2bo 2bo
 
Cygwin 1.7 の紹介
Cygwin 1.7 の紹介Cygwin 1.7 の紹介
Cygwin 1.7 の紹介
fd0
 

Ähnlich wie Lt debian 20190526 (20)

Jenkins+Gitによる検証済みマージ(30分版)
Jenkins+Gitによる検証済みマージ(30分版)Jenkins+Gitによる検証済みマージ(30分版)
Jenkins+Gitによる検証済みマージ(30分版)
 
Cent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみようCent osにpyhtonをインストールしてみよう
Cent osにpyhtonをインストールしてみよう
 
190925 python-windows
190925 python-windows190925 python-windows
190925 python-windows
 
Jenkinsstudy#4kokawa
Jenkinsstudy#4kokawaJenkinsstudy#4kokawa
Jenkinsstudy#4kokawa
 
Tizen native application
Tizen native applicationTizen native application
Tizen native application
 
45分で理解するKubernetesの世界
45分で理解するKubernetesの世界45分で理解するKubernetesの世界
45分で理解するKubernetesの世界
 
Slide osc2013tokyo spring
Slide osc2013tokyo springSlide osc2013tokyo spring
Slide osc2013tokyo spring
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
 
LibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATELibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATE
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべ
 
Cygwin 1.7 の紹介
Cygwin 1.7 の紹介Cygwin 1.7 の紹介
Cygwin 1.7 の紹介
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
 
Linux+Xenによるサーバ仮想化構築事例セミナー
Linux+Xenによるサーバ仮想化構築事例セミナーLinux+Xenによるサーバ仮想化構築事例セミナー
Linux+Xenによるサーバ仮想化構築事例セミナー
 
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
 
ITPro Expo 2014: Microsoft + Cisco UCS  (Cisco Unified Computing System)  サーバ
ITPro Expo 2014: Microsoft + Cisco UCS  (Cisco Unified Computing System)  サーバITPro Expo 2014: Microsoft + Cisco UCS  (Cisco Unified Computing System)  サーバ
ITPro Expo 2014: Microsoft + Cisco UCS  (Cisco Unified Computing System)  サーバ
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
 
みんなのブログ紹介
みんなのブログ紹介みんなのブログ紹介
みんなのブログ紹介
 
GitLabを16万8千光年ワープさせた話(改)
GitLabを16万8千光年ワープさせた話(改)GitLabを16万8千光年ワープさせた話(改)
GitLabを16万8千光年ワープさせた話(改)
 
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラインフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
 

Mehr von hiroya akita (11)

KyotoLT_Online_27.pdf
KyotoLT_Online_27.pdfKyotoLT_Online_27.pdf
KyotoLT_Online_27.pdf
 
はんなりPython #45
はんなりPython #45はんなりPython #45
はんなりPython #45
 
Python 3.10の新機能を 俯瞰してみる
Python 3.10の新機能を 俯瞰してみるPython 3.10の新機能を 俯瞰してみる
Python 3.10の新機能を 俯瞰してみる
 
KyotoLT(Online) 第26回
KyotoLT(Online) 第26回KyotoLT(Online) 第26回
KyotoLT(Online) 第26回
 
AppSync導入のすすめ
AppSync導入のすすめAppSync導入のすすめ
AppSync導入のすすめ
 
みんなのPython勉強会#62
みんなのPython勉強会#62みんなのPython勉強会#62
みんなのPython勉強会#62
 
はんなりpython#32
はんなりpython#32はんなりpython#32
はんなりpython#32
 
Hannari python#27
Hannari python#27Hannari python#27
Hannari python#27
 
変数の重要度ってどうやったらわかるん?
変数の重要度ってどうやったらわかるん?変数の重要度ってどうやったらわかるん?
変数の重要度ってどうやったらわかるん?
 
みんなのはんなりPython勉強会
みんなのはんなりPython勉強会みんなのはんなりPython勉強会
みんなのはんなりPython勉強会
 
Pythonでも型をつけたいだけの人生だった
Pythonでも型をつけたいだけの人生だったPythonでも型をつけたいだけの人生だった
Pythonでも型をつけたいだけの人生だった
 

Lt debian 20190526