V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Osk
V2EX  ›  Linux

Systemd: 管天管地管一切

  •  
  •   Osk · 2017-03-05 22:05:44 +08:00 via Android · 15923 次点击
    这是一个创建于 2849 天前的主题,其中的信息可能已经有所发展或是发生改变。
    默默吐个槽, systemd 虽说挺给力的,但总感觉用力过猛了,导致这些年来每次想起 systemd 都是两个字:闹心。

    这次踩的坑不知道算不算是 systemd networkd 挖的,因为我需要给网卡配静态 ip 地址,就创建了一个 netctl 的 profile ,重启发现 ssh 连不上, ip 不通,登陆路由器发现是 dhcp 的 ip ,连上后看日志,该 profile 对应的 sercvice 报错了,一脸懵,我没安装其它的网络管理程序啊, dhcp 客户端服务也没启用,总之折腾了自己几次后才在 Arch wiki 上看到 systemd 的这个东东,禁用后果然正常了。不知道是自己万年不去看 wiki 还是很久前看得不仔细,反正这个问题搞得无比闹心。

    不太明白 systemd 这种管理一切的做法,甚至连 grub 的饭碗都要去抢
    54 条回复    2017-03-22 18:10:30 +08:00
    lianz
        1
    lianz  
       2017-03-05 22:14:16 +08:00   ❤️ 1
    在我看来, 新产品 /新技术到底好不好, 首先看看业界对它的接受程度, 业界普遍采用了, 那随大流 99%没错.
    回到 systemd, 虽然很多大牛喷, 但是主流发行版纷纷采用它不是没理由的. 所以我很看好它, 同时说实话我很喜欢它(主要我是被 init.d 脚本弄得太累心了)
    est
        2
    est  
       2017-03-05 22:28:49 +08:00
    k8s 笑而不语。这个框就没有不能装的东西。
    abcbuzhiming
        3
    abcbuzhiming  
       2017-03-05 22:31:38 +08:00
    我始终对这玩意报以戒心。我认同楼主说的用力过猛的言论。我还是更认同 Unix 的那个“最小职责”原则。至于这玩意为啥广泛能被业界采用?不要把老外当金科玉律,老外的技术界也是一堆翔,之前还不是爆出过仅仅因为政治正确就搞的某开源组织的领头人大换血的事件。
    daviswei
        4
    daviswei  
       2017-03-05 22:53:52 +08:00
    与 selinux 比,谁更用力过猛?
    reus
        5
    reus  
       2017-03-05 22:57:49 +08:00
    刚在 vultr 装了个 arch , networkd 默认是不启用的吧,我用 netctl 管理 ip ,没遇到什么问题。应该是某个过程里 networkd 服务被启用了。
    fuxkcsdn
        6
    fuxkcsdn  
       2017-03-05 23:07:07 +08:00
    刚把 Debian 升级到 7 的时候,被 systemd 给闹心了半天
    直到现在我每次用 apt-get 安装软件,想要修改脚本或者看下脚本是咋写的
    都要去把 deb 包下下来,解压,然后 tree 看下启动脚本都 TMD 放在哪个路径
    /etc/systemd/system
    /var/lib/systemd/system...
    反正我对这玩意是很反感
    DesignerSkyline
        7
    DesignerSkyline  
       2017-03-05 23:10:42 +08:00
    r#6 @fuxkcsdn 你需要先 enable
    nyanyh
        8
    nyanyh  
       2017-03-05 23:11:07 +08:00   ❤️ 3
    systemd 这个东西据说是借鉴了 OSX 上的 launchd ,我觉得 systemd 更好用。我个人也很喜欢这种包揽全局的 daemon ,虽然批判的也多,然而和 1l 说的一样,连 CentOS 都切换到 systemd 不是没有道理的
    BOYPT
        9
    BOYPT  
       2017-03-05 23:28:53 +08:00   ❤️ 1
    这还只是技术迁移过程的阵痛吧; 你想想 linux 里面有多少种配置组件、文件、格式配置全部各不相同互不通用。
    jimzhong
        10
    jimzhong  
       2017-03-05 23:33:03 +08:00 via Android
    我觉得 systemd 挺好的
    weyou
        11
    weyou  
       2017-03-05 23:58:40 +08:00 via Android
    其实就是一种习惯问题,现在大部分人不是都习惯于 ios 的包揽一切吗?
    54c3
        12
    54c3  
       2017-03-06 01:38:16 +08:00
    systemd 作為一種 init ,管網絡配置甚麼的還在情理之中,好奇怎麼做到管 bootloader 的。(求個相關 keyword
    54c3
        13
    54c3  
       2017-03-06 01:51:24 +08:00
    msg7086114
        14
    msg7086114  
       2017-03-06 03:45:17 +08:00 via Android
    上个月还抓了一个 networkd 的大虫,幸好官方及时修掉了…
    RqPS6rhmP3Nyn3Tm
        15
    RqPS6rhmP3Nyn3Tm  
       2017-03-06 04:24:25 +08:00 via iPhone
    Systemd 装预编译的软件包用起来很爽,但是真的要做修改的时候就爆炸了,都啥跟啥啥啊,根本看不到也不知道怎么改
    icylogic
        16
    icylogic  
       2017-03-06 06:31:34 +08:00
    @BXIA 不是修改一下 unit 就好了么 …… 里面的内容也算简单直观啊 ……

    找不到 unit 的:

    $ systemctl status systemd-networkd

    > ● systemd-networkd.service - Network Service
    > Loaded: loaded (/usr/lib/systemd/system/systemd-networkd.service; disabled; vendor preset: enabled)
    > Active: inactive (dead)
    > Docs: man:systemd-networkd.service(8)

    编辑:
    $ (sudo) systemctl edit systemd-networkd (--full)


    我用 Arch 是直接用 netctl 的,没有被 networkd 干扰过 ……

    $ systemd-analyze blame

    > 5.578s [email protected]
    > ...


    Arch Wiki:
    https://wiki.archlinux.org/index.php/Network_configuration
    Warning: Use a single method to manage the network, as several methods may conflict.

    https://wiki.archlinux.org/index.php/Systemd#Writing_unit_files
    /usr/lib/systemd/system/: units provided by installed packages
    /etc/systemd/system/: units installed by the system administrator
    Love4Taylor
        17
    Love4Taylor  
       2017-03-06 08:34:08 +08:00
    systemd 明明很好用啊
    netfee
        18
    netfee  
       2017-03-06 08:36:22 +08:00 via Android
    systemd +1
    lhbc
        19
    lhbc  
       2017-03-06 08:42:08 +08:00 via iPhone
    systemd 很好用
    redsonic
        20
    redsonic  
       2017-03-06 08:50:14 +08:00
    以后 linux 只需要下面几个组件: kernel , systemd , chrome , vim 。不是开发的,最后一个可以省了。
    we000
        21
    we000  
       2017-03-06 09:26:02 +08:00
    十几年的 Linux 用户表示支持 systemd
    qianguozheng
        22
    qianguozheng  
       2017-03-06 09:36:15 +08:00
    搞嵌入式的表示不引进
    jhaohai
        23
    jhaohai  
       2017-03-06 09:38:25 +08:00 via iPhone
    systemd 好用,有了 systemd 打包人员再也不用写蹩脚的启动脚本了
    Bardon
        24
    Bardon  
       2017-03-06 09:44:18 +08:00
    systemd version 32 以 cgroup v2 挂载才是坑...
    直接导致 docker 玩完,不得不将内核以 systemd.legacy_systemd_cgroup_controller=yes 方式启动
    jyf
        25
    jyf  
       2017-03-06 09:57:14 +08:00
    统一格式是好事 但是具体统一到 systemd 这个格式我觉得挺挫
    mengzhuo
        26
    mengzhuo  
       2017-03-06 09:58:03 +08:00
    总比自己写 init 好。。。曾经打过包的都知道这种痛
    wwhc
        27
    wwhc  
       2017-03-06 10:18:44 +08:00
    每次新装 Gentoo ,最重要的事情是加上 USE="-systemd......."
    这 2 货带来的麻烦实在太多了
    winooxx
        28
    winooxx  
       2017-03-06 10:30:04 +08:00
    ……我是觉得 systemd 比较好用来着
    nevill
        29
    nevill  
       2017-03-06 11:09:42 +08:00
    不知道为啥 upstart 没有流行起来,大家还都习惯 /etc/init.d 下自己写脚本,忽然 systemd 就流行起来了,这不科学。。。
    kn007
        30
    kn007  
       2017-03-06 11:12:46 +08:00 via Android
    同感,这也是我为什么没升级到 centos7 的原因,默默用着 6 。如果 centos7 能用 sysinit 我早就死机了
    kn007
        31
    kn007  
       2017-03-06 11:13:04 +08:00 via Android
    早就升级了。。。
    qian19876025
        32
    qian19876025  
       2017-03-06 11:41:34 +08:00
    真是太难用了 什么东西都要加个 XXX 前缀 不被喷才怪
    xinglp
        33
    xinglp  
       2017-03-06 12:16:55 +08:00 via Android
    @nevill 靠劫持 udevd 啊
    Quaintjade
        34
    Quaintjade  
       2017-03-06 12:32:23 +08:00
    对初学者来说很好用,表面看起来命令挺统一。
    xss
        35
    xss  
       2017-03-06 13:02:10 +08:00
    @fuxkcsdn 你用 dpkg -L 就行了, 何必折腾的这么麻烦. systemd 很好用, 只不过学习成本略高. 就像用 notepad++的喷 vim 是一个道理, 等会用了, 反而不习惯 sysv 风格的管理模式.
    SpicyCat
        36
    SpicyCat  
       2017-03-06 13:02:58 +08:00
    自己不熟怨它用力过猛?
    goodniuniu
        37
    goodniuniu  
       2017-03-06 13:05:07 +08:00
    有好的介绍文档推荐吗?转变太大,感觉无从入手。
    ehs2013
        38
    ehs2013  
       2017-03-06 13:08:47 +08:00
    @nevill C 社开发就是原罪
    discrete
        39
    discrete  
       2017-03-06 13:11:04 +08:00
    你这头像和帖子标题看着挺精分的……
    jsfaint
        40
    jsfaint  
       2017-03-06 13:24:15 +08:00
    @kn007 #30 然而 CentOS6 用的也不是 sysinit ,而是 ubuntu 已经抛弃的 upstart
    MntCw
        41
    MntCw  
       2017-03-06 13:26:46 +08:00 via Android
    不是应该 nmcli 看看连的是哪个 profile 吗?
    nevill
        42
    nevill  
       2017-03-06 13:55:07 +08:00
    @xinglp 不太明白你的意思,是吐槽说靠 udevd 不好么?对于大部分使用者来说这似乎并不重要,用 initctl 的方式写配置就能得到自运行的服务而且启动速度不慢,虽然比不上 systemd 这种还能利用 cgroup 的来管理进程组,但已经是比自写脚本更好的方式了。
    顺便吐槽一下,一些 node 程序员动不动要自己启一个 forever 来管理一堆进程 ╮(╯_╰)╭
    imn1
        43
    imn1  
       2017-03-06 14:33:35 +08:00
    /etc/NetworkManager/NetworkManager.conf
    managed=true/false (默认 false)
    其他配置参考 wiki

    service network-manager restart
    kn007
        44
    kn007  
       2017-03-06 14:51:42 +08:00 via Android
    @jsfaint 噢,对,说错。
    ggu2
        45
    ggu2  
       2017-03-06 15:11:36 +08:00 via Android
    Gentoo openrc 好
    okudayukiko0
        46
    okudayukiko0  
       2017-03-06 16:34:38 +08:00 via iPhone
    Debian 系的包的服务脚本还是 Systemd+init 混合的, BSD 就没有 systemd , Redhat 从 RHEL6 开始用 Upstart ,有 systemd 和 NetworkManager 对新手是件好事。
    Osk
        47
    Osk  
    OP
       2017-03-06 20:15:39 +08:00
    昨天睡前随便吐槽了下,主要是不知道 netowrkd 也能接管网络设置,折腾半天最后找到 networkd 这个“元凶”,那感觉真的是很无语。我最开始在 Arch 上用的 systemd ,感觉确实很不错,速度真的快, service 文件写起来也确实比以前写脚本方便点,但是后面用着用着踩了一些坑后,感觉就变味了。

    @lianz 我觉得 systemd 好的地方确实多, service 文件比写 init.d 脚本舒服得多,但是堂子越摆越大。
    @abcbuzhiming 我就是觉得 systemd 太庞大了,疯狂扩张的感觉。
    @reus 确实 networkd 默认没开启,可能是 Archlinux ARM 默认启用的,我装过很多次 Arch 还是第一次遇到它。
    @nyanyh systemd 算是红帽钦定的, RHEL 都用它, CentOS 用很正常。
    @BOYPT 这么一想淡定了。。。
    @weyou 不能接受设计人员限制的太死
    @icylogic 关键是不知道 networkd 重新造了这个轮子
    @redsonic emacs 呢
    @qianguozheng busybox 够用不?
    @jhaohai 这点确实很方便
    @MntCw @imn1 根本没有装 NetworkManager
    lhbc
        48
    lhbc  
       2017-03-06 20:53:26 +08:00 via iPhone
    Linux OS == GNU/Linux + systemd + OpenSSH + bash
    loading
        49
    loading  
       2017-03-06 21:50:15 +08:00 via Android
    当年为了启动快那么一点,冒死换到 system 。
    yunshansimon
        50
    yunshansimon  
       2017-03-06 22:27:54 +08:00   ❤️ 1
    非常讨厌 systemctl ,苹果的类似东西 launchctl 估计是除了分区类型以外最差的设计,被学到了 ubuntu 上。很喜欢 upstart 这样的,简洁明了。而且 systemctl 无论服务启动成功还是失败竟然没有任何提示,还要去 info ,或者 list-units 里面才能看到,这种脱裤子放屁的事情怎么能忍。
    redsonic
        51
    redsonic  
       2017-03-07 08:26:16 +08:00   ❤️ 1
    @Osk 有可能以后终端从内核移出, systemd 直接自带包管理器,加上虚拟机和 docker 的支持,接管整个用户态环境。就俩组件了 kernel 和 systemd 。什么? 这比 windows 的架构还激进.......
    ragnaroks
        52
    ragnaroks  
       2017-03-07 08:56:36 +08:00
    @yunshansimon #50
    +1,这是最恶心的,启动失败后什么也不输出,还得要手动查看一下
    okudayukiko0
        53
    okudayukiko0  
       2017-03-07 15:21:36 +08:00 via iPhone
    @yunshansimon 部分发行版 systemd 启动服务失败会报错(如 rhel ),部分发行版默认不会。只是从 init 到 systemd 升级而已,为什么要如此引战?
    chankay
        54
    chankay  
       2017-03-22 18:10:30 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   874 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 21:42 · PVG 05:42 · LAX 13:42 · JFK 16:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.