From 90d989b1d8051d348aa4a7d8125f9485a31fdf38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Wed, 19 Sep 2012 19:09:02 +0200 Subject: [PATCH] add systemd-on-raspbian --- Gemfile.lock | 71 ++++++++ plugins/ruby_python_arch_linux_fix.rb | 1 + source/_includes/custom/richobject.html | 15 ++ .../2012-09-19-systemd-on-raspbian.markdown | 155 ++++++++++++++++++ 4 files changed, 242 insertions(+) create mode 100644 Gemfile.lock create mode 100644 plugins/ruby_python_arch_linux_fix.rb create mode 100644 source/_includes/custom/richobject.html create mode 100644 source/_posts/2012-09-19-systemd-on-raspbian.markdown diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..304092a --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,71 @@ +GIT + remote: https://github.com/akzhan/pygments.rb.git + revision: 11422be8de49703021a2fb85eafe55caab5fc2af + specs: + pygments.rb (0.2.12) + rubypython (~> 0.6.1) + +GEM + remote: http://rubygems.org/ + specs: + RedCloth (4.2.9) + chunky_png (1.2.5) + classifier (1.3.3) + fast-stemmer (>= 1.0.0) + compass (0.12.2) + chunky_png (~> 1.2) + fssm (>= 0.2.7) + sass (~> 3.1) + directory_watcher (1.4.1) + fast-stemmer (1.0.1) + fssm (0.2.9) + haml (3.1.7) + jekyll (0.12.0) + classifier (~> 1.3) + directory_watcher (~> 1.1) + kramdown (~> 0.13.4) + liquid (~> 2.3) + maruku (~> 0.5) + kramdown (0.13.7) + liquid (2.3.0) + maruku (0.6.1) + syntax (>= 1.0.0) + posix-spawn (0.3.6) + rack (1.4.1) + rack-protection (1.2.0) + rack + rake (0.9.2.2) + rb-fsevent (0.9.1) + rdiscount (1.6.8) + rubypants (0.2.0) + rubypython (0.6.2) + blankslate (>= 2.1.2.3) + ffi (~> 1.0.7) + sass (3.1.19) + sinatra (1.3.2) + rack (~> 1.3, >= 1.3.6) + rack-protection (~> 1.2) + tilt (~> 1.3, >= 1.3.3) + stringex (1.4.0) + syntax (1.0.0) + tilt (1.3.7) + yajl-ruby (1.1.0) + +PLATFORMS + ruby + +DEPENDENCIES + RedCloth (~> 4.2.9) + compass (~> 0.12.2) + haml (~> 3.1.7) + jekyll (~> 0.12) + liquid (~> 2.3.0) + pygments.rb! + rack (~> 1.4.1) + rake (~> 0.9.2) + rb-fsevent (~> 0.9) + rdiscount (~> 1.6.8) + rubypants (~> 0.2.0) + rubypython (~> 0.6.1) + sinatra (~> 1.3.2) + stringex (~> 1.4.0) diff --git a/plugins/ruby_python_arch_linux_fix.rb b/plugins/ruby_python_arch_linux_fix.rb new file mode 100644 index 0000000..a43ec65 --- /dev/null +++ b/plugins/ruby_python_arch_linux_fix.rb @@ -0,0 +1 @@ +RubyPython.start :python_exe => 'python2.7' diff --git a/source/_includes/custom/richobject.html b/source/_includes/custom/richobject.html new file mode 100644 index 0000000..78a4905 --- /dev/null +++ b/source/_includes/custom/richobject.html @@ -0,0 +1,15 @@ + + +{% if page.title %} + + + {% if page.cover %} + + {% endif %} +{% else %} + + + {% if site.cover %} + + {% endif %} +{% endif %} diff --git a/source/_posts/2012-09-19-systemd-on-raspbian.markdown b/source/_posts/2012-09-19-systemd-on-raspbian.markdown new file mode 100644 index 0000000..1cc79cd --- /dev/null +++ b/source/_posts/2012-09-19-systemd-on-raspbian.markdown @@ -0,0 +1,155 @@ +--- +layout: post +title: "Systemd on raspbian" +date: 2012-09-19 17:16 +comments: true +categories: systemd raspberry pie raspbian +--- + +As I like the stability and raw speed of systemd, I wanted to leave debian's +init system behind and switch to systemd. + +The basic installation is pretty easy: + + $ apt-get install systemd + +Then you need to tell the kernel to use systemd as the init system: + +To do so, append `init=/bin/systemd` to the end of `/boot/cmdline.txt` line + + $ cat /boot/cmdline.txt + dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait init=/bin/systemd + +If you reboot, systemd will be used instead of the default init script. + +Currently debians version of systemd doesn't ship many service files by default. Systemd +will automaticly fallback to the lsb script, if a service file for a deamon is +missing. So the speedup isn't as big as on other distributions such as archlinux +or fedora, which provide a deeper integration. + +To get a quick overview, which services are started nativly, type the following command: + + $ systemctl list-units + +All descriptions containing `LSB: ` are launched through lsb scripts. + +Writing your own service files, is straight forward. If you add custom service +files, put them in /etc/systemd/system, so they will not get overwritten by +updates. + +To get further information about systemd, I recommend the [great archlinux wiki article](https://wiki.archlinux.org/index.php/Systemd). + +At the end of this article, I provide some basic one, I use. I port them over mostly from archlinux. +In the most cases, i just have adjusted the path of the binary to get them working. (from /usr/bin to /usr/sbin for ex.) +It is important, that the service name match with the initscript, so it will be used instead by systemd. +This will not work in all cases like dhcpcd which contains the specific network device (like dhcpcd@eth0). In this case, you have to remove origin service with `update-rc.d` and enable the service file with `systemctl enable`. + +Also avaible as [gist](https://gist.github.com/ac8ab2e84125ededa5c5): + +``` plain /etc/systemd/system/dhcpcd@.service +# IMPORTANT: only works with dhcpcd5 not the old dhcpcd3! +[Unit] +Description=dhcpcd on %I +Wants=network.target +Before=network.target + +[Service] +Type=forking +PIDFile=/run/dhcpcd-%I.pid +ExecStart=/sbin/dhcpcd -A -q -w %I +ExecStop=/sbin/dhcpcd -k %I + +[Install] +Alias=multi-user.target.wants/dhcpcd@eth0.service +``` + +``` plain /etc/systemd/system/monit.service +[Unit] +Description=Pro-active monitoring utility for unix systems +After=network.target + +[Service] +Type=simple +ExecStart=/usr/bin/monit -I +ExecStop=/usr/bin/monit quit +ExecReload=/usr/bin/monit reload + +[Install] +WantedBy=multi-user.target +``` + +``` plain /etc/systemd/system/ntp.service +[Unit] +Description=Network Time Service +After=network.target nss-lookup.target + +[Service] +Type=forking +PrivateTmp=true +ExecStart=/usr/sbin/ntpd -g -u ntp:ntp +ControlGroup=cpu:/ + +[Install] +WantedBy=multi-user.target +``` + +``` plain /etc/systemd/system/sshdgenkeys.service +[Unit] +Description=SSH Key Generation +ConditionPathExists=|!/etc/ssh/ssh_host_key +ConditionPathExists=|!/etc/ssh/ssh_host_key.pub +ConditionPathExists=|!/etc/ssh/ssh_host_ecdsa_key +ConditionPathExists=|!/etc/ssh/ssh_host_ecdsa_key.pub +ConditionPathExists=|!/etc/ssh/ssh_host_dsa_key +ConditionPathExists=|!/etc/ssh/ssh_host_dsa_key.pub +ConditionPathExists=|!/etc/ssh/ssh_host_rsa_key +ConditionPathExists=|!/etc/ssh/ssh_host_rsa_key.pub + +[Service] +ExecStart=/usr/bin/ssh-keygen -A +Type=oneshot +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target +``` + +``` plain /etc/systemd/system/ssh.socket +[Unit] +Conflicts=ssh.service + +[Socket] +ListenStream=22 +Accept=yes + +[Install] +WantedBy=sockets.target +``` + +``` plain /etc/systemd/system/ssh@.service +[Unit] +Description=SSH Per-Connection Server +Requires=sshdgenkeys.service +After=syslog.target +After=sshdgenkeys.service + +[Service] +ExecStartPre=/bin/mkdir -m700 -p /var/run/sshd +ExecStart=-/usr/sbin/sshd -i +ExecReload=/bin/kill -HUP $MAINPID +StandardInput=socket +``` + +``` plain /etc/systemd/system/ifplugd@.service +[Unit] +Description=Daemon which acts upon network cable insertion/removal + +[Service] +Type=forking +PIDFile=/run/ifplugd.%i.pid +ExecStart=/usr/sbin/ifplugd %i +SuccessExitStatus=0 1 2 + +[Install] +WantedBy=multi-user.target +```