Вся суть харча™ (на самом деле все далеко не так...)
Выбираем Option --> Partition style --> GPT
как на скрине.
Качаем ISO-образ Arch Linux [ и копируем/перемещаем ] в корень на созданном разделе флешки.
Так же нужно выделить немного места под Arch Linux, если не предполагается использование отдельного диска.
Запускаем Explorer/Проводник и кливаем правой по иконке This PC/Этот Компьютер, выбираем Manage
(перед этим нужно выбрать Show more options
):
В Disk Managment
нужно сжать какой-нибудь раздел, выделив под Arch 80-100GB:
Во время включения компьютера при появлении логотипа жмем раза клавиши F2
/ F12
/ Del
(зависит от производителя).
Во вкладке Boot
отключаем Secure Boot
. Это виндовое изобретение, которое не позволяет запускать неподписанные сертификатами от Microsoft EFI. Оно появилось вместе с Windows 8, но по требованию Евросоюза производителей материнских плат, уличенных в сговоре с M$, обязали добавить возможность отключения этой настройки. Она не влияет на возможность использовать BitLocker или TPM. Можно еще включить Launch CSM
/ CMS Boot
/ CMS OS
/ Legacy OS
для возможности загрузки с устройств, содержащих метку MBR (может потребоваться, например, для установки Windows 7). В этой же вкладке меняем приоритет загрузки устройств, делая флешку первой. Сохраняем изменения и выходим.
Когда загрузится Ventoy, выбираем в меню Arch Linux
...
В качестве пароля указывайте фразу длинее 20 символов. Не используйте пароли, которые вами уже использовались на ресурсах, напрямую подключенных к СОРМ (Вконтакте, Одноклассники, Mail, Yandex, Rambler и тп), избегайте распространенных паролей, которые утекли в сеть, и, конечно, же не вздумайте проверять стойкость пароля через сайт Касперского (вы его просто добавите в базу для брута, которую используют правоохранительные органы). В качестве пароля можно использовать фразу на одном из вымирающих языков, например, абхазском или ады-гей-ском, набранную на английской раскладке. Взломостойкими являются бредовые фразы, так как такой пароль нельзя подобрать с помощью цепей Маркова (например, "краб катит листья яблок"). Так же можно намеренно допускать ошибки в словах. Помните Олбанский и «Онотоле, пыш-пыш»?
Касаемо, фраз, то их не советуют использовать, потому как с помощью цепей маркова в теории можно подобрать пароль. В документации советуют генерировать пароль с помощью pwgen
, а потом пытаться его запомнить придумывая слова, начинающиеся на эти буквы... Фактически этот же способ используется в xkcdpass, но только вместо ввода первых букв фразы, мы вводим случаные слова
SED — Self Encrypted Drives. Samsung EVO и PRO поддерживают аппаратное шифрование с использованием спецификации TCG OPAL 2.0. Фактически единственным вариантом программного шифрования в Linux является LUKS. Аппаратное и программное шифрование в общем и целом работают похожим образом и имеют свои достоинства и недостатки.
Почему Luks, а не аппаратное шифрование? — Диски с аппаратным шифрованием (SED) в 2018 году по заказу королевской полиции Нидерландов были взломаны, путем замены прошивки, в результате без пароля удалось получить доступ к данным. Этот трюк был проделан на старых SSD EVO 840 и EVO 850... Статья в журнале ксакеп. Новые диски вроде как избавлены от этих проблем, но это не точно и никто не гарантирует отсутствия аппаратных закладок, и никак не решается проблема с "быстрым переподключением" к другому устройству для считывания данных.
Другие недостатки аппаратного шифрования:
- UEFI от некоторых производителей, например, ASUS и Acer, "забывают" загрузочные записи после перехода устройства в залоченное состояние... Acer не найдя загрузочных записей, начинает искать загрузчики по захардокоженным путям и первой грузит Windows...
- sedutil не поддерживает спящий режим, поэтому потребуется пользоваться сторонней утилитой со всеми вытекающими рисками.
- Ну и, конечно, мы не можем выбрать какой-то другой алгоритм шифрования кроме AES.
К сожалению программное шифрование намного медленее (где-то в 1.5-2x), потому как шифрование в самошифрующихся дисках осуществляется отдельным AES чипом (без поддержки AES-NI все еще печальнее). Однако, скорости записи не особо критична, потому как при просмотре видео с Youtube, тот же iostat -d
показывает, что на диск пишется в среднем... 600кб/сек. При скачивании файлов из интернета мы ограничены скоростью соединения, которая явно меньше 3000Mb/s, а вот при копировании файлов скорость сначала будет высокой, а потом упадет из-за перенагрева чипа. Если для вас критична скорость записи...
Результаты моих тестов:
# Samsung SSD 980 500GB + Btrfs
$ dd if=/dev/zero of=testfile bs=64k count=128k conv=fdatasync oflag=direct
131072+0 records in
131072+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 7.26142 s, 1.2 GB/s
# WD Blue SN550 NVMe SSD, LUKS + Btrfs
$ dd if=/dev/zero of=testfile bs=64k count=128k conv=fdatasync oflag=direct
131072+0 records in
131072+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 16.6447 s, 516 MB/s
Стоит упомянуть, что значительная часть SATA SSD поддерживает «установку пароля через BIOS», но выглядит это как ворота на замке без забора посреди чистого поля, так как эти пароли часто хранятся в открытом виде (наглядно), либо есть сервисный мастер пароль (см. тут)... и в конце-концов можно тупо перепаять контроллер. К шифрованию это не имеет никакого отношения.
IN SOVIET RUSSIA ИСПОЛЬЗОВАТЬ ШИФРОВАНИЕ ДАННЫХ НА ДИСКАХ НУЖНО ВСЕГДА ЧТОБЫ НЕ СЕСТЬ НА 🍾!
Следует отметить, что данные на самошифоующихся данных шифруются всегда, но отключен запрос пароля. Пароли администратора и пароль от SID устанавливаются на заводе и нигде не указаны.
Сначала нужно скачать и записать на флешку live-образ.
Грузимся с live и далее все действия выполняем с него.
Установка пароля и запись PBA.
$ sedutil-cli --scan
Scanning for Opal compliant disks
/dev/nvme1 2 Samsung SSD 970 EVO 250GB 2B2QEXE7
# для того чтобы задать новый пароль (взамен заводского)
# нужно выполнить PSID Revert, так как будет сгенерирован новый ключ
# шифрования, но СТАРЫЕ ДАННЫЕ БУДУТ ФАКТИЧЕСКИ УТЕРЯНЫ
# PSID указан на наклейке SSD
$ sedutil-cli --PSIDrever <PSID> /dev/nvme1n1
# задаем временный пароль
$ sedutil-cli --initialSetup p /dev/nvme1n1
На live уже есть PBA, который нужно записать на диск.
$ gunzip /usr/sedutil/UEFI64-1.15.1.img.gz
$ sedutil-cli --loadPBAimage p /usr/sedutil/UEFI64-1.15.1.img /dev/nvme1n1
Включаем блокировку диска и запрос пароля после отключения питания:
$ sedutil-cli --enableLockingRange 0 p /dev/nvme1n1
$ sedutil-cli --setMBREnable on p /dev/nvme1n1
Теперь можно поставить настоящий пароль:
$ sedutil-cli --setsidpassword p <your-password> /dev/nvme1n1
$ sedutil-cli --setadmin1pwd p <your-password> /dev/nvme1n1
PS: пароль администратора может отличаться от SID пароля
Для разблокировки:
$ sedutil-cli --disableLockingRange 0 <your-password> /dev/nvme1n1
$ sedutil-cli --setMBREnable off <your-password> /dev/nvme1n1
Теперь можно вытащить флешку и выключить питание...
Примечание: в AUR есть sedutil-cli
, установить его после завершения установки Arch Linux.
Ссылки:
Есть стандартная утилита для установки Arch Linux. Достаточно просто вбить arch-install
в терминале, но лучше все слелать вручную, так как все нижеописанные действия предстоит проделывать не единожды.
Если вы подключены от провода, то ничего настраивать не надо.
Для Wi-Fi нужно выполнить ряд действий:
$ iwctl
# Получим список сетевых интерфейсов
[iwd]# device list
Devices
-------------------------------------------------------------
Name Address Powered Adapter Mode
-------------------------------------------------------------
wlan0 ... on ... ...
# Сначала просканируем сети
[iwd]# station <interface> scan
# А потом посмотрим все сети к которым можно подключиться
[iwd]# station <interface> get-networks
Available networks *
--------------------------------------------------------------------------------
Network name Security Signal
--------------------------------------------------------------------------------
...
<sid> psk ****
# Подключаемся
[iwd]# station wlan0 connect <sid>
Проверка:
$ ping -c5 ya.ru
Перед установкой желательно обновить базу пакетов и pgp-ключей для проверки подписи пакетов:
$ pacman -Sy archlinux-keyring
Для Btrfs лучше всего подходит SSD.
Смотрим список и разделов и устройств:
fdsik -l
Пусть нам нужно поставить систему на nvme0n1
.
Размечаем диск под систему, руководствуясь правилом от большего к меньшему:
cfdisk nvme0n1
Должно получиться что-то типа этого:
раздел | точка монтирования | тип файловой системы | размер | описание |
---|---|---|---|---|
nvme0n1p1 | / | btrfs | Весь объем минус размер efi/boot | arch linux |
nvme0n1p2 | /boot | vfat | 512 MiB-1 GiB | загрузочный раздел |
Размещая тот же boot в конце диска, мы сможем в последующем менять его размер, откусывая место от предыдущего.
Если у вас уже установлена Windows, пропускайте шаг с форматированием загрузочного раздела.
Форматируем загрузочный раздел:
mkfs.vfat -F32 -n ESP /dev/nvme0n1p2
Созданному разделу нужно выставить флаг boot, чтобы UEFI с него грузилось:
$ parted /dev/nvme0n1
GNU Parted 3.5
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
...
2 499GB 500GB 1074MB fat32 Boot msftdata
(parted) set 2 boot on
(parted) q
Information: You may need to update /etc/fstab.
Если ваш диск не поддерживает аппаратное шифрование либо оно вам не подходит по каким-то причинам...
Создаем шифрованный раздел:
cryptsetup -q -i 15000 luksFormat /dev/nvme0n1p1
С помощью --cipher
можно указать алгоритм шифрования, если не устраивает дефолтный.
-i
, --iter-time
— это время в миллисекундах, которое требуется процессору на расшифровку ключа.
Производительность различных алгоритмов можно протестировать:
$ cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1 2475976 iterations per second for 256-bit key
PBKDF2-sha256 4665521 iterations per second for 256-bit key
PBKDF2-sha512 1859177 iterations per second for 256-bit key
PBKDF2-ripemd160 972705 iterations per second for 256-bit key
PBKDF2-whirlpool 752206 iterations per second for 256-bit key
argon2i 11 iterations, 1048576 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id 11 iterations, 1048576 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
# Algorithm | Key | Encryption | Decryption
aes-cbc 128b 1353.5 MiB/s 5450.8 MiB/s
serpent-cbc 128b 124.9 MiB/s 918.1 MiB/s
twofish-cbc 128b 247.8 MiB/s 468.1 MiB/s
aes-cbc 256b 1009.3 MiB/s 4422.6 MiB/s
serpent-cbc 256b 128.4 MiB/s 922.5 MiB/s
twofish-cbc 256b 252.1 MiB/s 468.0 MiB/s
aes-xts 256b 4542.7 MiB/s 4508.0 MiB/s
serpent-xts 256b 787.7 MiB/s 802.5 MiB/s
twofish-xts 256b 443.9 MiB/s 449.0 MiB/s
aes-xts 512b 3688.6 MiB/s 3750.5 MiB/s
serpent-xts 512b 826.0 MiB/s 812.8 MiB/s
twofish-xts 512b 449.7 MiB/s 449.1 MiB/s
И открываем шифрованный раздел:
cryptsetup luksOpen /dev/nvme0n1p1 crypt
Последний аргумент это имя под под которым блочное устройство будет доступно в /dev/mapper
.
Создаем на шифрованном разделе файловую систему Btrfs:
mkfs.btrfs -n 32k -L arch ARCH_DEVICE
-n
указываем размер узла дерева в котором хранятся данные. Чем он больше, тем лучше сжимается...
- Тут и далее вместо
ARCH_DEVICE
указываем/dev/mapper/crypt
при использовании LUKS либо просто/dev/nvme0n1p1
.
Btrfs ‒ это одна из самых продвинутых файловых систем в Linux. Многие считают ZFS достойной альтернативой, но она не включена в ядро. Btrfs поддерживает механизм CoW (copy-on-write), создание снапшотов и сжатие данных... Снапшоты — это снимки файловой системы, точки для восстановления. Сжатие данных позволяет экономить место на диске, отказаться от использования архивов, но различные форматы изображений и видео и так поддерживают сжатие, поэтому оно не всегда полезно. За 4 года использования Btrfs я не сталкивался с какими-то критическими багами, и она меня не раз спасали от утраты данных. Простой пример: sudo rm -rf /<тут закрался пробел>
.
В Btrfs нет привычных разделов, есть только подтома, которые можно сравнить с обычными каталогами. У них нет фиксированного размера, однако его можно ограничить с помощью quota. Снапшоты, если упускать некоторые детали, являются теми же самыми подтомами, те их можно монтировать и выполнять аналогичные операции.
Монтируем RootFS:
mount ARCH_DEVICE /mnt
Возможные сабвольюмы:
subvolume | mount | описание |
---|---|---|
@ |
/ |
Корневой каталог (системные файлы) |
@home |
/home |
Домашний каталог с пользовательскими данными. Нужен отдельный так как при откате системы к предыдущему состоянию очень важно сохранить существующий прогресс (куки браузера, конфиги, документы, файлы проектов и т.д.) |
@snapshots |
/.snapshots |
Содержит снапшоты корня, которые создает snapper |
@home.snapshots |
/home/.snapshots |
Содержит снапшоты хомяка, которые создает snapper |
@machines |
/var/lib/machines |
Если не существует, то создаст systemd |
@portables |
/var/lib/portables |
Если не существует, то создаст systemd |
@docker |
/var/lib/docker |
Рекомендации самого Docker с их сайта |
@docker_btrfs |
/var/lib/docker/btrfs |
Docker создает саьвольюмы по этому пути |
@var_lib |
/var/lib |
Вместо создания @machines , @portables , @docker можно создать только этот, если в /var/lib не будет храниться чего-то важного (предполагается, что будут делаться снапшоты только корня и/или хомяка) |
@var |
/var |
Аналогично выше описанному |
@var_log или просто @log |
/var/log |
Логи как правило не представляют интереса, но в снапшотах занимают дополнительное место |
@swap |
/swap или /var/swap , или /var/lib/swap |
Хранит файл подкачки. Должен монтироваться с nodatacow |
Подтома @machines
, @portables
, @.snapshots
, @home.snapshots
и @docker
(опционально при использовании docker) нужны чтобы не заморачиваться с переносом вложенных подтомов при замене старого подтома на снапшот. Однако, вся эта плоская структура подтомов скорее нужна на серверах. Чтобы не заморачиваться я словетую использовать Btrfs Asssistant.
Создаем нужные подтома:
btrfs sub create /mnt/@
btrfs sub create /mnt/@home
Отмонтируем RootFS:
umount /mnt
Монтируем подтома и загрузочный раздел:
mount -o compress=zstd:9,@ ARCH_DEVICE /mnt
# Примонтируем остальное
# x-mount.mkdir создает несуществующую директорию
# mount -o x-mount.mkdir /dev/nvme0n1p2 /mnt/boot
# Используем более закрытые права на каталог с
mkdir -m 700 /mnt/boot
mount BOOT_DEVICE /mnt/boot
mount -o x-mount.mkdir,compress=zstd:9,subvol=@home ARCH_DEVICE /mnt/home
Через двоеточие указывается уровень сжатия. Для десктопа лучшим является 9, обеспечивающий 15x максимальное сжатие. При нем скорость записи падает до 100 MiB/s, но при скачивании файлов из сети у нас скорость ~12 MiB/s (100 MBit/s)... Нам важна только скорость чтения, а она не падает меньше 2 GiB/s, те примерно равна скорость записи SSD (и не должна быть меньше нее в идеале). Протестировать уровни сжатия можно так:
$ zstd -T0 -b1 -e19
1#Synthetic 50% : 10000000 -> 3152996 (x3.172), 2539.0 MB/s, 2642.0 MB/s
2#Synthetic 50% : 10000000 -> 3129011 (x3.196), 1169.9 MB/s, 2647.2 MB/s
3#Synthetic 50% : 10000000 -> 3230491 (x3.096), 344.1 MB/s, 2115.2 MB/s
4#Synthetic 50% : 10000000 -> 3339961 (x2.994), 283.0 MB/s, 1899.2 MB/s
5#Synthetic 50% : 10000000 -> 3290137 (x3.039), 162.8 MB/s, 1788.2 MB/s
6#Synthetic 50% : 10000000 -> 3278503 (x3.050), 142.8 MB/s, 1823.8 MB/s
7#Synthetic 50% : 10000000 -> 3321448 (x3.011), 133.6 MB/s, 1696.6 MB/s
8#Synthetic 50% : 10000000 -> 3315141 (x3.016), 118.1 MB/s, 1696.1 MB/s
9#Synthetic 50% : 10000000 -> 3355994 (x2.980), 94.3 MB/s, 1573.8 MB/s
10#Synthetic 50% : 10000000 -> 3363166 (x2.973), 68.0 MB/s, 1593.6 MB/s
11#Synthetic 50% : 10000000 -> 3363170 (x2.973), 43.5 MB/s, 1590.3 MB/s
12#Synthetic 50% : 10000000 -> 3362882 (x2.974), 36.2 MB/s, 1577.1 MB/s
13#Synthetic 50% : 10000000 -> 3354692 (x2.981), 14.2 MB/s, 1610.2 MB/s
14#Synthetic 50% : 10000000 -> 3354678 (x2.981), 15.0 MB/s, 1605.5 MB/s
15#Synthetic 50% : 10000000 -> 3353801 (x2.982), 11.5 MB/s, 1597.6 MB/s
16#Synthetic 50% : 10000000 -> 3080678 (x3.246), 10.3 MB/s, 2535.2 MB/s
17#Synthetic 50% : 10000000 -> 3136878 (x3.188), 3.63 MB/s, 2184.5 MB/s
18#Synthetic 50% : 10000000 -> 3145664 (x3.179), 3.73 MB/s, 2066.9 MB/s
19#Synthetic 50% : 10000000 -> 3140424 (x3.184), 3.04 MB/s, 2101.9 MB/s
Установим ядро, драйвера и базовый набор пакетов:
pacstrap /mnt base base-devel linux linux-headers linux-api-headers linux-firmware btrfs-progs cryptsetup efibootmgr ntfs-3g exfat-utils git micro terminus-font wget xorg zsh
Добавьте к этому списку xf86-video-amdgpu
для видеокарт AMD или nvidia
. А так же патчи безопасности для процессоров: amd-ucode
или intel-ucode
.
А теперь сгенерируем fstab, файл который содержит указания системы что и куда монтировать при загрузке:
genfstab -U /mnt | sed 's/,relatime/,noatime,commit=300,discard=async/' >> /mnt/etc/fstab
Тут мы изменили с целью оптимизации некоторые параметры монтирования:
- Каждый раз когда мы открываем файл, записывается время его изменения,
noatime
запрещает запись времени модификации файла. - Btrfs хранит кеш в оперативной памяти и сбрасывает его на диск через интервал указанный в секундах в параметре
commit
. discard=async
предотвращает микрофризы при выполнении TRIM.
Первые два параметра продлевают ресурс SSD.
Делаем chroot и "грузимся" в систему:
arch-chroot /mnt
Редактируем /etc/locale.gen
:
$ micro /etc/locale.gen
Нужно найти и расскоментировать (убрать в начале #
) сл строки:
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8
Генерируем локали:
$ locale-gen
Generating locales...
ru_RU.UTF-8... done
en_US.UTF-8... done
Generation complete.
Задаем локаль по-умолчанию:
localectl set-locale LANG=en_US.UTF-8
# системная локаль
echo LANG=en_US.UTF-8 > /etc/locale.conf
# или
locale > /etc/locale.conf
Смотрим список раскладок клавиатуры для консоли Linux (та в которую можно попасть, нажав Ctrl + Alt + F1-6):
localectl list-keymaps | grep ru
Загружаем раскладку:
loadkeys ruwin_ct_sh-UTF-8
Теперь мы можем по ctrl+shift переключать раскладку с английской на русскую.
Посмотрим шрифты для консоли:
ls /usr/share/kbd/consolefonts | less
Загрузим какой-нибудь шрифт с поддержкой кириллицы:
# 1080p
setfont ter-v14n
# 4k
setfont ter-v18b
Эти настройки нужно сохранить:
echo 'KEYMAP="ruwin_ct_sh-UTF-8"' >> /etc/vconsole.conf
# либо так
localectl set-keymap --no-convert ruwin_ct_sh-UTF-8
# И сохраняем шрифт
echo 'FONT="ter-v18n"' >> /etc/vconsole.conf
Ищем нужную временную зону:
$ timedatectl list-timezones | grep Mosc
Europe/Moscow
Задаем временную зону:
timedatectl set-timezone 'Europe/Moscow'
Включаем синхронизацию времени с NTP-сервером:
timedatectl set-ntp true
Опционально устанавливаем часы компьютера:
hwclock --systohc
В имени хоста можно использовать латинские символы, цифры, -
, _
, .
...
В качестве имени хоста можно указать:
- если у вас сервер, то доменное имя;
- username-laptop или username-pc username-LaptopModel, username-archlinux или username-arch;
- фамилию, кличку, звезду, планету... случайны набор символов;
- не указывать его, оставив по умолчанию archlinux.
Имя хоcта нужно для вашей идентификации в локальной сети. Это имя можно использовать вместо локального ip-адреса, который может измениться. Например, вы можете через VPN подключиться к локальной сети в офисе, а далее через ssh your_hostname
к своей машине...
hostnamectl set-hostname YOURHOSTNAME
Редактируем хосты:
micro /etc/hosts
Содержимое должно быть примерно таким:
127.0.0.1 localhost
::1 localhost
127.0.1.1 <YOUR_HOSTNAME>.localdomain <YOUR_HOSTNAME>
# строки ниже опциональны и приведены в примере из man
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Linux грузится с помощью образа initramfs: сначала файловая система монтируется в оперативную память (Initial-RAM-File-System), загружаются драйвера, монтируется реальная файловая система, и наконец мы получаем возможность войти в систему.
Редактируем настройки образа в файле /etc/mkinitcpio.conf
:
micro /etc/mkinitcpio.conf
Добавьте драйвера видеокарт в образ:
# AMD
MODULES=(amdgpu)
# или NVIDIA
MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
# или встройка AMD + дискретка NVIDIA
MODULES=(amdgpu nvidia nvidia_modeset nvidia_uvm nvidia_drm)
Добавление видеодрайверов позволяет решить проблем с редактированием конфигов при подключении мониторов, запуске игр игр на дискретке...
ВАЖНО!!!!!! В хуки добавляем btrfs
и encrypt
(при исп LUKS) до filesystems:
HOOKS=(... encrypt btrfs filesystems ...)
Хуки — это скрипты с функцией run_hook
, которые выполняются последовательно при загрузке initrmafs.
Изменим дефолтный уровень сжатия для zstd:
# COMPRESSION_OPTIONS
# Additional options for the compressor
COMPRESSION_OPTIONS=(-T0 -15)
Теперь сгенериреум образ:
mkinitcpio -P
Создаем пользователя:
useradd -m -G users -s /bin/zsh <YOUR_USERNAME>
-m
‒ создать каталог пользователя в/home
;-G
‒ дополнительные группы, передаваемые через запятую. Добавив себя в группуsystemd-journal
, вы сможете без sudo просматривать логи с помощьюjournalctl
...
Устанавливаем для него пароль:
$ passwd <YOUR_USERNAME>
New password:
Retype new password:
passwd: password updated successfully
В целях безопасности лочим пользователя root, чтобы из под него нельзя было авторизоваться:
$ passwd -l root
passwd: password changed.
Разрешаем sudo для себя (одноименной группы, создаваемой по умолчанию):
echo '%<YOUR_USERNAME> ALL=(ALL:ALL) ALL' > /etc/sudoers.d/<YOUR_USERNAME>
Так же можем отредактировать sudoers, разрешив пользователям в группе wheel доступ к sudo:
$ micro /etc/sudoers
# Нужно найти раскомментировать строку:
%wheel ALL=(ALL:ALL) ALL
Часто в инструкциях пользователя добавдяют в группу sudo. Группы wheel и sudo делают одно и то же: дают доступ к выполнению команды sudo. Так уж исторически сложилось, что в debian-based дистрибутивах используют группу sudo, а в RHEL ‒ wheel.
Загружаться мы будем через systemd-boot. Для этого установим EFI:
bootctl install
Создаем загрузочную запись. Для начала сохраним PARTUUID шифрованного раздела в конфиг, так как его запомнить проблематично:
blkid -o value -s PARTUUID /dev/nvme0n1p2 > /boot/loader/entries/arch.conf
Отредактируем конфиг:
micro /boot/loader/entries/arch.conf
Он должен выглядеть примерно так:
title Arch Linux
initrd /amd-ucode.img
initrd /initramfs-linux.img
linux /vmlinuz-linux
options cryptdevice=PARTUUID=fa65a43e-eb75-48f0-aee1-975a50c2e00d:cryptroot:allow-discards root=/dev/mapper/cryptroot rootflags=subvol=/@ rw nvme_core.default_ps_max_latency_us=0
Последняя строчка, если не используется LUKS будет выглядеть так:
options root=PARTUUID=fa65a43e-eb75-48f0-aee1-975a50c2e00d rootflags=subvol=/@ rw nvme_core.default_ps_max_latency_us=0
- Параметр
nvme_core.default_ps_max_latency_us=0
нужен для некоторых моделей SSD M.2. Без него файловая система через неопределенное время переходит вread only
. initrd /amd-ucode.img
- это подгрузка микрокодов процессора для исправления различных уязвимостей./amd-ucode.img
заменяем на/intel-ucode.img
.
Установите микрокоды проца (в зависимости от производителя):
pacman -Sy amd-ucode
# либо
pacman -Sy intel-ucode
Настроим загрузчик:
micro /boot/loader/loader.conf
timeout 4
default arch.conf
console-mode max
editor no
/etc/environment
— это лучшее место для задания переменных, которые будут установлены глобально для всех пользователей...
Сделаем редактором по-умолчанию micro для всех взамен старперского vim (мы его даже не стали устанавливать) из которого не могут выйти 95% пользователей Linux (<ESC>
, :qa!
, <Enter>
).
echo 'EDITOR=micro' >> /etc/environment
Переменные окружения, которые должны быть доступны только для вас и приложений, запускаемых от вашего пользователя, в дальнейшем можно добавлять в ~/.zshenv
, ~/.zlogin
, ~/.xprofile
, ~/.profile
как export KEY=VALUE
. Общие для всех переменные можно установить в сценариях /etc/profiles.d/<filename>.sh
.
Если система стартует через systemd (со startx
не будет работать), то пользовательские переменные окружения в виде KEY=VALUE
можно установить в ~/.config/environments.d/<filename>.conf
либо в /etc/environment.d/<filename>.conf
(общие для всех).
pacman -Sy xfce4 xfce4-goodies network-manager-applet lightdm lightdm-gtk-greeter
systemctl enable lightdm
Плюсы:
- Выглядит минималистично... как Gnome 2, форком которого он и стал, но Gnome за это время уже сменил кучу версий Gtk.
- Легковесность — пакеты занимают мало места, и система потребляет мало ресурсов. В xfce по умолчанию менее 900 пакетов в то время как для KDE или Gnome их нужно на треть больше...
- Стабильность: разработчики что-то ломают нечасто.
Минусы:
- Вытекают из стабильности: баги не исправляют годами. Например, тот же gnome-keyring, будет у вас упорно запрашивать пароль даже если для связки ключей вы установите тот же пароль, что и для пользователя (эта проблема решается именно так в Gnome).
- Многие простые вещи, например, создание ярлыка на рабочем столе, требуют кучу дополнительных телодвижений (нужно создать Launcher, указать имя, выбрать исполняемый файл и иконку для него).
- Трудность настройки.
- Ограниченная поддержка HDPi.
- Не поддерживает Wayland (тут сомнительный минус, так как последний скорее всего так никогда и не победит иксы).
- Нет расширений как в Gnome, есть убогий аналог Plasmoid'ов.
Заключение: все так себе, но жить можно. Некоторые делают из Xfce конфетку, выбрасывая стандартные панели и пр.
pacman -S gnome gnome-extra
systemctl enable gdm
Плюсы:
- Закос под MacOS с довольно таки минималистичным интерфейсом;
- Лучшая поддержка Wayland;
- Сам Gnome ломается редко в отличии от расширений...
Минусы:
- Без расширений не очень удобен в использовании.
- Расширения ломаются после каждого обновления.
- Нужно отдельно настраивать внешний вид для приложений под Qt, например, ч/з Kvantum.
- Потребляет ресурсов не меньше чем Windows.
Заключение: не с проста во многих дистрибутивах является DE по умолчанию, например, в Ubuntu, Fedora, что говорит о доверии со стороны разработчиков дистрибутивов, подтверждает тезис о стабильной работе самой системы, но не сторонних расширений...
pacman -S plasma kde-applications
systemctl enable sddm
Плюсы:
- Похож на Windows 10.
- Темы можно устанавливать глобально для Qt и Gtk приложений.
- Настройка почти всего без ковыряния текстовых конфигов! Огромное количество настроек.
Минусы:
- Постоянные баги.
- С поддержкой Wayland проблемы.
- Потребляет много ресурсов примерно как Gnome.
Заключение: поддержка Wayland обычным пользователям не нужна, а с большинством багов можно смириться + Steam Deck работает на KDE Plasma, а значит есть надежда, что баги будут исправляться быстрее, как и появляться новые фичи, так как Габен занесет денег...
Включим менеджер сети:
systemctl enable NetworkManager
Можно не выходить, а выполнить что-то типа:
startx
systemctl start gdm
systemctl start sddm
Но если хочется проверить загрузку...
Выходим из chroot:
exit
Теперь можно перегрузиться и вытащить флешку:
reboot
Для управления пакетами я советую использовать yay (yet another yaourt).
Главное преимущество Arch Linux в AUR, а поэтому нам нужен пакетный менеджер с его поддержкой. Раньше для этих целей использовали yaourt, но за прошедшие годы последний уступил пальму первенства.
$ cd /tmp
$ git clone https://aur.archlinux.org/yay-bin
$ cd yay-bin
$ makepkg -si
Ядру Linux, независимо от размера оперативной памяти, нужно периодически сбрасывать страницы памяти в SWAP.
Для экономии ресурса SSD SWAP можно размещать в сжатом виде в оперативной памяти (ZRAM).
Установка:
$ yay -S zram-generator-git zram-generator-defaults
Включение ZRAM:
$ sudo systemctl restart systemd-zram-setup@zram0
Рекомендованные настройки SWAP для SSD:
/etc/sysctl.d/99-swappiness.conf
vm.swappiness=100
vm.vfs_cache_pressure=10
Применяем настройки:
$ sudo sysctl --system
Очень удобная вещь для разворачивания приложений. Требует минимум настройки и система не засирается хвостами.
$ yay -S docker docker-compose
# Добавим пользователя в группу docker, чтобы использовать команду docker без sudo
$ sudo usermod -aG docker $USER
# Перегрузимся
$ reboot
Юсаге:
# (Пере)собрать и запустить контейнеры
$ docker-compose up -d
# Остановить контейнеры
$ docker-compose stop
# Запустить остановленные ранее контейнеры
$ docker-compose start
# Остановить и удалить контейнеры
$ docker-compose down
docker-compose.yml
:
version: '3.9'
services:
postgres:
container_name: postgres
image: postgres:alpine
env_file: .env
networks:
- internal
ports:
- '54320:5432'
restart: unless-stopped
volumes:
- ./data/postgres:/var/lib/postgresql/data:rw
pgadmin:
container_name: pgadmin
image: dpage/pgadmin4
depends_on:
- postgres
env_file: .env
networks:
- internal
ports:
- "5050:80"
restart: unless-stopped
volumes:
- ./data/pgadmin:/var/lib/pgadmin:rw
redis:
container_name: redis
image: redis:alpine
networks:
- internal
ports:
- "63790:6379"
restart: unless-stopped
volumes:
- ./data/redis:/var/lib/redis:rw
networks:
internal:
.env
:
POSTGRES_USER=docker
POSTGRES_PASSWORD=password
POSTGRES_DB=db
[email protected]
PGADMIN_DEFAULT_PASSWORD=admin
В pgadmin заходим через localhost:5050
, в качестве имени хоста базы указываем имя сервиса, те postgres
вместо традиционного localhost
и порт 54320
,
Snapper ‒ это менеджер снапшотов (снимков состояния файловой системы) для Btrfs. Он может их создавать/удалять по таймеру, а так же позволяет восстанавливать отдельные файлы.
$ yay -Sy snapper
Установим так же хук, который будет делать снапшоты после каждого обновления пакетов:
$ yay -S snap-pac
Снапшоты делаются каждый час, если не переопределить это поведение:
$ systemctl edit snapper-timeline.timer
[Timer]
OnCalendar=<period>
Настройки по-умолчанию предполагают слишком длительное хранение снапшотов, что может привести к постоянной проблеме нехватки места, если у вас SSD маленького объема.
Создаем новый шаблон файла конфигураций, чтобы не редактировать дефолтный:
$ cd /usr/share/snapper/config-templates
$ cp default config
$ micro config
Где значения TIMELINE_LIMIT_<PRERIOD>
указывают сколько хранить N последних снапшотов за час (HOURLY)/день (DAILY)/неделю (WEEKLY)/месяц (MONTHLY)/год (YEARLY).
Пример конфига:
...
TIMELINE_LIMIT_HOURLY="10"
TIMELINE_LIMIT_DAILY="7"
TIMELINE_LIMIT_WEEKLY="0"
TIMELINE_LIMIT_MONTHLY="0"
TIMELINE_LIMIT_YEARLY="0"
...
Храним 10 последних за час и 7 ежедневных (хранится самый первый за день).
snapper -c root create-config -t config /
snapper -c home create-config -t config /home
systemctl enable snapper-timeline.timer
systemctl enable snapper-cleanup.timer
# Смотрим номер последнего снапшота
sudo snapper -c <config> list -a
# Восстанавливаем файл
sudo snapper -c <config> undochange 0..<number> /path/to/file
Если не планируете пользоватся GUI, то может пригодиться...
В более сложных случаях может потребоваться восстановление системы:
$ sudo su
$ mount /dev/mapper/root /mnt
$ ls /mnt
@ @home @.snapshots ...
$ cd /mnt
# Смотрим снапшоты
$ ls @.snaphosts
... 42 ...
# Переименовываем старый корневой сабвольюм
$ mv @ @old
# Помним, что snapshot и subvolume это одно и тоже, считай, а значит мы монтировать снапшот
# Делаем снимок снапшота, по-сути копирем его, так как снапшоты, создаваемые snapper readonly
$ btrfs sub snap @.snaphots/42/snapshot @
# Редактируем fstab, если он содержит subvolid
# Ищем `subvol=/@` и удаляем `subvolid=N,`
$ micro @/etc/fstab
# Или же можно прописать subvolid
$ sudo btrfs sub show @ | grep 'Subvolume ID'
Subvolume ID: XXX
# Монтируем сабвольюм
$ mount -o remount /
# Теперь можно удалить @old
$ btrfs su de @old
Это стандартная утилита для дистрибутива Garuda Linux (основан на Arch'е как Manjaro и пр. суррогаты). Графический менеджер для управления снапшотами и восстановления из них.
yay -S btrfs-assistant btrfsmaintenance
Для использования Btrfs Assistant не подходит плоская схема, при которой подтома со снапшотами (@snapshots
, @home.snapshots
и тп) монтируются в /.snapshots
или /home/.snapshots
. При восстановлении из снапшота, делает снапшот савольюма, а затем заменяет его на выбранный снапшот, все дочерние сабвольюмы и снапшоты перемещаются.
Все пакеты стараемся ставить через yay. Flatpak используем только в крайних случаях: а) если пакета нет в репозитории, б) он сломался и не работает. Идея, конечно, хороша, но VS Code из Flatpak не юзабелен, а в каком-нибудь Brave не возможно подключиться к Tor. Бинарники из pip/npm можно ставить с помощью pipx/npx.
Графические приложения можно устанавливать через Flatpak. Приложения запускаются в изолированной среде, и они не имеют права на запись в системные каталоги хоста. Принцип работы схож с Docker. Если кратко: мы запускаем приложение в виртуалке на основе LXC(прим. контейнерезация — это разновидность виртуализации). По идее оно не может повредить систему, так как внутри Flatpak контейнера нельзя использовать sudo
, но украсть данные это не помешает личные данные из хомяка...
yay -S flatpak
flatpak install -y Krita
Плюсы:
- Безопасность: приложения запускаются в контейнерах и имеют ограниченный доступ к файловой системе. Так же можно, например, ограничить доступ к сети.
- Частичные, так называемые дельта-обновление - не нужно скачивать пакет целиком, так как исп.
ostree
, работающий по тому же принципу, что иgit
, те при обновлении скачиваются только различия между версиями. - Не нужна настройка, например, шрифтов как в Telegram и тд.
- Зависимости идут в виде отдельных рантаймов, общих для других приложений в отличие от
AppImage
, где все-все зависимости идут с приложением. - Решает проблему с устаревшими зависимостями после обновления системы.
Минусы:
- Приложения запускаются дольше (не мгновенно).
- Занимают дополнительное место за счет рантаймов. Например одновременно могу стоять две версии
org.gnome.Platform
и триorg.kde.Platform
. - Нельзя доставить зависимости, например, те которые видим в выводе
yay -Qi
. Проблема со шрифтами. - Не работает интеграция с Gnome, KDE у того же Chromium.
- Невозможно полноценно использовать IDE, установленные через
Flatpak
из-за его ограничений. В качестве решения этой проблемы авторы советуют использоватьSdk.Extension
. Например,flatpak install flathub org.freedesktop.Sdk.Extension.golang
и запуск среды разработкиFLATPAK_ENABLE_SDK_EXT=golang flatpak run com.visualstudio.code
. - В Telegram нельзя перетащить файл для отправки, если он где-то в
/mnt
. - Приложения в репозитории часто требуют больше прав чем им необходимо для работы.
Обновляет все подряд: пакеты pacman, AUR, Flatpak... образы Docker, плагины для ZSH и тд
$ yay -S topgrade
$ topgrade
# Загрузочный раздел: /dev/nvme0n1p4
# EFI не удалено
efibootmgr -c -d /dev/nvme0n1 -p 4 -L "Linux Boot Manager" -l '\efi\boot\bootx64.efi'
# Удаление записи
efibootmgr -b 000X -B
# Список записей, порядок загрузки и тп
efibootmgr -v
# Смена порядка. См вывод предыдущей команды
efibootmgr -o 0002,0001,...
Проблема: после установки/обновления Windows пропадает загрузочная запись Linux.
Запускаем терминал (Windows Terminal) от имени администратора (Win
+X
, Alt
+A
) и выполняем:
PS C:\Users\yourname> bcdedit /copy '{bootmgr}' /d "Arch Linux Boot"
The entry was successfully copied to {6c4580c1-e401-11ec-b643-089798e96d74}.
PS C:\Users\yourname> bcdedit /set '{6c4580c1-e401-11ec-b643-089798e96d74}' path \efi\boot\bootx64.efi
The operation completed successfully.
PS C:\Users\yourname> bcdedit /set '{fwbootmgr}' displayorder '{6c4580c1-e401-11ec-b643-089798e96d74}' /addfirst
The operation completed successfully.
PS C:\Users\yourname>
Скачайте образ Windows с сайта Microsoft.
Если у вас есть флешка с Ventoi и Windows, то пропускаем запись загрузочной флешки.
Установите утилиту для создания загрузочных флешек для Windows:
$ yay -S woeusb
Записываем образ:
$ sudo woeusb --device ~/Downloads/Windows...iso /dev/sdX
Теперь нам нужно загрузиться с флешки с Windows, проделав операции по смене приоритетов...
Либо можно почитать man efibootmgr
.
Грузимся с флешки, ожидаем пока закончится загрузка Windows и нажимаем Shift
+ F10
. Откроется консоль.
В консоли выполняем следующее:
> diskpart
DISKPART> list volume
:: Смотрим, где у нас установлена Windows
:: Если вы установили, Arch Linux на другой диск, то удалите загрузочный раздел винды (но не сам раздел с Windows! см. `help`)
DISKPART> exit
:: Устанавливаем Windows EFI на загрузочный раздел
> bcdboot c:\windows
SSD не живут вечно, у них есть ресурс перезаписи, который в зависимости от типа памяти (SLC, MLC, TLC или QLC, где первая буква количтсво бит на ячейку 1-4) может составлять от 10000 до 2500 перезаписей ячеек. Но очень часто SDD умирают, даже не выработав его. К этому приводит неожиданная смерть контроллера. Смерть контроллера означает невозможность восстановлкения данных! Поэтому, если на вашем диске хранится что-то важное, что нельзя беекапить в облако, то лучше докупить диск и запихнуть его в зеркальный RAID.
# Создаем raid
# Используем flag --metadata=1.0, чтобы супер-блок располагался в конце диска
mdadm -v --create --metadata=1.0 /dev/md0 -l 1 -n 2 missing /dev/nvme1n1p1
# Создаем файловую систему на /dev/md0 и тп
# Монтируем созданный raid
mount ... /dev/md0 /mnt
# Копируем данные с раздела /dev/nvme0n1p1 помощью rsync'a
rsync -avh ... /mnt
# Добавляем его в массив
mdadm --add /dev/md0 /dev/nvme0n1p1
# Ждем пока данные синхронизируются
watch -n 1 /proc/mdstat
# Сохраняем конфиг
mdadm --verbose --detail --scan >> /etc/mdadm.conf
Хуки /etc/mkinitcpio.conf
:
HOOKS=(base systemd autodetect modconf kms keyboard sd-vconsole block mdadm_udev sd-encrypt filesystems fsck)
mdadm_udev
У меня используется RAID-1 > LUKS > Btrfs.
options md=0,/dev/nvme0n1p1,/dev/nvme1n1p1 rd.luks.name=f2233ed8-fbe6-4199-890a-d416c7a2a62b=root root=/dev/mapper/root rootflags=rw,subvol=@
sudo mdadm --misc --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Oct 25 00:17:13 2023
Raid Level : raid1
Array Size : 487455744 (464.87 GiB 499.15 GB)
Used Dev Size : 487455744 (464.87 GiB 499.15 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Fri Oct 27 04:30:48 2023
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Name : sergey-arch:0 (local to host sergey-arch)
UUID : 17332b2d:1685f236:6e28b36e:277f39cf
Events : 20482
Number Major Minor RaidDevice State
0 259 3 0 active sync /dev/nvme1n1p1
1 259 6 1 active sync /dev/nvme0n1p1
Старое
Дополнения
Касательно необходимости заведения отдельного сабвольюма для
/var
, на самом деле перенос тех вложенных сабволбюмов, создаваемых докером не сложен:>>> Установщик Arch Linux (устарел и годится только как пример для написания своего) <<<
Table of Contents
Установка Arch Linux
Arch Linux
Arch Linux ‒ это один из немногих дистрибутивов Linux, использующих модель роллинг-релизов. Это означает, что в нем доступны самые последние версии пакетов. Это одновременно является его как преимуществом так и недостатком. Пересесть на него меня заставила необходимость: мое компьютерное железо (процессор ryzen 5 2600 и видеоадаптер rx 590) оказались не совместимы с версией Linux Kernel младше 4.20.
На самом деле все не так плохо, но неприятные инциденты имеют место хотя и очень редко.
Создание образа
Качаем образ и записываем его с помощью команды:
$ sudo dd if=/path/to/iso of=/dev/sdX bs=8M status=progress; sync
Где
sdX
– имя нашего USB устройства. Перегружаемся после удачного завершения операции.В Windows для создания загрузочной флешки можно использовать Rufus.
Изменяем приоритет загрузки в BIOS/UEFI
При загрузке системы нажимаем F2 или Del (зависит от производителя материнской платы). Во вкладке BIOS в приоритете загрузки делаем первым наше USB-устройство. Нажимаем F10 и сохраняем настройки. На материнках ASUS нужно CSM (режим поддержки устаревших операционных систем) установить в auto.
Начало установки
Инструкцию по установке Arch Linux можно посмотреть так:
less ~/install.txt
Небольшой лайфхак: во время установки можно переключаться между терминалами с помощью
Ctrl+Alt+F1..6
. Если мы нажмемCtrl+Alt+F2
откроется второй терминал (по-умолчанию мы работаем в первом) и потребуется ввести парольroot
, во втором терминале мы можем открыть инструкцию и периодически подсматривать ее, переключаясь между терминалами.Настройка сети
При подключении от кабеля ничего настраивать не надо. Настройка wifi требует ввода пары команд:
Следует отметить, что не все usb wifi адаптеры гараниторованно поддерживаются. Например, у меня не захотел работать dexp wfa 301, а вот с tp-link все ок.
Проверить соединение можно с помощью команды ping:
$ ping -c 3 ya.ru PING ya.ru (87.250.250.242) 56(84) bytes of data. 64 bytes from ya.ru (87.250.250.242): icmp_seq=1 ttl=53 time=12.1 ms 64 bytes from ya.ru (87.250.250.242): icmp_seq=2 ttl=53 time=12.1 ms 64 bytes from ya.ru (87.250.250.242): icmp_seq=3 ttl=53 time=12.1 ms --- ya.ru ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 5ms rtt min/avg/max/mdev = 12.137/12.139/12.141/0.127 ms
Выбор файловой системы
Файловая система Btrfs может размещаться на одном и более устройствах/разделах. В Btrfs есть подтома с динамическим размером (по-сути ‒ обычные каталоги) и группы с помощью которых можно ограничивать размер подтомов. Главная фишка Btrfs ‒ это легковесные снапшоты и на диске хранятся только различия между оригиналом и накопленные изменения. Мы можем периодически делать снапшоты подтомов, а потом в случае необходимости восстанавливать состояние системы, причем делать это налету.
Касательно LVM: единственное удобство в нем для меня – это возможность динамически менять размер разделов. Самая частая проблема, которая у меня была раньше – это то, что я не угадывал размер для корня. Мы можем добавлять в группу другие разделы (не обязательно на одном устройстве) и устройства. Нет ограничений как для обычных разделов, когда невозможно расширить раздел за счет предыдущего, нам вообще об этом не нужно заботиться. В LVM есть группы разделов и логические разделы. У логических разделов свои файловые системы. Увеличение размера логического раздела в отличии от уменьшения размонтирования не требует. resize2fs в LVM работает заметно быстрее. В LVM так же есть снапшоты, но они по-сути представляют полный бекап раздела.
И как вариант: можно использовать Btrfs под LVM, но это сопряжено с увеличением накладных расходов на работу с файловой системой.
Размечаем диск
Для начала посмотрим все доступные устройства:
Создадим новый раздел:
Если есть раздел с Windows сделайте от него отступ 1-2 MB, т.к. Windows выходит за установленные лимиты и портит соседние разделы.
Если не установлен Windows:
Создаем раздел в FAT-32 размером, а затем форматируем его:
Для FAT32 https://en.wikipedia.org/wiki/File_Allocation_Table#Size_limits на минимальный размер раздела составляет от 32 до 260 мегабайт в зависимости от размера логического сектора. У современных SSD размер блока составляет 512 bytes, что дает минимальный размер ESP 32 MiB. Для Windows 10 минимально-рекомендованным является размер в 100MiB, при этом будет занято 25% раздела. Для Dual Boot под каждую ОС можно выделить по 100 MiB (200 MiB в совокупности). Arch Wiki рекомендует 512 MiB.
Немного про swap: в Linux есть компонент ядра OOM-killer (Out-of-Memory), который запускается когда кончается доступная память, тогда он убивает наименее приоритетные процессы, например, может убить IDE с несохраненным прогрессом. Такие ситуации могут возникнуть, например, при компиляции из исходников, утечках. Так же swap используется при гибернации, когда содержимое оперативной памяти сохраняется на диск и при следующем запуске вы сможете полностью восстановить состояние.
В дальнейших примерах предполагается, что у нас установлена Windows, которая занимает 4 раздела: recovery, efi, reserved, Windows. Поэтому в примерах новый раздел nvme0n1p5.
Создание файловой системы и монтирование
Вариант №1: Btrfs
### Вариант №2: LVM
Установка пакетов
base-devel содержит набор утилит для компиляции, позже пригодится
Генерируем fstab
genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot
При использовании LVM нужно выполнить чуть больше действий:
Настраиваем дату и локаль
Далее:
Раскоментируем:
Генерируем локали:
Задаем язык системы:
Так же нужно настроить Linux Console (в нее мы можем попасть, нажав случайно Ctrl+Alt+F):
Настройка раскладки клавиатуры в X.Org:
localectl --no-convert set-x11-keymap us,ru pc105 "" grp:alt_shift_toggle
Прописываем хосты
Добавляем в файл такие строки:
Initramfs
При использовании LVM нужно отредактировать
/etc/mkinitcpio.conf
и модифицировать список HOOKS, добавивlvm2
ДО ЗНАЧЕНИЯfilesystems
:Генерация:
Пользователи
Теперь в файле
/etc/sudoers
нужно раскоментировать строку:Установка grub
Чтобы отключить автоматическую загрузку Linux, редактируем дефолтный конфиг груба:
Меняем GRUB_TIMEOUT, если не хотите чтобы Arch грузился автоматически через 5 секунд ожидания на экране Grub:
Затем генерируем grub:
Завершение
Дополнительно
Swappines
При 60% свободной памяти, система начнет активно использовать своп.
Изменяем это поведение:
Чтобы сделать значение постоянным, создаем
/etc/sysctl.d/99-swappiness.conf
со следующим содержимым:man & help
Типы файлов в выводе ls и других стандартных команд
There is only 1 command you need to know, which will help you to identify and categorize all the seven different file types found on the Linux system.
Here is an example output of the above command.
ls command will show the file type as an encoded symbol found as the first character of the file permission part. In this case it is "-", which means "regular file". It is important to point out that Linux file types are not to be mistaken with file extensions. Let us have a look at a short summary of all the seven different types of Linux file types and ls command identifiers:
Пакетные менеджеры
Пакетным менеджером по-умолчанию для Arch Linux является pacman. Для подсветки вывода pacman в
/etc/pacman.conf
нужно раскомментироватьColor
. Пользовательским репозиторием является AUR. Пакеты из него можно использовать только на свой страх и риск, но использовать все же придется ведь в официальных репозиториях много нету. Чтобы не собирать пакеты вручную можно поставить yay:Пакеты всегда нужно ставить из репозиториев. Смысла собирать их из исходников нет, так как в AUR и так самые последние версии. Так будет меньше хлама оставаться в системе после их удаления.
Синтаксис команды Yay аналогичен pacman. Так что будет полезным почитать справку по pacman.
Ссылки:
Нужные пакеты
Это список необходимых для меня пакетов:
Заменяем ядро на стабильное
Если надоело, что что-то ломается почти после каждого обновления ядра, запускаем терминал и выполняем:
Масштабировавние 150% как в Windows
По-умолчанию в Gnome масштабирование кратно 100. Чтобы добавить варианты масштабирования 125% и 150% нужно выполнить в терминале:
Отключение:
Расширения для Gnome
Устанавливаем расширение для Chrome.
Управление расширениями осуществляется через Tweaks.
Расширения для установки:
Пользовательские сочетания клавиш
В Settings → Devices → Keyboard добавляем сочетания клавиш:
Ctrl + Alt + T
для запуска терминала (gnome-terminal
);Ctrl + Alt + V
для запуска Visual Code (code
).Запуск исполняемых файлов по двойному клику в Nautilus
Заставляем Nautilus выполнять исполняемые файлы вместо открытия их в текстовом редакторе. Нужно нажать на три точки, а потом выбрать Preferences:
Добавляем новые действия в контекстное Nautilus
У программы есть интерфейс, который позволяет добавлять свои команды. Существуют два плейсхолдера: %d для текущего каталога и %f для файла.
To install nautilus-action on Ubuntu, run simply this command via the Terminal:
sudo apt-get install nautilus-actions
(or equivalant packet manager as yum or pacman)
After the installation is complete, let's now see a quick example of how to add an extra action to the right-click menu with nautilus-actions.
The example consists of adding to the right-click menu the "Edit With Gimp" action to edit, for example, image files using The Gimp (Image Editor).
_Using the dash search "nautilus-actions" and click Nautilus-Actions Configuration.
_Under the Action tab, fill the following fields:
Context label: The text that will be displayed in the right-click menu, in our example, it's "Edit With Gimp"
Icon: This option allows to select an icon for your action (optional)
_Open now the Command tab and fill in the following fields:
Label: Enter any label of your choice for your action.
Path: Enter the path to the program you want to use using the Browse button. For our example, we will simply type "gimp".
Parameters: Click the Legend button to get suggested parameters. In our example, we will use the %f parameter to be able to edit image files with The Gimp.
_Log out the current session and log on again, or simply restart Nautilus with these commands from the Terminal:
nautilus -q
nautilus
Страница проекта.
Шаблоны файлов
Чтобы в Nautilus в контекстном меню отображался пункт
New Document
, нужно в~/Templaytes
создать шаблоны файлов:Гибернация
Режим гибернациии от режима сна отличается тем, что в первом случае содержимое оперативной памяти сохраняется на жесткий диск и питание полностью отключается, во втором - питание подается только на оперативку. Чем хороша гибернация? - Например, мы работаем в Linux, вошли в режим гибернации, а затем загрузились в Windows и играем. Когда мы в следующий раз загрузимся в Linux, то увидим все то, что было перед выключением. Прекрасно?! Но часто ли такое нужно?
При переходе в режим гибернации делается дамп используемой оперативной памяти на диск. Размер файла/раздела подкачки для этих целей советуют делать не менее 2/5 от объема RAM на современных компьютерах. Так же можно применять сжатие при дампе. Про гибернацию лучше почитать здесь.
Режим гибернации по-умолчанию отключен. Чтобы его включить для начала нужно узнать UUID раздела, где расположен своп:
$ lsblk `df /swapfile | awk '/^\/dev/ {print $1}'` -no UUID 217df373-d154-4f2e-9497-fcac21709729
А затем сектор диска с которого начинается файл:
Если swapfile размещен на Btrfs, то описанный выше способ работать не будет.
В
/etc/default/grub
прописать:resume_offset
нужен только для файла. Для дисков и разделов вместо UUID можно указывать /dev/sda3 или /dev/mapper/linux-swap.Теперь нужно изменить /etc/mkinitcpio.conf:
Обновляем grub и генерируем initramfs:
Сам переход в режим гибернации выглядит так:
Чтобы появилась кнопка для перехода в режим гибернации ставим расширение.
RAID
Аппаратный RAID
В Linux RAID на аппаратном уровне называют FakeRAID. Для работы с FakeRAID используется пакет dmraid.
Редактируем конфиг mkinitcpio:
В хуки добавляем dmraid:
И генерируем mkinitcpio:
На моей материнке с чипсетом b450 с апаратным RAID из Linux работать нельзя: нет драйвера.
Программный Windows RAID
Этот раздел можно было бы озаглавит как RAID, доступный в Windows и в Linux. В Windows, в Disk Management нужно создать Striped Volume, аналог RAID 0 (правой кнопкой мыши по нужному диску). Это когда данные пишутся параллельно на разные устройства без дублирования. Одтн блок пишется на один диск, другой на второй, причем одновременно. Чтение происходит также. Таким образом при использовании 2 дисков мы получаем двойную скорость чтения/записи.
Теперь можно монтировать устройство
/dev/mapper/ldm_vol_DESKTOP-VR9KKHM-Dg0_Volume1
.Но нам нужно чтобы устройство автоматически создавалось. Для этого нужно создать сервис
/etc/systemd/system/ldmtool.service
:Включим его:
$ sudo systemctl enable ldmtool.service
Редактируем
/etc/fstab
:В Windows есть так же технология Storage Spaces, но ее поддержка в Linux не реализована.
Права
4 - Чтение (r)
2 - Запись (w)
1 - Выполнение (x)
Сумма этих чисел дает разные сочетания типа:
1 + 2 + 4 = 7 или 1 + 4 = 5
Права задаются тремя числами, например, 755, где первое число – права владельца, далее: группа и остальные пользователи. Владелец может делать все (1 + 2 + 4 = 7), другие пользователи – только читать и исполнять файлы (1 + 4 = 5).
Для работы с правами на файлы используется команда chroot:
В Python права можно записывать так:
Ссылки:
Монтирование
Опции:
Добавляем путь в PATH
~.bash_profile
,~/.bashrc
or~/.profile
~/.kshrc
or~/.profile
~/.zshrc
or~/.zshenv
Системные переменные окружения
Edit
/etc/environment
format: KEY=VALUE.bin в домашнем каталоге
Теперь самописные скрипты можно кидать в
~/.local/bin
, так они будут доступны только для текущего пользователя.~/.local/bin/hello
:Сделаем скрпит исполняемым:
$ chmod +x ~/.local/bin/hello
Проверка:
Монтируем Windows разделы
Редактируем
/etc/fstab
:Шрифты
Шрифты надо кидать в
/usr/share/fonts
либо в~/.fonts
или в~/.local/share/fonts
.Шарим Windows шрифты:
Наборы шрифтов:
Emoji
Теперь глифы эмодзи, если они отсутствуют у шрифта будут браться из JoyPixels.
Спецсимволы
Для вставки специальных символов в Gnome применяется сочетание клавиш
Ctrl+Shift+U
, далее вводим 4-х значный код символа.Сетевые интерфесы
Расшифрорвка имен:
Так же можно менять свой локальный ip.
Ссылки:
(Linux ifconfig command)[https://www.computerhope.com/unix/uifconfi.htm].
Блокируем сайты с рекламой через hosts
Информация о железе
Редактирование DConf
DConf хранит профили терминала в
~/.config/dconf/user
, в формате GVDB пруф.ZSH
Установка ZSH
Меняем shell на
/bin/zsh
:$ chsh -s $(which zsh)
Чтобы изменения вступили в силу нужно залогиниться по-новой.
## [Oh My Zsh](https://github.com/robbyrussell/oh-my-zsh)Установка:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
Пакет из репозитория ставится вне домашнего каталога, а потому требует root права при установке плагинов, что не удобно.
Так же для некоторых тем Oh My Zsh нужны шрифты наподобие Powerline:
Ставим must-have плагины:
Изменяем
.zshrc
:Для темы Agnoster настройках терминала выбираем шрифт
Source Code Pro Regular
, чтобы отображались стрелочки.Oh My ZSH/Command Not Found
Чтобы этот плагин работал нужно выполняить ряд действий:
ZPlug
Упрощает управление плагинами, позволяя все их прописать в одном месте. Лучше zgen тем, недостающие плагины сами ставятся.
Пример
~/.zshrc
:ZGen
Устарел.
Позволяет избавиться от мусора в
~/.zshrc
.Пример файла
~/.zshrc
:После изменения
~/.zshrc
нужно перешрузить Shell:Все необходимые плагины будут скачены.
Новые плагины можно добавлять из терминала:
А можно прописать в секцию для установки, а потом выполнить:
Я не уверен, что последнее правильно.
См. справку:
Новый плагины
Темы Oh My Zsh!
Bullet Train for oh-my-zsh
$ wget -P $ZSH_CUSTOM/themes https://raw.githubusercontent.com/caiogondim/bullet-train-oh-my-zsh-theme/master/bullet-train.zsh-theme
Jovial
У меня эта тема упорно устанавливается в
/root/.oh-my-zsh
.Powerlevel10k
Это красивая тема для ZSH.
git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k
~/.zshrc
:Изменим prompt:
Подробнее про ZSH
Разноцветный cat
Цветовые схемы для терминала
Ссылки:
Бекап системы
Предполагается, что бекап мы будем делать с установочной флешки.
Ссылки:
asdf-vm
Установка asdf через Git:
Установка asdf через AUR:
В
~/.zshrc
(после compinit) добавляем строки:Устанавливаем переменную ASDF_DIR (нужна для плагина asdf oh-my-zsh) и добавляем в PATH путь до исполняемого файлаЖ.
Удаление:
Примеры:
Все доступные плагины. При установке, использовании плагинов могут возникать проблемы. Например, плагин для Python работает поверх pyenv и при возникновении проблем, следует изучить страницу «Common build problems».
После установки через pip пакетов, которые добавляют команды, чтобы те были доступны, нужно всегда выполнять
asdf reshim python
.Ссылки:
NVM
Устанавливаем последнюю версию Node.js:
Настройка Docker
Нужно выйти и войти в систему, а потом проверить:
Ссылка.
Настройка Visual Code
LVM
Список логических разделов LVM:
Изменение размера логического раздела:
Переименование логического раздела:
После нужно отредактировать
/etc/fstab
, изменив пути до разделов, а затем выполнить:Btrfs
Про снапшоты. В Btrfs есть механизм, аналогичный git, который позволяет фиксировать изменения снимками. Снапшоты хранят в себе только изменения между снимками, поэтому занимают мало места и по этой же причине не могут быть созданы вне текущей файловой системы. Они содержат только диффы. Как только мы создали снапшот, состояние системы зафиксировалось. Например у нас есть три файла: foo, bar, baz. Мы сделали снапшот, а потом удалили foo и baz, но пока существует снапшот эти файлы продолжат занимать место + если мы изменим bar, то и его первоначальная копия продолжит свое существование. Так что чтобы освободить место придется периодически удалять ненужные снапшоты.
Обнаружил баг: из-за своп-файла не делались снапшоты корня.
Типы файловых систем:
Snapper
Snapper ‒ это утилита для управления снапшотами для LVM и Btrfs.
Ссылки:
Timeshift
Программа для управления бекапами. Работает с Btrfs и в rsync-режиме (полный дамп).
Логи
/var/log/messages
/var/log/auth.log
/var/log/kern.log
/var/log/cron.log
/var/log/maillog
/var/log/qmail/
/var/log/httpd/
/var/log/lighttpd/
/var/log/boot.log
/var/log/mysqld.log
/var/log/secure
or/var/log/auth.log
/var/log/utmp or /var/log/wtmp
/var/log/yum.log
Установка и настройка Postgres
Мониторинг процессов
# Замена стандартному top $ yay -S htop $ htop
systemd
Создание своего сервиса:
/etc/systemd/system/rot13.service
:Ссылки:
Git
Работаем с github через ssh
Генерация нового ключа:
В настройках нужно добавить сгенерированный ключ, скопировав содержимое pub-файла (для примера - github_rsa.pub), который лежит в
~/.ssh
.Если уже есть проекты, которые были ранее склонированы по https, то нужно изменить
.git/config
проекта. :Правильный адрес проекта можно посмотреть на странице репозитория:
Для проекта можно указать локальные email и имя:
Tor Service
Включаем Tor:
sudo systemctl start tor sudo systemctl enable tor
Проверка:
Менеджер паролей pass
Базу паролей можно разместить на Google Диск.
Ссылки:
Частые проблемы
Система не грузится дальше rootfs
Нужно пофиксить разделы:
Пример: у нас на диске есть два ntfs раздела раздела, а за ними идет раздел Linux, мы в Windows удаляем ntfs-2, а размер ntfs-1 увеличиваем на все освободившееся пространство, в итоге Windows выходит за свои границы и портит раздел Linux. Вывод: нужно между разделами Windows и Linux оставлять пару мегабайт свободного места.
Grub Rescue
Чаще всего эта ошибка происходит после переименования логических разделов LVM, подразделов Btrfs, переноса системы на новый раздел (когда не совпадают GUID'ы).
После загрузки системы нужно переустановить grub:
$ sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id="Arch Linux" $ sudo grub-mkconfig -o /boot/grub/grub.cfg
Случайно нажали Ctrl + Alt + F* и экран стал темным
Это переключение между виртуальными терминалами. с 1-6 текстовые, остальные ‒ графические. В gdm
Ctrl+Alt+F1
‒ логин в систему,Ctrl+Alt+F2
‒ рабочий стол. В lightdm переключиться на рабочий стол можно нажатиемCtrl+Alt+F7
.Что делать, если каталоги открываются в VSCode?
Существует файл /usr/share/applications/mimeinfo.cache. В нем хранятся ассоциации между mime-типами и приложениями. Его редактирование исправляет проблему, НО такое решение является временным, так как этот файл генерируется при каждом обновлении системы из *.desktop файлов.
Нужно отредактировать MimeType (я его просто закомментировал) в /usr/share/applications/visual-studio-code.desktop и обновить mimeinfo.cache:
$ sudo nano /usr/share/applications/visual-studio-code.desktop ... # MimeType=text/plain;inode/directory; ... $ sudo update-desktop-database /usr/share/applications
Enter password to unlock your login keyring
В один прекрасный день Chrome выдаст такое предупреждение, после чего перестанут сохраняться пароли и не будет работать автозаполнение форм для логина.Решение:
Удаляем вкладку Login:
Другой вариант удалить все кейринги вручную:
$ rm -rf ~/.local/share/keyrings
Далее удаляем настройки Chrome:
$ rm -rf ~/.config/google-chrome
Теперь остается только перезапустить Chrome.
Это окошко появляется, в случае если пароль от keyring не совпадает с паролем пользователя.
Ставим менеджер паролей:
Запускаем его и меняем пароль для keyring на пароль пользователя.
Справка по командам и т.д.
Cheat.sh
Ищет на stackoverflow и других ресурсах справку по командам и языкам программирования.
Установка:
Использование:
Marker
Установка:
Пользовательские команды хранятся в
~/.local/share/marker/user_commands.txt
.Пример:
"Встроенные" в
/home/sergey/.marker/tldr/
.TLDR
Этим я пользовался до cht.sh.
Получаем краткую справку по команде:
Шпаргалка по командам Shell
Ссылки:
i3: Введение
i3 – это тайловый оконный менеджер для Linux. Тут настройки под меня.
i3: Установка и настройка
Нужно выйти из сессии и выбрать в Display Manager сессию
i3 custom
.LXAppearance используется для изменения значков, шрифта по-умолчанию в приложениях.
Nitrogen позволяет менять обои.
Для изменения оформления i3 – служит i3-style:
$ yay -S i3-style $ i3-style archlinux -o ~/.config/i3/config --reload
XTerm
Вместо
Ctrl+Shift+V
нужно использоватьShift+Ins
, а вместоCtrl+Shift+C
–Ctrl+C
. Права кнопка мыши копировать, клик по колесику – вставить.Termite: горячие клавиши
ctrl-shift-x
ctrl-shift-r
ctrl-shift-c
ctrl-shift-v
ctrl-shift-u
ctrl-shift-e
ctrl-tab
ctrl-shift-space
ctrl-shift-t
ctrl-shift-up
ctrl-shift-down
shift-pageup
shift-pagedown
ctrl-shift-l
ctrl-+
ctrl--
ctrl-=
Отсюда.
Termite: цветовые схемы
i3: заставка lockscreen
Репозиторий.
i3: сохранение/восстановление рабочего пространства
Требует установки зависимостей.
Документация.
--
Анимированные обои
Видео-инструкция.
Ошибки при установке расширений для Gnome
Посмотрить их можно так:
Либо можно нажать
Alt+F2
и ввестиlg
и поебаться с консолечкой. Закрыть ее можно с помощью клавишиEsc
.