fangpsh's blog

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.

debian 8 sysvinit与systemd的切换

目前debian testing(2014-07-29)仍然采用sysv作为默认init系统,需手动安装软件包等切换至systemd。

$ sudo apt-get update

$ sudo apt-get install systemd 

#安装 systemd-sysv 后自动将systemd配置为默认init系统,
#同时移除sysvinit-core
$ sudo apt-get install systemd-sysv 

$ sudo reboot

重启之后,查看PID=1的进程是/sbin/init,再查看 /sbin/init会发现是/lib/systemd/systemd的软链接,至此,系统默认initsystem已切换至systemd。在debian 8 正式版发布之后,将采用systemd作为默认init系统,可能不需要用户手动切换。

systemd兼容性与注意事项

systemd的SySV兼容性内容请查看 详细介绍-系统管理-SysV兼容性一节,包含init script的注意事项等。

注意事项:

  • systemd定义了一批配置文件,请查看详细介绍-系统管理-规范化的配置文件一节。
  • systemd中runlevel的概念被target替代,telinit与init命令仍可使用。关于target与启动顺序内容,请查看详细介绍-系统管理-Target和Dependency based bootup 一节 与启动分析一节。
    • 注:使用systemd之后/etc/initab被忽略,所以修改此文件中的runlevel并不能起效。
  • debian with systemd下,service命令依然可用,但是service实际上是调用systemctl命令,详情请查看详细介绍-系统管理-SysV兼容性一节。
    • 注:service foobar status将返回systemctl类型的status内容,不再是foobar is runing .此类输出。
    • 建议使用systemctl命令或service命令,不建议使用/etc/init.d/<service>,因为后者无法处理sysv init文件被移除的状况。
  • service 单元执行的时候没有附带任何上下文环境,甚至没有进行 $HOME 目录的设置。对这些有依赖的启动脚本将无法正常工作。
  • /etc/rc.local依然可用,见/lib/systemd/system/rc-local.service 单元文件。
  • update-rc.d 命令依旧可用,但是注意:start与stop选项不再被支持。查看/usr/sbin/update-rc.d文件,可发现其对/etc/init.d/的处理部分以及针对systemd的service的处理部分。
    • systemctl enable/disable命令实际上调用update-rc.d命令。若不存在service单元文件,将对/etc/init.d/<service>下的脚本链接到/etc/rcN.d/目录下。若是service单元存在,将依照单元文件中[Install]中的内容将单元文件链接到对应的wants文件夹中。

      update-rc.d(8) should enable/disable systemd services in addition to creating the sysvinit links. update-rc.d is usually called from maintscripts, but enable/disable is typically used by the system administrator. systemctl enable/disable should also call update-rc.d

    • systemd Integration
    • 注:update-rc.d中 default 等同于"start 2 3 4 5 . stop 0 1 6 .",update-rc.d foobar defaults ,注意default是否与脚本中LSB部分指定的Start与Stop存在冲突。
  • 注意:systemd不支持交互式启动脚本,例如Debian‘s X-Interactive in the LSB header。
  • debian testing中的systemd的coredumpctl不可用,打包时候--disable-coredump,原因不明。
  • 默认情况下systemd的日志journal的磁盘存储需要手动创建目录,否则重启将丢失日志记录,请查看详细介绍日志管理-日志的记录等-日志存储一节。

本节参考链接

Clang

Clang support as a secondary compiler.

goal:Clang as a second compiler

一方面由于Clang相对于GCC有更多特性(模块化设计、更快的编译速度、编译过程占用内存低、编译中间产物和最终链接产物大幅减少、编译错误提示友好等等),另一方面由于Clang目前已足够稳定与优秀,所以 Debian 8支持Clang作为辅助编译器。

Debian 仓库中的软件包正被重新用Clang进行编译打包,进度与详情请查看 clang.debian.net

Piuparts clean archive

Piuparts是一个deb打包的质量检测工具,在debian 8中要求所有软件包必须通过picparts的相关检测。

Piuparts介绍:

piuparts is a tool for automatic testing of whether a package can be installed, upgraded, and removed. Like [Lintian], it is useful to run in a centralized fashion, in addition to each package maintainer running it manually.

Debian 8需要达到以下目标:

All packages should pass the piuparts tests, IOW that installation (and upgrade) of a package (within the test setup on piuparts.d.o) works fine and also that it purges cleanly.

UTF-8 support

UTF-8 support

four sub-goals:

  • all programs should, in their default configuration, accept UTF-8 input and pass it through uncorrupted. Having to manually specify encoding is acceptable only in a programmatic interface, GUI/std{in,out,err}/ command line/plain files should work with nothing but LC_CTYPE.
  • all GUI/curses/etc programs should be able to display UTF-8 output where appropriate
  • all file names in source and binary packages must be valid UTF-8
  • all text files should be encoded in UTF-8

SELinux support

Goal:

Allow the users to enable SELinux enforcing mode on their machine without too much hassle.

  • Improve the SELinux reference policy, this is currently being worked out with upstream.
  • Be sure that when a init/maintainer script is creating a file/directory the label on disk is properly (re)set.
  • Be sure that SELinux aware applications have SELinux support enabled and that's it's working properly

debain 8只是将改进对SELinux的支持,目标如上。 debian 8还不会默认启用SELinux,debian testing上目前默认未安装SELinux系统所需的软件包(除了libselinux1:SELinux runtime shared libraries)。

其他

请参考Release Goals

  • Hardening of ELF binaries (carry over from Wheezy)
  • Debian/rules to honor CC/CXX flags
    • This goal aims to make sure that any package in the archive could be rebuild with the command CC=foo CXX=bar dpkg-buildpackage.
  • Cross toolchains in the archive
  • Make the base system cross-buildable
  • 注意:debian testing 默认关闭root用户ssh远程登录
  • debian testing安装流程基本无变化。若不使用网络源,taskel仅有且默认选中Debian desktop environment与Standard systemd utilities;若使用网络源,taskel默认选中Debiandesktop 、print server与standard systemd utilities。
  • 注:由于debian jessie目前未冻结,关于软件包版本变化的调查未进行。
  • package mysql-server:wheezy(stable):5.5.38-0,jessie(testing):5.5.37-1,

本节参考链接

Debian 8 升级注意事项

rc.local拆分为service单元

目前/etc/rc.local文件依旧可用,systemd存在默认的rc-local.service单元。

往rc.local文件中写入大量的启动初始化语句会导致rc.local难以维护与管理。参考systemd默认提供的rc-local.service单元,我们可以将原本写入的rc.local文件合理的拆分为多个文件, 例如rc-route.local,rc-screensaveroff.local等,与rc.local同样,将这些local文件chmod +x。然后在/etc/systemd/system下创建类似rc-local.service的单元文件, 例如rc-route.service,rc-screensaveoff.service等,service文件的编写请查看 详细介绍--进程管理--服务进程管理一节,以及参考rc-local.service文件。 编写好service文件之后,重载systemd进程,然后systemctl enable这些service即可,后续若需要禁用或修改某些启动脚本,只需配置对应单元以及脚本即可。

Debian testing systemd-208-6 CONFFLAGS

请关注systemd源码包下rules文件中 disable 的模块或功能,例如 coredump:

...
CONFFLAGS = \
        --with-rootprefix= \
        --with-rootlibdir=/lib/$(DEB_HOST_MULTIARCH) \
        --with-sysvinit-path=/etc/init.d \
        --with-sysvrcnd-path=/etc \
        --with-firmware-path=/lib/firmware \
        --with-debug-shell=/bin/bash \
        --with-telinit=/lib/sysvinit/telinit \
        --enable-tcpwrap \
        --disable-coredump \
        --disable-efi \
        --disable-myhostname \
        --disable-vconsole \
        --disable-silent-rules
ifeq (,$(findstring stage1,$(DEB_BUILD_PROFILES)))
CONFFLAGS += --enable-libcryptsetup
endif

CONFFLAGS_deb = \
        --enable-selinux \
        --enable-introspection \
        --enable-gtk-doc
...