systemd в gentooПодписка на Комментарии к "systemd в gentoo"

Аватар ormorph

Решил обновить систему, за одно размаскировал последний Gnome-3.8, после полной переборки и обновления мира, обнаружил что udev уже нет, а вместо него стоит systemd.

Путем некоторых манипуляций все таки удалось запустить систему с systemd, первое что нужно для полной поддержки, это добавить в make.conf флаг systemd и пересобрать мир с поддержкой новых флагов, после этого пересобрать ядро с поддержкой systemd, ранее ядро нельзя пересобирать с поддержкой systemd нельзя, так как busybox ранее, должен быть собран с этой поддержкой, чтобы потом быть включенным в файл initrd.
Подробнее про параметры ядра можно посмотреть в вики

Первое что не понравилось в использовании systemd так это то что стандартные скрипты gentoo теперь не работают, и теперь чтобы обеспечить работоспособность, пришлось переписывать свои скрипты для запуска в systemd.

Например скрипт zram:
Ранее в gentoo он выглядел так:

#!/sbin/runscript

MODULE=`zgrep CONFIG_ZRAM= /proc/config.gz|sed 's/CONFIG_ZRAM=//'`
checkconfig(){
        if [[ "$MODULE" == "y" ]] ; then
            return 0
        elif [[ "$MODULE" == "m" ]] ; then
            return 0
        fi
        eerror "Kernel does not support zram function. Recompile a kernel"
        return 1
}

CPU=`awk -v cpu=0 '$1 == "processor" {cpu=cpu+1} END {print cpu}' /proc/cpuinfo`
SIZE=`awk -v cpu=$CPU '$1 == "MemTotal:" {print ((0 + $2) * 1024)/cpu}'  /proc/meminfo`

start(){
    checkconfig || return 1
        ebegin "Starting zram"
    if [[ "$MODULE" == "m" ]] ; then
                modprobe zram num_devices=$CPU
    fi
        for (( i=0; i<$CPU; i++ ))
        do
                echo $SIZE > /sys/block/zram$i/disksize
                mkswap /dev/zram$i
                swapon -p 10 /dev/zram$i
        done
    eend $?
}

stop(){
        ebegin "Deactivating zram swap"
        for (( i=0; i<$CPU; i++ ))
        do
                swapoff /dev/zram$i
                echo 1 > /sys/block/zram$i/reset
        done
    if [[ "$MODULE" == "m" ]] ; then
        modprobe -r zram
    fi
        eend $?
}

Теперь необходимо переделать его для загрузки в systemd, для этого можно создать каталог для скриптов, у меня это /usr/lib/systemd/scripts, в него положил уже измененный скрипт /usr/lib/systemd/scripts/zram:

#!/bin/bash

MODULE=`zgrep CONFIG_ZRAM= /proc/config.gz|sed 's/CONFIG_ZRAM=//'`
checkconfig(){
        if [[ "$MODULE" == "y" ]] ; then
            return 0
        elif [[ "$MODULE" == "m" ]] ; then
            return 0
        fi
        echo "Kernel does not support zram function. Recompile a kernel"
        return 1
}

CPU=`awk -v cpu=0 '$1 == "processor" {cpu=cpu+1} END {print cpu}' /proc/cpuinfo`
SIZE=`awk -v cpu=$CPU '$1 == "MemTotal:" {print ((0 + $2) * 1024)/cpu}'  /proc/meminfo`

start(){
    checkconfig || return 1
        echo "Starting zram"
    if [[ "$MODULE" == "m" ]] ; then
                modprobe zram num_devices=$CPU
    fi
        for (( i=0; i<$CPU; i++ ))
        do
                echo $SIZE > /sys/block/zram$i/disksize
                mkswap /dev/zram$i 2>/dev/null
                swapon -p 10 /dev/zram$i 2>/dev/null
        done
    #eend $?
}

stop(){
        echo "Deactivating zram swap"
        for (( i=0; i<$CPU; i++ ))
        do
                /sbin/swapoff /dev/zram$i
                echo 1 > /sys/block/zram$i/reset
        done
    if [[ "$MODULE" == "m" ]] ; then
        modprobe -r zram
    fi
        #eend $?
}


case $1 in
   start) start;;
   stop ) stop;;
esac

Далее для запуска нужно создать файл /usr/lib/systemd/system/zram.service со следующим содержимым:

[Unit]
Description=zram devices
After=syslog.target

[Service]
Type=oneshot
ExecStart=/usr/lib/systemd/scripts/zram start
ExecSop=/usr/lib/systemd/scripts/zram stop
RemainAfterExit=yes
StandardOutput=syslog

[Install]
WantedBy=multi-user.target

Далее остается добавить скрипт в автозагрузку командой:
# systemctl enable zram

Для использования менеджера входа в систему lightdm например собранный с флагом kde, придется выполнить следующие действия:
Создать файл /usr/lib/systemd/system/lightdm.service со следующим содержимым:

[Unit]
Description=Light Display Manager
Documentation=man:lightdm(1)
After=systemd-user-sessions.service

[Service]
ExecStart=/usr/sbin/lightdm

[Install]
Alias=display-manager.service

Подключить тему командой:

# /usr/libexec/lightdm/lightdm-set-defaults -g lightdm-kde-greeter

И поставить lightdm в автозагрузку.
# systemctl enable lightdm

далее останется только перезагрузка.

Так же после обновления обнаружил что не работают старые команды в oblogout для перехода в спящий режимы, пришлось заменить на другие, это подправить файл /etc/oblogout.conf, получились такие измененные строчки:

suspend = dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.Suspend boolean:true

hibernate = dbus-send --system --print-reply --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.Hibernate boolean:true

С интернетом я особо не мучился, тут при использовании NetworkManager, настройки те же.

Вывод:
В systemd работать можно, из плюсов более быстрая загрузка системы и быстрое выключение. Минусов получилось пока на много больше, это splash темы для загрузки больше ориентированны на использование openrc, скрипты инициализации gentoo на мой взгляд на много удобней и не требуют больших телодвижений, может конечно в будущем это изменится, но система скриптов openrc на много проще, хотя возможно это дело привычки.

Аватар zenon

А скриптов systemd как не было нормальных так и вряд ли скоро будут в Gentoo, потому как почти никто не пользуется, в отличии от Fedora и иже с ними, я ещё год назад systemd пробовал пользоваться, половину скриптов таскал с арча...

Аватар ormorph

Да уж, не знаю зачем новый гном надо было переводить на systemd...
Пока обратно не буду переходить, слишком уж долго обновляться придется, потом уж когда дерево устареет немного, просто хотелось посмотреть что же там в последнем гноме наделали.
В принципе систему довел до прежнего состояния, так что разница особая пока не ощущается.
Тут мне таскать не особо было от куда, так как скрипт самописный, по этому пришлось переделывать под systemd.
В принципе ко всему можно привыкнуть, но позже думаю все таки перебежать обратно, этот зверь не очень красиво считается со splash темами ядра, которые в gentoo, плюс еще скрипты переделывать приходится. Похоже разработчики гнома еще те извращенцы...

Аватар ormorph

Ну даже не знаю что и сказать, я даже ебилды переделывал..
Собраться то собралось без Systemd, но десктоп так и не запускается..
Даже не знаю чему и верить, пока верю своим глазам и своим кривым рукам))

А так вот посмотрел исходник там есть файл NEWS, в нем наткнулся на такую строчку:
uses a different API, provided by systemd on some systems.

Посмотрим что будет в следующих релизах.

Добавить комментарий