Доработанный скрипт автоматизированной компиляции ядра Linux

А вот и доработанная версия скрипта автоматизированной компиляции ядра Linux. Эта версия умеет самостоятельно проверять наличие новой версии на сайте и скачивать её.

#!/bin/sh

# unpack and prepare
cd /usr/src

# check for new file
kernelfile=`wget -O - 2>&1 https://www.kernel.org | grep "latest_link" -A 2 | grep -o 'https://[^"]*'`
newkernel="`echo $kernelfile | grep -o 'linux-.*\.tar\.xz' | cut -b 7- - | cut -b -5 -`"
currentkernel="`cat /proc/version | grep -o 'Linux version [^ ]*' | cut -b 15- -`"

# check new kernel version
if [ "$newkernel" != "$currentkernel" ];
then
    echo "New kernel found!"
    /usr/bin/wget -c $kernelfile
    archname=`find *.xz`
    tar xxf $archname
    dirsrc=`find -P linux-* -maxdepth 0 -type d | head -n 1`
    rm linux
    ln -s $dirsrc linux

    # compile
    cd /usr/src/linux
    make clean && make mrproper
    cp /boot/config-`uname -r` ./.config
    make menuconfig
    make-kpkg clean
    startdate=`date`
    fakeroot make deb-pkg
    finishdate=`date`

    rm -rf $dirsrc

    echo "Начало: $startdate"
    echo "Завершение: $finishdate"
else
    echo "No new kernel found"
fi

Ротация логов процессов в supervisord

Если вы пользуетесь supervisord, то наверняка сталкивались с неудобством ротации логов в нём.

Типичная настройка в конфигурационном файле процесса в /etc/supervisor.d/ выглядит так:

stdout_logfile=/var/log/progam/process_%(process_num)02d.log
stdout_logfile_maxbytes=100MB
stdout_logfile_backups=50

Логи складываются в отдельные файлы и ротируются по достижении размера в 100 мегабайт. Данный способ не очень удобен, особенно если нужно искать логи за определённую дату.

В этом случае на помощь приходит logrotate.

В конфигурационном файле процесса меняем опции логов:

stdout_logfile_maxbytes=0
stdout_logfile_backups=0

И добавляем в /etc/logrotate.d/processname:

/var/log/program/process_*.log {
    create 0600 root root
    su root root
    daily
    copytruncate
    compress
    missingok
    notifempty
}

Теперь логи будут складываться в «суточные» файлы и автоматически сжиматься.

Скрипт автоматизированной компиляции ядра Linux

Я уже давно писал, что компиляция ядра — это просто. Со времени написания той записи прошло более семи лет. И я решил поделиться своим скриптом, который автоматизирует процесс сборки нового ядра.

Всё, что нужно, это скачать исходник очередной версии ядра в каталог /usr/src:

cd /usr/src
wget -c https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.8.10.tar.xz

И запустить скрипт build.sh, который у меня лежит там же в /usr/src. Содержимое скрипта:

#!/bin/sh

# unpack and prepare
cd /usr/src
archname=`find *.xz -type f`
tar xxf $archname
dirsrc=`find -P linux-* -maxdepth 0 -type d | head -n 1`
rm linux
ln -s $dirsrc linux

# compile
cd /usr/src/linux
make clean && make mrproper
cp /boot/config-`uname -r` ./.config
make menuconfig
make-kpkg clean
startdate=`date`
fakeroot make deb-pkg
finishdate=`date`

rm -rf $dirsrc

echo "Start time: $startdate"
echo "Finish time: $finishdate"

После работы скрипта на выходе получаются готовые .deb пакеты, которые остаётся только установить.

Если у вас есть идеи по улучшению этого скрипта — с удовольствием прочту их в комментариях.

VNC сервер и SDDM

В Debian Stretch в KDE5, он же Plasma, уже давно используется SDDM вместо KDM в качестве дисплейного менеджера. x11vnc не умеет автоматически распознавать SDDM и подхватывать его файлы при создании сервера. Следующий набор команд делает это автоматически:

x11vnc -nevershared -noxdamage -modtweak -xkb -forever -auth `find /var/run/sddm/ -type f` -rfbauth /home/alexey/.vnc/passwd

В файле /home/alexey/.vnc/passwd у меня лежит пароль для подключения к VNC серверу.

Debian snapshot

Пользователям testing дистрибутива Debian довольно часто приходится сталкиваться с нерешёнными зависимостями в новых версиях пакетов, при установке обновлений, и, как следствие, с неработающими программами. Хорошо, если это что-то незначительное. А если это пакеты, входящие в состав KDE Plasma, например? В такие моменты возникает желание вернуться к предыдущей версии репозитория и переставить рабочие пакеты вместо сломанных. И такая возможность есть — http://snapshot.debian.org, хранилище «слепков» репозиториев. Пользоваться им довольно просто, инструкция на первой странице сайта довольно понятна.

Да, придётся вручную выяснить, какие пакеты сломаны или зависят от сломанных пакетов, удалить их и поставить из репозитория за выбранную дату. Но зато ваша система будет корректно работать. 🙂