ESO Midas 11SEP1.2

Отправил собираться новую версию.

Заодно осилил source service для build service. Первый приз получает сервис под названием download_files (надо в файл _service в проекте воткнуть вот это):
<services>
  <service name="download_files">
  <param name="recompress">yes</param>
  </service>
</services>

Он не просто прочитает spec-файл и попытается скачать все файлы для которых там есть полный url в строчке Source, он к тому-же (это же чудо!) перепакует их сам в нужный формат и сам разберется что скачивать. Например, допустим, Source0 указан вот так: ftp://ftp.eso.org/pub/midaspub/11SEP/sources/%{version}.tar.bz2, при этом на самом сервере нет архива tar.bz2, там есть только tar.gz. Так вот, умный сервис скачает такой архив, который там физически есть, и перепакует его в такой, который нужен.

Документации (как и во всем opensuse) нет, поэтому предлагается смотреть в /usr/lib/obs/service и там можно прочитать в исходниках какие сервисы есть, какие у них параметры и что делают.

p.s. Вообще, считаю, следующий гениальный шаг будет когда build service научится сам автоматически отслеживать хранилища типа PyPi, CPAN, etc и автоматом собирать новые пакеты и пересобирать обновленные. Закоммитил ты свой модуль новый питонный в PyPi, а он через 15 минут уже есть для opensuse в виде пакета. Красота.

PAM и ssh-agent

Захотелось, чтобы можно было входить в систему, используя пароль от ssh-ключа, и при этом чтобы ssh-agent запускался и больше пароль никогда не спрашивал. Все это можно сделать используя модуль pam_ssh для PAM (Pluggable Authentication Modules for Linux).

Настроить его очень просто: надо воткнуть в auth
auth    sufficient      pam_ssh.so
а в session, соответственно
session sufficient      pam_ssh.so

В PAM модули работают как и везде: динамически загружается .so-файл, и запускаются у него функции с наперед известными именами, куда передаются разные параметры, с которыми модуль знает что делать. Первая строчка, таким образом, ответственна за проверку пароля к ssh-ключу, вторая строчка — запуск правильного процесса ssh-agent.

Запуская ssh-agent, pam_ssh.so делает в ~/.ssh файл с именем в духе agent-$HOSTNAME и содержанием вида:
SSH_AUTH_SOCK=/tmp/ssh-qjtjCQkp2852/agent.2852; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2853; export SSH_AGENT_PID;
echo Agent pid 2853;

Вообще говоря, после этого можно в .profile или .bashrc просто выполнить этот файл как кусок скрипта. После этого нужные переменные среды окружения будут иметь нужные значения и ssh правильно подцепит свой агент. Однако, в PAM предусмотрен модуль pam_env ответственный за установку переменных среды окружения. Автоматом почему-то ничего не заработало, но заработало после добавления в /etc/security/pam_env.conf строчек:
SSH_AUTH_SOCK DEFAULT="" OVERRIDE=@{SSH_AUTH_SOCK}
SSH_AGENT_PID DEFAULT="" OVERRIDE=@{SSH_AGENT_PID}