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。
- clang.debian.net
- llvm-clang
- LLVM's Clang Is Almost Good Enough For Debian
- Debian Is Still Being Made To Build With LLVM/Clang
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
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
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)。
其他
- 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
...