FPs

Articles with the systemd tag

Systemd 日志管理相关

coredump管理

注:debian testing中systemd(204)的coredumpctl目前不可用,打包时候选择了--disable-coredump,原因不明。本节实验在fedora20上完成(with systemd-208)。

开启core dump

#ulimit -c

输入以上命令看看返回值,如果是非0,则表示core dump功能已开启,如果是0,需要手动开启。

手动开启(例:无限制存储、64MB)

#ulimit -c unlimited
#ulimit -c 67108864

注:以上设置只在当前终端下生效,全局设置可以在/etc/profile.d/目录新建配置文件写入配置信息。

获取core dump文件

systemd下使用coredumpctl工具获取的core dump是来自它的journal,即在磁盘目录上是找不到存储文件的(注:215有变化,见下面)。

查看所有的core dump记录:

# systemd-coredumpctl
# systemd-coredumpctl list '要匹配的字符串'

需要将core dump导出为文件,只需指定--output=FILE。另外coredumpctl可以根据PID、进程名称、执行路径等对code dump进行筛选,更多选项请man coredumpctl

注:systemd-215开始,可以配置为自动将coredumps存储在磁盘上(/var/lib/systemd/coredump,可能会经过压缩)。这个选项是默认开启的,配置文件在/etc/systemd/coredum.conf

Continue ->

Systemd 设备管理相关

Mount handling

systemd中的.mount单元文件主要用于管理分区,功能上与/etc/fstab类似。目前的调查深度下,还未发现.mount有相比/etc/fstab更多的特性,官方用户手册中也提到:

“In general, configuring mount points through /etc/fstab is the preferred approach.”

实际上systemd中的mount单元可以说是mount命令的一份配置文件,因为systemd进行挂载文件时候是按照mount单元的配置调用mount命令。

设备挂载信息可以写在.mount单元文件中,也可以写在/etc/fstab文件中。在/etc/fstab中的挂载配置信息,在系统启动阶段systemd会调用systemd-fstab-generator/etc/fstab中的配置条目转化为原生的单元文件然后挂载。对于/etc/fstab中部分特殊的选项,systemd会自动处理依赖,创建WantsRequires等(见下文中的nofail选项)。

/etc/fstab部分与systemd有关联的配置选项:

  • x-systemd.automount:将自动创建systemd中的.automount单元文件,分区只有需要访问时才会被挂载,内核会缓存所有的文件操作,直到分区准备完成。
  • x-systemd.device-timeout=:设置访问分区的超时时间,单位可为:s,min,h,ms。在挂载远程文件系统时候此选项可以防止网络资源不能访问的时候浪费时间。
  • nofail, fail:设置为nofail时,分区只是被wanted,而非required,意味着启动时若设备不存在直接忽略它而不报错。fail意义则相反,fail选项为默认设置。
  • noauto, auto:设置为noauto时,分区只在用户的命令下被挂载,同时也将不会被添加作为local-fs.target的依赖,即在启动时候将不会挂载。auto选项的意义相反。
  • x-initrd.mount:挂载一个额外的文件系统在initramfs中。参考initrd-fs.target。(不太理解具体意义)

若一个挂载点在/etc/fstab/usr/目录的\.mount的单元文件中都进行了配置,前者的优先级更高。若\.mount是存在/etc目录下的,则后者的优先级更高。

native unit files take precedence over traditional configuration files, but this is superseded by the rule that configuration in /etc will always take precedence over configuration in /usr.

配置选项与实例

.mount单元文件的命名规范:mount单元必须以文件系统中挂载点的路径来进行命名,路径中的/-替换。

例:挂载点/home/lennart的配置必须写在名为home-lennart.mount的单元文件中

.mount单元文件中,[Unit]和[Install]两个Section与其他单元文件无差别,

Continue ->

Systemd 进程管理相关

服务进程管理

本节将从service单元文件的编写(基础选项、起停及重载选项、依赖性处理选项,资源限制选项等),对服务进程基本操作,进程和进程组的查看和如何更好的杀死服务进程 四个方面介绍systemd下服务进程的管理。

service单元文件

systemd 的单元文件是受 XDG Desktop Entry .desktop 文件启发而产生,而最初起源是 Windows 下的 .ini 文件。 .service 文件是systemd的本地配置文件,类似于 sysvinit 中的 /etc/init.d 里脚本的作用。

一个.service 文件一定包含三个Sections,分别是[Unit]、[Service]、[Install]。每个Section有不同的Key,例如Unit常见有Description、Documentation、Requires等,Service常见有Type等,Install常见有Alias、WantedBy=、RequiredBy等,具体查看 man systemd.unit,以及 man systemd.service

systemd单元文件的加载路径(优先级从上到下依次降低):

系统模式

/etc/systemd/system/*
/run/systemd/system/*
/usr/lib/systemd/system/*
...

注:debian 下,关注:/lib/systemd/systemd/*目录。一般来说,自己定义的.service 放在/etc/systemd/system下。

Continue ->

Systemd 系统管理相关

从本文开始将对Systemd 与系统的方方面面相关的作用和功能进行分店详细介绍,除去基础概念以及注意事项,部分小节包含实例已帮助您理解。
再次提醒,由于个人水平和能力有限,对某些小节未能深入详细的叙述和论证,若您需要深入了解相关内容请参考对应小节参考链接,或需求其他资料。

规范化的配置文件

在Systemd 中定义了一批公用配置文件,systemd 希望通过推广和使用这些配置文件,在Linux 的各类发行版中形成标准,以解决目前各大发行版配置文件五花八门的情况。
配置文件列表:

  • /etc/hostname: 主机名。在不同的发行版上主机名存在不同的文件中,例如Fedora:/etc/sysconfig/network,OpenSUSE:/etc/HOSTNAME。systemd采用的是debian的配置文件:/etc/hostname。
  • /etc/vconsole.conf: 默认键盘映射与终端字体配置。
  • /etc/locale.conf: 配置系统全局locale。
  • /etc/modules-load/*.conf: 启动时候静态加载内核模块的配置。
  • /etc/sysctl.d/*.conf: 内核sysctl参数配置,此处配置文件作为/etc/sysctl.conf的扩展。
  • /etc/tmpfiles.d/*.conf: 临时文件的创建、删除、清空的配置。
  • /etc/binfmt.d/*.conf: 系统附加二进制格式支持的配置。
  • /etc/os-release: 包含操作系统基础信息,例如操作系统名称,版本,主页等等。(注:debian 7已存在此文件,格式相同)。
    • 例(debian testing x86)
 PRETTY_NAME="Debian GNU/Linux jessie/sid"  
 NAME="Debian GNU/Linux"  
 ID=debian  
 HOME_URL="http://www.debian.org/"
 SUPPORT_URL="http://www.debian.org/support/"
 BUG_REPORT_URL="http://bugs.debian.org/"

注: systemd 215之后,`/etc/os-release`被移到`/usr/lib/os-release`,原来的`/etc/os-release`将是后者的软链接。     
  • /etc/machine-id:机器ID。详细信息在后文Unique Machinehandling ID一节详细介绍。
  • /etc/machine-info:包含机器元数据,主要是主机名,图标名称和图片等等。详细信息在后文Dynamic host name and machine meta data handling一节详细介绍。

/etc/hostname

systemd定义的/etc/hostname 文件参考自发行版debian,路径与文件名称、格式等等与debian相同。

注:debian中的/etc/debian_version 文件依旧存在且无变化。

Continue ->

Systemd 基础介绍

Systemd 这个系列文章是大三时在某游戏公司实习整理的文档,按照内容做了下整理,拆分为几篇文章发出来,内容比较杂乱粗浅,如果能对他人有些帮助也是极好的了。

前言

systemd 是 Linux 下的一种 init 软件,由 Lennart Poettering 带头开发,并 在 LGPL 2.1 及其后续版本许可证下开源发布。其开发目标是提供更优秀的 框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启 动,同时达到降低 Shell 的系统开销的效果,最终代替现在常用的 System V 与 BSD 风格 init 程序。  
init(为英语:initialization 的简写)是 Unix 和类 Unix 系统中用来产生其 它所有进程的程序。它以守护进程的方式存在,其进程号为 1。  

关于 init 的基础介绍请阅读 wikipedia [init 条目](https://en.wikipedia.org/wiki/Init)

Systemd 由于众多出色的特性以及良好的兼容性已经被各大发行版采用作为默认 init 程序,例如 openSUSE(12.1+)、Fedora(15+)、ArchLinux(2012-10-13+)等。 Debian 技术委员会经过投票 (The Debian technical committee vote concludes) 之 后决定 Debian 的下一个版本 Debian8(别名:jessie)中以 Linux 为内核的版本将转 换到 systemd。之后,基于 Debian 的下游发行版 Ubuntu 也宣布将切换到 systemd。 所以 systemd 将是下一代的 init 程序,有必要在 debian 8 发布之前对其进行详细的 调研。

本文是以 debian 8 为调研平台,systemd 为调研目标整理撰写而成,除去前言部 分外,包含以下部分:

  • 基础介绍
    • systemd 基础介绍,systemd 相关基础概念与特性的介绍等。
  • 启动分析
    • 分析 Linux 启动过程中 systmed 启动部分。
  • 详细介绍
    • 对 systemd 在系统管理、进程管理、设备管理、日志管理等等方面进行分点 详细介绍。
  • 附录
    • debian7-8 目前已知的更新与变化。
    • 通用初始化脚本的更新。
    • 其他升级注意事项

注 1: 本文摘录和引用了大量其他资料,由于时间与人力限制未能一一注明来源。 如要切实深入的了解 systemd 某一部分的内容,建议您认真阅读对应章节后的参考链 接所指向的内容。

注 2:本文整理撰写以及进行 systemd 的相关实验时,debian 8 还未冻结,实验 平台为 debian testing 分支,systemd 版本为 208,所以部分内容日后看来准确性可 能会有所偏差。

注 3:章节前带 [!] 符号的表示此节为较重要的内容。

Continue ->

使用Systemd 的Linux 的启动过程

这篇文章原来是知乎上一个朋友的问题--Systemd 的详细启动过程是怎样的 的回答。
回答这个问题前需要了解一下计算机的启动过程和Linux 的启动过程,才能完整串起来。 关于计算机的启动,可以先阅读一下阮一峰的文章:计算机是如何启动的?,这篇文章在系统启动部分,大概提到了Linux 系统的启动, 不过不是十分详细,可以再看他的另一篇文章:Linux 的启动过程,文章所介绍的Init 程序是传统的Sysv。 而使用Systemd 的Linux 系统的差别就是在 Init 程序这一阶段。
在加载内核之前的阶段,这篇文章讲的挺细,可以顺便读一读:详解linux系统的启动过程及系统初始化

然后可以读一下这篇文章,对Systemd 的基础介绍,非常不错:浅析 Linux 初始化 init 系统,第 3 部分: Systemd,感觉IBM developerworks 的文章质量都挺不错的。

虚拟文件系统Initrd,启动到这一步之后,通过Switch-root 转到 Init 程序,即Systemd(也可以是Sysv 之类的),后面就是Systemd 如何启动服务进程的问题。
Initrd 这一步,Systemd 其实也可以接管,具体参考:initrd with systemd

在传统的Sysv 中,有Runlevel(启动级别)的概念,在Systemd 里面有Target 的概念,如下图:

runlevel

Systemd 有个单元文件(Unit)的概念,可以理解成一个单元文件就是一个服务单元,有很多类型的单元文件,Mount、Device、Service、Path、Timer 等,最常见的就是Service 单元:

例:/usr/lib/systemd/system/named.service,具体的解释请看官方文档:

[Unit]
Description=Berkeley Internet Name Domain (DNS)
Wants=nss-lookup.target
Wants=named-setup-rndc.service
Before=nss-lookup.target
After=network.target
After=named-setup-rndc.service

[Service]
Type=forking
EnvironmentFile=-/etc/sysconfig/named
Environment=KRB5_KTNAME=/etc/named.keytab
PIDFile=/run/named/named.pid

ExecStartPre=/usr/sbin/named-checkconf -z /etc/named.conf
ExecStart=/usr/sbin/named -u named $OPTIONS

ExecReload=/bin/sh -c '/usr/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID'

ExecStop=/bin/sh -c '/usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID'

PrivateTmp=true

[Install]
WantedBy=multi-user.target

Target 也是一种单元文件,但是它是引用和组织其他的单元文件,定义组织各种依赖关系。所以,Target 肯定可以实现Runlevel 的作用,只要定义六个Target 就可以了嘛。 再看看下面这张图,就大致明白了启动的时候是怎么加载服务进程的:

bootup

更多细节,以及关机的过程请参考:bootup


Debian 8 升级相关信息

Debian7-8更新与变化

Debian Installer Jessie Alpha 1 release

2014年3月19号,debian installer jessie alpha 1发布,摘录部分更新与变化如下:

  • apt-setup: Avoid hang due to interactive apt-cdrom#740673
  • grub-installer: Support menu selection of GRUB boot disk#706112
  • The ia64 architecture has been removed from the archive, and is no longer supported.
  • The Linux kernel has been updated from 3.2 to 3.13.(注:debian 8的内核版本将为3.16)

参考链接:

Linux Knernel

Debian 8 默认内核版本将为3.16。

Systemd

Add native systemd support to every package shipping a sysvinit script

Debian 8将采用systemd作为默认init系统,同时systemd将兼容Debian仓库中的所有包含sysv脚本的软件包。

Native systemd support for every Debian package that currently contains sysv scripts.

Continue ->