# Enhancing Arch Linux Stability (Русский)

The purpose of this wiki article is to provide tips on how to make an Arch Linux system as stable as possible. While Arch Developers and Trusted Users work hard to produce high quality packages, given Arch's rolling release system and rapid package turnover, an Arch system may not be suitable for a mission critical, commercial production environment.

However, Arch is inherently stable due to its commitment to simplicity in configuration, coupled with a rapid bug-report/bug-fix cycle, and the use of unpatched upstream source code. Thus, by following the advice below on setting up and maintaining Arch, the user should be able enjoy a very stable system. Furthermore, advice is included that will ease system repair in the event of a major malfunction.

Насколько действительно стабильным может быть Arch Linux? На форумах есть многочисленные сообщения системных администраторов, которые успешно используют Arch на производственных серверах. Одним из таких примеров является Archlinux.org. На десктопе правильно настроенный дистрибутив может предложить превосходную стабильность.

## Установка Arch Linux

При установке и первой настройке Arch Linux у пользователя есть разнообразие в выборе конфигурации, ПО и драйверов. Этот выбор напрямую повлияет на стабильность ситемы в целом.

### Arch Specific Tips

#### Храните старые пакеты в большом разделе /var

Pacman archives all of the previously installed packages in `/var/cache/pacman/pkg`, which over time may grow to a few GB in size. If you are setting up separate partitions during installation, always be sure to allocate plenty of space for a large /var partition. 4 to 8 GB should do, although more may be required for some server uses. Retaining these packages is helpful in case a recent package upgrade causes instability, requiring a downgrade to an older, archived package. See the section below entitled, #Revert package upgrades that cause instability.

#### Используйте рекомендуемые настройки

В подробной документации по установке и настройке Arch Linux довольно часто приводятся несколько вариантов решения той или иной задачи. Всегда выбирайте рекомендуемый путь, т.к. он отражает лучший вариант, позволяющий повысить стабильность системы и простоту её восстановления.

#### Относитесь с осторожностью к неофициальным и не протестированным пакетам

Избегайте использования нестабильных репозиториев или пакетов, предназначенных для тестирования. Они не подходят для стабильной системы.

Use precaution when using packages from AUR. Most of the packages in AUR are supplied by user and thus might not have the same packaging standard as those in official repositories. Always check AUR package's PKGBUILD for any signs of mistake or malicious code before you build and install them.

Будьте осторожнее с AUR Helpers (Русский), которые сильно упрощают установку пакетов из AUR и could lead to user build and install package that have malformed or malicious PKGBUILD. Вы всегда должны проверять PKGBUILD перед сборкой/установкой пакета.

Также крайне неразумно запускать любые AUR Helpers (Русский) или команду makepkg (Русский) от имени пользователя root.

Используйте репозитории 3х сторон в случае, если вы абсолютно уверены в том, что делаете. Всегда используйте эти репозитории только из доверенных источников.

#### Используйте актуальные зеркала

Use mirrors that are frequently updated with the latest packages from the main Arch FTP server. Review the Mirror Status webpage to verify that your chosen mirror is up to date. By using recently rsync'd mirrors, this ensures that your system will always have the freshest packages and package databases available during the course of routine maintenance.

Also, if it is used, edit the mirror list in `/etc/pacman.d` by placing local mirrors, those within your country or region, at the top of the list. Refer to the Enabling your favorite mirror Arch wikipage section for additional details, including the installation of the rankmirrors script to enable the fastest mirrors. These steps will ensure that the system uses the fastest, most reliable mirrors.

После смены серверов, используемых для обновлений, убедитесь что ваша система находится в актуальном состоянии: `pacman -Syu`.

#### Избегайте dev-пакетов

To prevent serious breakage of the system, do not install any development packages, which are usually found in AUR and occasionally in community. These are packages taken directly from upstream development branches, and usually feature one of the following words appended to the package name: dev, devel, svn, cvs, git, hg, bzr, or darcs.

Most especially, avoid installing any development version of crucial system packages such as the kernel or glibc.

If building a custom package using makepkg, be sure that the PKGBUILD follows the Arch packaging standards, including a provides array. Use namcap to check the final .tar.gz or PKGBUILD file.

#### Установите linux-lts

linux-lts - это пакет с альтернативной версией ядра, основанной на версии 3.10 и доступный из [core]. This particular kernel version enjoys long-term support (LTS) from upstream, including security fixes and some feature backports, especially useful for Arch users seeking to use such a kernel on a server, or who want a fallback kernel in case a new kernel version causes problems.

To make it available as a boot option, you will need to update the bootloader's configuration file. For example, if you use Syslinux, you have to edit `/boot/syslinux/syslinux.cfg` and duplicate the current entries, except using `vmlinuz-linux-lts` and `initramfs-linux-lts.img`. For GRUB, the recommended method is to automatically re-generate the .cfg.

Some prefer to install the linux-lts package in addition to the regular linux package and edit the Fallback entry to use the LTS kernel.

### Generic Best Practices

#### Используйте систему управления пакетами

pacman гораздо лучше отследит принадлежность файлов пакетам, чем вы. Если вы что-то установите вручную, вы рано или поздно забудете что именно вы делали, что и куда установилось. Что может привести к конфликтам пакетов, установкой в неподходящее место и т.п.

From a stability standpoint you should try to avoid unsupported package and custom software, but if you really need such things making a package is better than manually compiling and installing.

You could also add an alias to disable make install command in `/root/.bashrc`:

     make() {
       [ "$1" == 'install' ] &&
         echo -e "WARNING:\nDON'T INSTALL SOFTWARE MANUALLY\nDON'T USE unset make TO OVERRIDE" &&
         echo "Tip: It's easy to make own custom package see: man PKGBUILD makepkg" &&
         return 1;
       /usr/bin/make $@;
     }

#### Используйте проверенное, зарекомендовавшее себя ПО

Install mature, proven, mainstream software; while avoiding cutting edge software that is still buggy. Try to avoid installing "point-oh", aka x.y.0, software releases. Например, вместо того, чтобы установить Foobar 2.5.0, дождитесь выхода Foobar 2.5.1. Do not deploy newly developed software until it is proven to be reliable. Например, ранние версии PulseAudio могут быть ненадежны. Пользователи, заинтересованные в максимальной стабильности системы, используют ALSA в качестве звуковой системы. Наконец, пользуйтесь ПО, которое имеет сильное и активно развивающееся сообщество.

#### Используйте открытые драйвера

Там, где это возможно, пользуйтесь открытыми драйверами, старайтесь избегать проприетарных. В большинстве случаев открытые драйвера более стабильны и надежны, т.к. ошибки в них устранять проще и быстрее. While proprietary drivers can offer more features and capabilities, this can come at the cost of stability. To avoid this dilemma, choose hardware components known to have mature open source driver support with full features. Information about hardware with open source Linux drivers is available at linux-drivers.org.

## Maintaining Arch

In addition to configuring Arch for stability, there are steps one can take during maintenance which will enhance stability. Paying attention to a few SysAdmin details will help to ensure continued system reliability.

### Arch Specific Tips

#### Обновляйте систему с необходимой частотой

Многие пользователи Arch Linux обновляют свои системы часто, некоторые даже ежедневно. В такой частоте нет необходимости, если вам необходимо получать исправления ошибок и безопасности. Обновляться раз в неделю или две — хорошая идея.

Если система содержит пакеты из AUR, будьте осторожны при обновлении всех AUR пакетов.

#### Читайте новости перед обновлением

Перед обновлением системы рекомендуется читать последние новости (перевод можно найти на archlinux.org.ru) для того, чтобы знать о крупных изменениях ПО или конфигураций. Перед обновлением основных пакетов, вроде kernel, xorg, or glibc, рекомендуется еще просмотреть форум на наличие сообщений об ошибках.

#### Действия при оповещениях во время обновлений

Уделяйте внимание сообщениям, вы водимых pacman'ом при обновлениях. Если со стороны пользователя требуются какие-либо дополнительные действия, убедитесь что вы исполнили их верно. Если же эти сообщения неясны — просмотрите форум и последние новости для более подробной информации.

#### Deal promptly with .pacnew, .pacsave, and .pacorig files

When pacman removes a package that has a configuration file, it normally creates a backup copy of that config file and appends .pacsave to the name of the file. Likewise, when pacman upgrades a package which includes a new config file created by the maintainer differing from the currently installed file, it writes a .pacnew config file. Occasionally, under special circumstances, a .pacorig file is created. Pacman provides notice when these files are written.

Users must deal with these files promptly when pacman creates them, in order to ensure optimum system stability. The `pacdiff` tool, provided by pacman, can assist with this. Users are referred to the Файлы Pacnew и Pacsave wiki page for detailed instructions.

#### Рассмотрите использование pacmatic

Pacmatic это «обёртка» для pacman’а, которая автоматизирует процесс проверки новостей перед обновлениями. Также Pacmatic следит за тем, чтобы локальная база данных pacman была синхронизирована с online-зеркалами, помогая таким образом избежать проблем с обновлением баз `pacman –Sy`. Наконец, Pacmatic отображает более точные сообщения об обновленных или устаревших файлах конфигурации. pacman может быть заменён на pacmatic при помощи alias’ов, и различные AUR helpers могут быть настроены на использование pacmatic вместо pacman.

#### Избегайте некоторых команд pacman

Arch being a rolling release distribution, it can be dangerous to refresh pacman databases without doing a full system upgrade immediately after. Avoid using `pacman -Sy package` to install a package, but always use `pacman -S package` instead. Регулярно обновляйте систему, используя команду `pacman -Syu`.

Избегайте использования опции `-f`, особенно в командах вроде `pacman -Syuf` involving more than one package. Опция `--force` игнорирует конфликты и может стать причиной потери файлов, в случае если они принадлежат разным пакетам. В правильно поддерживаемой системе эта опция никогда не должна быть использована.

Не используйте `pacman -Rdd package`. Using the `-d` flag skips dependency checks during package removal. As a result, a package providing a critical dependency could be removed, resulting in a broken system.

Не используйте команду `pacman -Scc` до тех пор, пока кэш действительно не станет занимать огромное место, или пока у вас не отпадёт необходимость в архивных пакетах. Достаточно хорошей практикой является хранить старые версии пакетов в кэше, которые могут оказаться полезными при необходимости отката. Вместо этого используйте `pacman -Sc` чтобы очистить кэш от пакетов, которые уже были удалены из базы данных pacman.

Make sure to only use this command if there is no intention of re-installing recently removed packages. If such packages are re-installed after this command has been executed, there will be no older, archived versions of the packages in the pacman cache.

In the event that `/var` disk space becomes scarce, move all archived packages to the home directory using the fduparch.sh script. Use the fduppkg script to move all but the last previously installed package versions in the pacman cache archives, to the home directory.

#### Откат пакета, приведшего к нестабильности

В случае, когда обновление какого-либо пакета привело систему в нестабильное состояние, установите последнюю известную стабильную версию пакета из кэша при помощи команды:

    pacman -U /var/cache/pacman/pkg/Package-Name.pkg.tar.gz

Для более подробной информаци об откате пакетов можно прочитать в соответствующей странице вики: Downgrading Packages (Русский).

После этого пакет можно добавить в секцию IgnorePkg файла pacman.conf до тех пор, пока ошибка пакета не будет устранена. Просмотрите Arch-вики и/или форум для поиска совета, также можно создать отчет об ошибке в случае необходимости.

#### Регулярно сохраняйте список установленных пакетов

На регулярной основе создавайте копию списка установленных пакетов, и сохраняйте её на одном из медиа-носителей или облачном хранилище. Используйте следующую команду для создания списка:

    pacman -Qqne > /path/to/chosen/directory/pkg.list

В случае если систему придется переустанавливать полностью, эти пакеты могут быть легко восстановлены из данного списка при помощи команды:

    pacman -S --needed $(< /path/to/chosen/directory/pkg.list )

#### Регулярно копируйте базу данных pacman

The following command can be used to backup the local pacman database, and can be run as a cronjob:

    tar -cjf /path/to/chosen/directory/pacman-database.tar.bz2 /var/lib/pacman/local

Store the backup pacman database file on one or more offline media, such as a USB stick, external hard drive, or CD-R.

Restore the backup pacman database file by moving the `pacman-database.tar.bz2` file into the `/` directory and executing the following command:

    tar -xjvf pacman-database.tar.bz2

If the pacman database files are corrupted, and there is no backup file available, there exists some hope of rebuilding the pacman database. Consult the Arch wikipage, How To Restore Pacman's Local Database.

##### Автоматизация Systemd

Вы можете настроить systemd таким образом, чтобы создавать копии базы данных pacman каждый раз при установке/обновлении пакетов. См. скрипт.

### Generic Best Practices

#### Проверяйте обновления на неважных системах

Если есть возможность, проверьте работу системы после обновлений на некритичной системе, которая является копией вашей основной. И только затем, если проблем не обнаружено, применяйте обновления к основной системе..

#### Создавайте резервные копии конфигурации перед изменениями

Перед изменением конфигурационных файлов всегда создавайте копию его рабочей версии. В случае если внесенные изменения приведут к проблемам, будет намного легче вернуть все в прежнее состояние. Сделать это можно как при помощи текстового редактора, который будет использоваться для редактирования, так и при помощи команды:

    cp config config.bak

Использование .bak позволит легко определить, что эта копия была создана вручную, в то время как pacman использует окончания .pacnew, .pacsave, .pacorig для копирования конфигурационных файлов.

etckeeper может облегчить работу с конфигурационными файлами. Эта программа систему контроля версий для директории `/etc`, позволяя легко отслеживать изменения.

#### Регулярно создавайте копии директорий /etc, /home, /srv, and /var

Директории `/etc`, `/home`, `/srv` и `/var` содержат важные файлы и конфиги, поэтому целесообразно будет создавать для них backup'ы на регуляной основе. Ниже приводится простое руководство.

- `/etc`: Backup директории /etc нужно создавать от имени пользователя root:

    tar -cjf /path/to/chosen/directory/etc-backup.tar.bz2 /etc

Помещайте backup'ы на внешние накопители, вроде USB-флешки, внешнего жесткого диска или CD-R. Также можно воспользоваться облачными хранилищами.

Для восстановления конкретных файлов/каталогов необходимо распаковать архив `etc-backup.tar.bz2` во временный каталог и переместить из него необходимое. Для того чтобы восстановить каталог `/etc` со всем содержимым необходимо перемесить архив `etc-backup.tar.bz2` в корень системы `/`, затем от имени пользователя root выполнить команду:

    tar -xvjf etc-backup.tar.bz2

- `/home`: At regular intervals, backup the `/home` directory to an external hard drive, Network Attached Server, or online backup service. Occasionally verify the integrity of the backup process by comparing original files and directories with their backups.

- `/srv`: Серверам рекомендуется копировать директорию `/srv`.

- `/var`: Дополнительные директории,Additional directories in `/var`, such a `/var/spool/mail` or `/var/lib`, which also require backup and occasional verification.

Если вы хотите ускорить процесс создания backup'ов (используя параллельное сжатие), можно воспользоваться утилитой pbzip2 (параллельный bzip2). Этот способ немного отличается от описанного выше, но не сильно.

Во-первых, архивируйте директории в простой tar-архив без сжатия:

    tar -cvf /path/to/chosen/directory/etc-backup.tar /etc

Установите утилиту pbzip2, если она не установлена: `pacman -S pbzip2`). Затем воспользуйтесь ею:

    pbzip2 /path/to/chosen/directory/etc-backup.tar.bz2

Теперь при сжатии будут задействованы все ядра вашего процессора.

Category:

- System administration (Русский)