Настройка рабочей среды
Настройка рабочей среды.
Содержание
1 Менеджер паролей pass
- Менеджер паролей
pass
— программа, сделанная в рамках идеологии Unix. - Также носит название стандартного менеджера паролей для Unix (The standard Unix password manager).
1.1 Основные свойства
- Данные хранятся в файловой системе в виде каталогов и файлов.
- Файлы шифруются с помощью GPG-ключа.
1.2 Структура базы паролей
- Структура базы может быть произвольной, если Вы собираетесь использовать её напрямую, без промежуточного программного обеспечения. Тогда семантику структуры базы данных Вы держите в своей голове.
- Если же необходимо использовать дополнительное программное обеспечение, необходимо семантику заложить в структуру базы паролей.
1.2.1 Семантическая структура базы паролей
- Рассмотрим пользователя
user
в доменеexample.com
, порт22
. - Отсутствие имени пользователя или порта в имени файла означает, что любое имя пользователя и порт будут совпадать:
example.com.pgp
- Соответствующее имя пользователя может быть именем файла внутри каталога, имя которого совпадает с хостом. Это полезно, если в базе есть пароли для нескольких пользователей на одном хосте:
example.com/user.pgp
- Имя пользователя также может быть записано в виде префикса, отделенного от хоста знаком
@
:user@example.com.pgp
- Соответствующий порт может быть указан после хоста, отделённый двоеточием (
:
):example.com:22.pgp example.com:22/user.pgp user@example.com:22.pgp
- Эти все записи могут быть расположены в произвольных каталогах, задающих Вашу собственную иерархию.
1.3 Реализации
1.3.1 Утилиты командной строки
- На данный момент существует 2 основных реализации:
pass
— классическая реализация в виде shell-скриптов (https://www.passwordstore.org/);gopass
— реализация на go с дополнительными интегрированными функциями (https://www.gopass.pw/).
- Дальше в тексте будет использоваться программа
pass
, но всё то же самое можно сделать с помощью программыgopass
.
1.3.2 Графические интерфейсы
qtpass
qtpass
— может работать как графический интерфейс кpass
, так и как самостоятельная программа. В настройках можно переключаться между использованиемpass
иgnupg
.
gopass-ui
gopass-ui
— интерфейс кgopass
.
webpass
- Репозиторий: https://github.com/emersion/webpass
- Веб-интерфейс к pass.
- Написано на golang.
1.3.3 Приложения для Android
Password Store
- URL: https://play.google.com/store/apps/details?id=dev.msfjarvis.aps
- Репозиторий с кодом: https://github.com/android-password-store/Android-Password-Store
- Документация: https://android-password-store.github.io/docs/
- Для синхронизации с git необходимо импортировать ssh-ключи.
- Поддерживает разблокировку по биометрическим данным.
- Для работы требует наличия OpenKeychain: Easy PGP.
OpenKeychain: Easy PGP
- URL: https://play.google.com/store/apps/details?id=org.sufficientlysecure.keychain
- Операции с ключами pgp.
- Необходимо будет импортировать pgp-ключи.
- Не поддерживает разблокировку по биометрическим данным. Необходимо набирать пароль ключа.
1.3.4 Пакеты для Emacs
pass
- Основной режим для управления хранилищем и редактирования записей.
- Emacs. Пакет pass
- Репозиторий: https://github.com/NicolasPetton/pass
- Позволяет редактировать базу данных паролей.
- Запуск:
M-x pass
helm-pass
- Интерфейс helm для pass.
- Репозиторий: https://github.com/emacs-helm/helm-pass
- Запуск:
M-x helm-pass
- Выдаёт в минибуфере список записей из базы паролей. При нажатии
Enter
копирует пароль в буфер.
ivy-pass
- Интерфейс ivy для pass.
- Репозиторий: https://github.com/ecraven/ivy-pass
2 Управление файлами конфигурации
- Использование
chezmoi
для управления файлами конфигурации домашнего каталога пользователя.
2.1 Общая информация
- Сайт: https://www.chezmoi.io/
- Репозиторий: https://github.com/twpayne/chezmoi
2.2 Конфигурация chezmoi
2.2.1 Рабочие файлы
- Состояние файлов конфигурации сохраняется в каталоге
~/.local/share/chezmoi
- Он является клоном вашего репозитория
dotfiles
. - Файл конфигурации
~/.config/chezmoi/chezmoi.toml
(можно использовать также JSON или YAML) специфичен для локальной машины. - Файлы, содержимое которых одинаково на всех ваших машинах, дословно копируются из исходного каталога.
- Файлы, которые варьируются от машины к машине, выполняются как шаблоны, обычно с использованием данных из файла конфигурации локальной машины для настройки конечного содержимого, специфичного для локальной машины.
- При запуске
chezmoi apply
вычисляется желаемое содержимое и разрешения для каждого файла, а затем вносит необходимые изменения, чтобы ваши файлы соответствовали этому состоянию.
- По умолчанию chezmoi изменяет файлы только в рабочей копии.
2.2.2 Автоматически создавать файл конфигурации на новой машине
При выполнении
chezmoi init
также может автоматически создать файл конфигурации, если он еще не существует.Если ваш репозиторий содержит файл с именем
.chezmoi.$FORMAT.tmpl
, где$FORMAT
есть один из поддерживаемых форматов файла конфигурации (json
,toml
, илиyaml
), тоchezmoi init
выполнит этот шаблон для создания исходного файла конфигурации.Например, пусть
~/.local/share/chezmoi/.chezmoi.toml.tmpl
выглядит так:{{- $email := promptStringOnce . "email" "Email address" -}} [data] email = {{ $email | quote }}
- При выполнении
chezmoi init
будет создан конфигурационный файл~/.config/chezmoi/chezmoi.toml
. promptStringOnce
— это специальная функция, которая запрашивает у пользователя значение, если оно еще не установлено в разделеdata
конфигурационного файла.
- При выполнении
Чтобы протестировать этот шаблон, используйте
chezmoi execute-template
с флагами--init
и--promptString
, например:chezmoi execute-template --init --promptString email=me@home.org < ~/.local/share/chezmoi/.chezmoi.toml.tmpl
2.2.3 Пересоздание файл конфигурации
- Если вы измените шаблон файла конфигурации,
chezmoi
предупредит вас, если ваш текущий файл конфигурации не был сгенерирован из этого шаблона. - Вы можете повторно сгенерировать файл конфигурации, запустив:
chezmoi init
2.3 Шаблоны
2.3.1 Общая информация
- Шаблоны используются для изменения содержимого файла в зависимости от среды.
- Используется синтаксис шаблонов Go.
- Файл интерпретируется как шаблон, если выполняется одно из следующих условий:
- имя файла имеет суффикс
.tmpl
; - файл находится в каталоге
.chezmoitemplates
.
- имя файла имеет суффикс
2.3.2 Данные шаблона
- Полный список переменных шаблона:
chezmoi data
- Источники переменных:
- файлы
.chezmoi
, например,.chezmoi.os
; - файлы конфигурации
.chezmoidata.$FORMAT
. Форматы (json
,jsonc
,toml
,yaml
) читаются в алфавитном порядке; - раздел
data
конфигурационного файла.
- файлы
2.3.3 Способы создания файла шаблона
- При первом добавлении файла передайте аргумент
--template
:chezmoi add --template ~/.zshrc
- Если файл уже контролируется chezmoi, но не является шаблоном, можно сделать его шаблоном:
chezmoi chattr +template ~/.zshrc
- Можно создать шаблон вручную в исходном каталоге, присвоив ему расширение
.tmpl
:chezmoi cd $EDITOR dot_zshrc.tmpl
- Шаблоны в каталоге
.chezmoitemplates
должны создаваться вручную:chezmoi cd mkdir -p .chezmoitemplates cd .chezmoitemplates $EDITOR mytemplate
2.3.4 Редактирование файла шаблона
- Используйте
chezmoi edit
:chezmoi edit ~/.zshrc
- Чтобы сделанные вами изменения сразу же применялись после выхода из редактора, используйте опцию
--apply
:chezmoi edit --apply ~/.zshrc
2.3.5 Тестирование шаблонов
- Тестирование с помощью команды
chezmoi execute-template
. - Тестирование небольших фрагментов шаблонов:
chezmoi execute-template '{{ .chezmoi.hostname }}'
- Тестирование целых файлов:
chezmoi cd chezmoi execute-template < dot_zshrc.tmpl
2.3.6 Синтаксис шаблона
- Действия шаблона записываются внутри двойных фигурных скобок,
{{ }}
. - Действия могут быть переменными, конвейерами или операторами управления.
- Текст вне действий копируется буквально.
- Переменные записываются буквально:
{{ .chezmoi.hostname }}
- Условные выражения могут быть записаны с использованием
if
,else if
,else
,end
:
{{ if eq .chezmoi.os "darwin" }}
# darwin
{{ else if eq .chezmoi.os "linux" }}
# linux
{{ else }}
# other operating system
{{ end }}
Удаление пробелов
- Для удаления проблем в шаблоне разместите знак минус и пробела рядом со скобками:
HOSTNAME={{- .chezmoi.hostname }}
- В результате получим:
HOSTNAME=myhostname
- Для удаления проблем в шаблоне разместите знак минус и пробела рядом со скобками:
Отладка шаблона
- Используется подкоманда
execute-template
:chezmoi execute-template '{{ .chezmoi.os }}/{{ .chezmoi.arch }}'
- Интерпретируются любые данные, поступающие со стандартного ввода или в конце команды.
- Можно передать содержимое файла этой команде:
cat foo.txt | chezmoi execute-template
- Используется подкоманда
Логические операции
- Возможно выполнение логических операций.
- Если имя хоста машины равно
work-laptop
, текст междуif
иend
будет включён в результат:# common config export EDITOR=vi # machine-specific configuration {{- if eq .chezmoi.hostname "work-laptop" }} # this will only be included in ~/.bashrc on work-laptop {{- end }}
Логические функции
eq
: возвращаетtrue
, если первый аргумент равен любому из остальных аргументов, может принимать несколько аргументов;not
: возвращает логическое отрицание своего единственного аргумента;and
: возвращает логическое И своих аргументов, может принимать несколько аргументов;or
: возвращает логическое ИЛИ своих аргументов, может принимать несколько аргументов.
Целочисленные функции
len
: возвращает целочисленную длину своего аргумента;eq
: возвращает логическую истинуarg1 == arg2
;ne
: возвращает логическое значениеarg1 != arg2
;lt
: возвращает логическую истинуarg1 < arg2
;le
: возвращает логическую истинуarg1 <= arg2
;gt
: возвращает логическую истинуarg1 > arg2
;ge
: возвращает логическую истинуarg1 >= arg2
.
2.3.7 Переменные шаблона
- Чтобы просмотреть переменные, доступные в вашей системе, выполните:
chezmoi data
- Чтобы получить доступ к переменной
chezmoi.kernel.osrelease
в шаблоне, используйте:{{ .chezmoi.kernel.osrelease }}
3 Выполнение лабораторной работы
3.1 Менеджер паролей pass
3.1.1 Установка
- Fedora
pass
dnf install pass pass-otp
gopass
dnf install gopass
3.1.2 Настройка
Ключи GPG
- Просмотр списка ключей:
gpg --list-secret-keys
- Если ключа нет, нужно создать новый:
gpg --full-generate-key
- Просмотр списка ключей:
Инициализация хранилища
- Инициализируем хранилище:
pass init <gpg-id or email>
- Инициализируем хранилище:
Синхронизация с git
- Создадим структуру git:
pass git init
- Также можно задать адрес репозитория на хостинге (репозиторий необходимо предварительно создать):
pass git remote add origin git@github.com:<git_username>/<git_repo>.git
- Для синхронизации выполняется следующая команда:
pass git pull pass git push
Прямые изменения
- Следует заметить, что отслеживаются только изменения, сделанные через сам
gopass
(илиpass
). - Если изменения сделаны непосредственно на файловой системе, необходимо вручную закоммитить и выложить изменения:
cd ~/.password-store/ git add . git commit -am 'edit manually' git push
- Проверить статус синхронизации модно командой
pass git status
- Следует заметить, что отслеживаются только изменения, сделанные через сам
- Создадим структуру git:
3.1.3 Настройка интерфейса с броузером
- Для взаимодействия с броузером используется интерфейс native messaging.
- Поэтому кроме плагина к броузеру устанавливается программа, обеспечивающая интерфейс native messaging.
Плагин browserpass
- Репозиторий: https://github.com/browserpass/browserpass-extension
- Плагин для брoузера
- Плагин для Firefox: https://addons.mozilla.org/en-US/firefox/addon/browserpass-ce/.
- Плагин для Chrome/Chromium: https://chrome.google.com/webstore/detail/browserpass-ce/naepdomgkenhinolocfifgehidddafch.
- Интерфейс для взаимодействия с броузером (native messaging)
- Репозиторий: https://github.com/browserpass/browserpass-native
- Gentoo:
emerge www-plugins/browserpass
- Fedora
dnf copr enable maximbaz/browserpass dnf install browserpass
3.1.4 Сохранение пароля
Добавить новый пароль
Выполните:
pass insert [OPTIONAL DIR]/[FILENAME]
OPTIONAL DIR
: необязательное имя каталога, определяющее файловую структуру для вашего хранилища паролей;FILENAME
: имя файла, который будет использоваться для хранения пароля.
Отобразите пароль для указанного имени файла:
pass [OPTIONAL DIR]/[FILENAME]
Замените существующий пароль:
pass generate --in-place FILENAME
3.2 Управление файлами конфигурации
3.3 Дополнительное программное обеспечение
- Установите дополнительное программное обеспечение:
sudo dnf -y install \ dunst \ fontawesome-fonts \ powerline-fonts \ light \ fuzzel \ swaylock \ kitty \ waybar swaybg \ wl-clipboard \ mpv \ grim \ slurp
- Установите шрифты:
sudo dnf copr enable peterwu/iosevka sudo dnf search iosevka sudo dnf install iosevka-fonts iosevka-aile-fonts iosevka-curly-fonts iosevka-slab-fonts iosevka-etoile-fonts iosevka-term-fonts
3.3.1 Установка
- Установка бинарного файла. Скрипт определяет архитектуру процессора и операционную систему и скачивает необходимый файл:
- с помощью
wget
:sh -c "$(wget -qO- chezmoi.io/get)"
- с помощью
3.3.2 Создание собственного репозитория с помощью утилит
- Будем использовать утилиты командной строки для работы с github (см. github: утилиты командной строки).
- Создадим свой репозиторий для конфигурационных файлов на основе шаблона:
gh repo create dotfiles --template="yamadharma/dotfiles-template" --private
3.3.3 Подключение репозитория к своей системе
- Инициализируйте
chezmoi
с вашим репозиториемdotfiles
:chezmoi init git@github.com:<username>/dotfiles.git
- Проверьте, какие изменения внесёт
chezmoi
в домашний каталог, запустив:chezmoi diff
- Если вас устраивают изменения, внесённые
chezmoi
, запустите:chezmoi apply -v
3.3.4 Использование chezmoi на нескольких машинах
- На второй машине инициализируйте
chezmoi
с вашим репозиториемdotfiles
:chezmoi init https://github.com/<username>/dotfiles.git
- Или через ssh:
chezmoi init git@github.com:<username>/dotfiles.git
- Проверьте, какие изменения внесёт
chezmoi
в домашний каталог, запустив:chezmoi diff
- Если вас устраивают изменения, внесённые
chezmoi
, запустите:chezmoi apply -v
- Если вас не устраивают изменения в файле, отредактируйте его с помощью:
chezmoi edit file_name
- Также можно вызвать инструмент слияния, чтобы объединить изменения между текущим содержимым файла, файлом в вашей рабочей копии и измененным содержимым файла:
chezmoi merge file_name
- При существующем каталоге
chezmoi
можно получить и применить последние изменения из вашего репозитория:chezmoi update -v
3.3.5 Настройка новой машины с помощью одной команды
- Можно установить свои
dotfiles
на новый компьютер с помощью одной команды:chezmoi init --apply https://github.com/<username>/dotfiles.git
- Через ssh:
chezmoi init --apply git@github.com:<username>/dotfiles.git
3.3.6 Ежедневные операции c chezmoi
Извлеките последние изменения из репозитория и примените их
- Можно извлечь изменения из репозитория и применить их одной командой:
chezmoi update
- Это запускается
git pull --autostash --rebase
в вашем исходном каталоге, а затемchezmoi apply
.
- Можно извлечь изменения из репозитория и применить их одной командой:
Извлеките последние изменения из своего репозитория и посмотрите, что изменится, фактически не применяя изменения
- Выполните:
chezmoi git pull -- --autostash --rebase && chezmoi diff
- Это запускается
git pull --autostash --rebase
в вашем исходном каталоге, аchezmoi diff
затем показывает разницу между целевым состоянием, вычисленным из вашего исходного каталога, и фактическим состоянием. - Если вы довольны изменениями, вы можете применить их:
chezmoi apply
- Выполните:
Автоматически фиксируйте и отправляйте изменения в репозиторий
- Можно автоматически фиксировать и отправлять изменения в исходный каталог в репозиторий.
- Эта функция отключена по умолчанию.
- Чтобы включить её, добавьте в файл конфигурации
~/.config/chezmoi/chezmoi.toml
следующее:[git] autoCommit = true autoPush = true
- Всякий раз, когда в исходный каталог вносятся изменения,
chezmoi
фиксирует изменения с помощью автоматически сгенерированного сообщения фиксации и отправляет их в ваш репозиторий. - Будьте осторожны при использовании
autoPush
. Если ваш репозиторийdotfiles
является общедоступным, и вы случайно добавили секрет в виде обычного текста, этот секрет будет отправлен в ваш общедоступный репозиторий.