LINUX.ORG.RU

Подготовка /home в Systemd на LiveCD

 ,


1

1

Здравствуйте. Сегодня впервые споткнулся о systemd. Собираю LiveCD при помощи Archiso. Мне нужно, чтобы создавался хомяк для пользователя, все файлы из /etc/skel туда перемещались и запускался KDM. Взял, создал файл в каталоге root-image (это то, что накладывается поверх системы) etc/preparerun с содержимым:

mkdir /home/sergey && chown sergey /home/sergey
su -c "cp -r /etc/skel/.[a-zA-Z0-9]* /home/sergey/" sergey
/usr/bin/kdm -nodaemon
, сделал его исполняемым, и изменил kdm.service так, что теперь он не kdm -nodaemon должен запускать, а этот скрипт. Содержимое kdm.service:
[Unit]
Description=K Display Manager
After=systemd-user-sessions.service

[Service]
ExecStart=/etc/preparerun

[Install]
Alias=display-manager.service
То есть, просто заменил ExecStart=/usr/bin/kdm -nodaemon на ExecStart=/etc/preparerun.

Сервис KDM не запускается. Выхлопа нет, молчит. Systemctl status говорит, что Active: failed, Process:386 ExecStart=/etc/preparerun (code=exited, status 203/EXEC).

При этом если вручную набрать /etc/preparerun, то все нормально копируется и запускается. Помогите, пожалуйста!

Ты делаешь неправильную магию systemd. Нужно создать one-shot сервис, который будет подготавливать хомяк, и добавить его в зависимости kdm.service

anonymous
()
Ответ на: комментарий от KendovNorok

oneshot-служба, это штука, которая стартует, что-то делает и сразу завершается. Т.е. как раз для операций типа подготовки хомяка и т.п.

Расисать сейчас не смогу, но вот must-read пот написании сервисов для systemd: http://www.freedesktop.org/software/systemd/man/systemd.service.html

http://www.freedesktop.org/software/systemd/man/systemd.unit.html

http://www.freedesktop.org/software/systemd/man/systemd.exec.html

anonymous
()
Ответ на: комментарий от anonymous

Создал сервис с type=oneshot, прописал в него все действия, добавил в kdm.service «After=prepare.service» «Requires=prepare.service». Увидим, что будет.

KendovNorok
() автор топика
Ответ на: комментарий от KendovNorok

Возможно еще надо «включить» этот сервис. На живой системе это делается командой systemctl enable some.service, но как это сделать при подготовке livecd я не разбирался.

anonymous
()
Ответ на: комментарий от anonymous

С этим я разобрался - надо симлинк закинуть... Я думаю, что нет необходимости его включать. В любом случае, все выяснится, когда закончится сборка.

KendovNorok
() автор топика
Ответ на: комментарий от KendovNorok

prepare.service:

[Unit]
Description=Prepare /home for live user
After=systemd-user-sessions.service
Type=OneShot
[Service]
ExecStart=mkdir /home/sergey && chown sergey /home/sergey
ExecStart=su -c "cp -r /etc/skel/.[a-zA-Z0-9]* /home/sergey/" sergey
Не запускается, утверждая, что invalid argument. Что не так написал?

KendovNorok
() автор топика
Ответ на: комментарий от KendovNorok

Нашел ошибки. Если все запустится - выложу правильный вариант.

KendovNorok
() автор топика
Ответ на: комментарий от KendovNorok

Читаем внимательно man systemd.service:

The first argument must be an absolute path name

Т.е. нужно указывать абсолютные пути к исполняемым файлам

А так же:

Multiple command lines may be concatenated in a single directive, by separating them with semicolons (these semicolons must be passed as separate words). Alternatively, this directive may be specified more than once with the same effect.

...

If one of the commands fails (and is not prefixed with '-'), other lines are not executed and the unit is considered failed.

Т.е. похоже, что && работать не будет, надо менять на ";"

Если тебе нужно поведение в стиле shell, то нужно запускать этот шелл. Там как раз есть замечание с примером:

Note that this setting does not directly support shell command lines. If shell command lines are to be used they need to be passed explicitly to a shell implementation of some kind. Example: ExecStart=/bin/sh -c 'dmesg | tac'

anonymous
()
Ответ на: комментарий от anonymous

Да, именно это я и раскопал. К тому же, Type= должен находиться в секции Service.

KendovNorok
() автор топика

А чем не уcтроил умолчальный вариант в арчисо, в releng/root-image/root/customize_root_image.sh запихивать всё что нужно сделать, создание юзера с хомяком, а в конце systemctl enable kdm.service воткнуть?Кстати хоум с нужным содержанием вроде можно сразу ещё до сборки образа сделать, создав releng/root-image/home/$user и наполнив чем надо.

TheFallenAngel ★★
()
Ответ на: комментарий от TheFallenAngel

Либо я слепой, либо в Арчвики этого нет. Спасибо!

KendovNorok
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.