> For the complete documentation index, see [llms.txt](https://akimdi.gitbook.io/debian/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://akimdi.gitbook.io/debian/master.md).

# Debian 10

## Скачиваем образ, хэш-сумму и подпись

```bash
wget --https-only https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/MD5SUMS https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/MD5SUMS.sign https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA1SUMS https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA1SUMS.sign https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA256SUMS https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA256SUMS.sign https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA512SUMS https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA512SUMS.sign https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.3.0-amd64-netinst.iso
```

***В файле .zshrc есть alias под названием downloaddebianstable который загрузит образы Debian и проверит gpg-подписи с хэш-суммами (для этого потребуются программы exa, wget, date, sha1sum, md5sum). Ниже представлена подробная команда этого алиаса.***

```bash
wget --https-only https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/MD5SUMS https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/MD5SUMS.sign https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA1SUMS https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA1SUMS.sign https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA256SUMS https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA256SUMS.sign https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA512SUMS https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/SHA512SUMS.sign https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.3.0-amd64-netinst.iso && echo "\nChecking gpg keys ...\n" && gpg --keyserver keyring.debian.org --recv-keys 6294BE9B && gpg --fingerprint 6294BE9B && gpg --list-sigs 6294BE9B && gpg --verify MD5SUMS.sign MD5SUMS && gpg --verify SHA1SUMS.sign SHA1SUMS && gpg --verify SHA256SUMS.sign SHA256SUMS && gpg --verify SHA512SUMS.sign SHA512SUMS && md5sum --ignore-missing -c MD5SUMS && sha1sum --ignore-missing -c SHA1SUMS && sha512sum --ignore-missing -c SHA512SUMS && exa --all --classify --long --sort=modified --group-directories-first --bytes --group --header --links --inode --blocks --time=modified --time-style=long-iso --extended --git --color-scale
```

## Проверка подписи

*Чтобы удостовериться, что файлы с контрольными суммами сами по себе верны, используйте GnuPG для проверки их соответствия прилагаемым файлам с подписями (например, SHA512SUMS.sign). Все ключи, используемые для этих подписей, включены в набор ключей Debian GPG и лучший способ проверить их — использовать этот набор ключей для проверки через web of trust*

```bash
gpg --keyserver keyring.debian.org --recv-keys 6294BE9B
```

```bash
gpg --fingerprint 6294BE9B
```

```bash
gpg --list-sigs 6294BE9B
```

```bash
gpg --verify MD5SUMS.sign MD5SUMS
```

```bash
gpg --verify SHA1SUMS.sign SHA1SUMS
```

```bash
gpg --verify SHA256SUMS.sign SHA256SUMS
```

```bash
gpg --verify SHA512SUMS.sign SHA512SUMS
```

## Должно выдать что-то типо этого

```bash
gpg: key DA87E80D6294BE9B: 5 подписей не проверено за отсутствием ключа
gpg: ключ DA87E80D6294BE9B: "Debian CD signing key <debian-cd@lists.debian.org>" не изменен
gpg: Всего обработано: 1
gpg:                   неизмененных: 1
pub   rsa4096 2011-01-05 [SC]
      DF9B 9C49 EAA9 2984 3258  9D76 DA87 E80D 6294 BE9B
uid         [ неизвестно ] Debian CD signing key <debian-cd@lists.debian.org>
sub   rsa4096 2011-01-05 [E]

pub   rsa4096 2011-01-05 [SC]
      DF9B9C49EAA9298432589D76DA87E80D6294BE9B
uid         [ неизвестно ] Debian CD signing key <debian-cd@lists.debian.org>
sig          8F638F961B3045CE 2011-01-07  [Идентификатор пользователя не найден]
sig          587979573442684E 2011-01-05  [Идентификатор пользователя не найден]
sig          7F55BB12A40F862E 2011-01-05  [Идентификатор пользователя не найден]
sig          C5CE5DC2C542CD59 2011-01-05  [Идентификатор пользователя не найден]
sig          4DE8FF2A63C7CC90 2011-01-05  [Идентификатор пользователя не найден]
sig 3        DA87E80D6294BE9B 2011-01-05  Debian CD signing key <debian-cd@lists.debian.org>
sub   rsa4096 2011-01-05 [E]
sig          DA87E80D6294BE9B 2011-01-05  Debian CD signing key <debian-cd@lists.debian.org>

gpg: Подпись сделана Вс 09 фев 2020 05:01:04 MSK
gpg:                ключом RSA с идентификатором DF9B9C49EAA9298432589D76DA87E80D6294BE9B
gpg: Действительная подпись пользователя "Debian CD signing key <debian-cd@lists.debian.org>" [неизвестно]
gpg: Внимание: Данный ключ не заверен доверенной подписью!
gpg:           Нет указаний на то, что подпись принадлежит владельцу.
Отпечаток первичного ключа: DF9B 9C49 EAA9 2984 3258  9D76 DA87 E80D 6294 BE9B
gpg: Подпись сделана Вс 09 фев 2020 05:01:04 MSK
gpg:                ключом RSA с идентификатором DF9B9C49EAA9298432589D76DA87E80D6294BE9B
gpg: Действительная подпись пользователя "Debian CD signing key <debian-cd@lists.debian.org>" [неизвестно]
gpg: Внимание: Данный ключ не заверен доверенной подписью!
gpg:           Нет указаний на то, что подпись принадлежит владельцу.
Отпечаток первичного ключа: DF9B 9C49 EAA9 2984 3258  9D76 DA87 E80D 6294 BE9B
gpg: Подпись сделана Вс 09 фев 2020 05:01:05 MSK
gpg:                ключом RSA с идентификатором DF9B9C49EAA9298432589D76DA87E80D6294BE9B
gpg: Действительная подпись пользователя "Debian CD signing key <debian-cd@lists.debian.org>" [неизвестно]
gpg: Внимание: Данный ключ не заверен доверенной подписью!
gpg:           Нет указаний на то, что подпись принадлежит владельцу.
Отпечаток первичного ключа: DF9B 9C49 EAA9 2984 3258  9D76 DA87 E80D 6294 BE9B
gpg: Подпись сделана Вс 09 фев 2020 05:01:05 MSK
gpg:                ключом RSA с идентификатором DF9B9C49EAA9298432589D76DA87E80D6294BE9B
gpg: Действительная подпись пользователя "Debian CD signing key <debian-cd@lists.debian.org>" [неизвестно]
gpg: Внимание: Данный ключ не заверен доверенной подписью!
gpg:           Нет указаний на то, что подпись принадлежит владельцу.
Отпечаток первичного ключа: DF9B 9C49 EAA9 2984 3258  9D76 DA87 E80D 6294 BE9B
```

## Проверяем хэш-суммы

```bash
md5sum --ignore-missing -c MD5SUMS
```

```bash
sha1sum --ignore-missing -c SHA1SUMS
```

```bash
sha512sum --ignore-missing -c SHA512SUMS
```

## Должно выдать что-то типо этого

```bash
debian-10.3.0-amd64-netinst.iso: ЦЕЛ
debian-10.3.0-amd64-netinst.iso: ЦЕЛ
debian-10.3.0-amd64-netinst.iso: ЦЕЛ
```

***Записываем на флэшку с помощью*** [***Rufus***](https://github.com/pbatard/rufus/releases/latest) ***или*** [***Etcher***](https://github.com/balena-io/etcher/releases/latest)

## Вставляем флэшку, определяем её и форматируем

*Раздел флэшки (в данном примере это **/dev/sdd1**) должен быть отформатирован в FAT32.*

```bash
sudo fdisk -l | sudo grep /dev/sd
```

```bash
sudo df | sudo grep /dev/sd
```

```bash
sudo lsblk
```

```bash
sudo umount /dev/sdd1
```

```bash
sudo mkfs.vfat -n 'debian' -I /dev/sdd1
```

***Дальше можно воспользоваться*** [***Etcher***](https://github.com/balena-io/etcher/releases/latest) ***или*** [***Rufus***](https://github.com/pbatard/rufus/releases/latest)

*При установке системы задаём*

*Имя компьютера: `book`*

*Имя пользователя: `me`*

*При установке выбираем устанавливать только "Стандартные системные утилиты" и больше ничего.*

## Логинимся из под `root`

```bash
su -
```

## Добавляем пользователя `me` в группу `sudo` и другие нужные группы

```bash
id me
```

```bash
usermod -a -G sudo,adm,cdrom,lp,systemd-journal,plugdev,netdev,audio,video,disk,dialout,dip me
```

```bash
id me
```

## Ставим необходимый минимум

```bash
apt update && apt install sudo curl wget vim apt-transport-https ca-certificates gnupg2 software-properties-common dirmngr software-properties-gtk tor apt-transport-tor module-assistant build-essential debian-archive-keyring python3-software-properties debconf-utils git stow openssl xclip cmake pkg-config gdebi lsb-release -y
```

## Смотрим версию и ядро Debian

```bash
cat /etc/os-release && uname -a
```

## Перезагружаемся

```bash
shutdown -r 0
```

## Входим из под пользователя `me` и сразу обновляем систему

```bash
sudo apt update && sudo apt upgrade -y && sudo apt full-upgrade -y && sudo apt autoremove -y
```

## Ставим Xorg и i3wm c терминалом kitty

```bash
sudo apt update && sudo apt install i3 i3lock-fancy i3-wm dunst i3lock i3status suckless-tools i3blocks pluma nemo nemo-fileroller nemo-gtkhash nemo-nextcloud ranger nnn xorg rofi kitty kitty-terminfo kitty-doc htop iotop net-tools git git-man git-doc git-el git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn xclip jq grep zsh nitrogen fzf tmux tmux-plugin-manager tmuxinator tmuxp catfish chromium linux-headers-$(uname -r) -y
```

## Правим `/etc/apt/sources.list`

```bash
sudo -i
```

```bash
sudo sh -c 'echo "deb https://deb.debian.org/debian/ $(lsb_release -sc) main contrib non-free\ndeb-src https://deb.debian.org/debian/ $(lsb_release -sc) main contrib non-free\ndeb https://deb.debian.org/debian/ $(lsb_release -sc)-updates main contrib non-free\ndeb-src https://deb.debian.org/debian/ $(lsb_release -sc)-updates main contrib non-free\ndeb https://deb.debian.org/debian-security $(lsb_release -sc)/updates main\ndeb-src https://deb.debian.org/debian-security $(lsb_release -sc)/updates main\ndeb https://deb.debian.org/debian $(lsb_release -sc)-backports main contrib non-free\ndeb-src https://deb.debian.org/debian $(lsb_release -sc)-backports main contrib non-free" > /etc/apt/sources.list'
```

```bash
exit
```

*Полезные ссылки:*

[Why does APT not use HTTPS?](https://whydoesaptnotusehttps.com)

[Why there is no https transport for debian apt tool?](https://unix.stackexchange.com/a/90229)

[Debian Sources List Generator](https://debgen.simplylinux.ch)

[SourcesList](https://wiki.debian.org/SourcesList)

[SecureApt](https://wiki.debian.org/SecureApt)

## Создание любой папки с [tmpfs в ОЗУ](https://wiki.archlinux.org/index.php/Tmpfs)

```bash
sudo -i
```

```bash
mkdir /home/me/ram
```

```bash
groupadd tmpdriveusers
```

```bash
usermod -a -G tmpdriveusers me
```

## Меняем владельца папки **/home/me/ram** и даем группе **tmpdriveusers** права на запись

```bash
chown root:tmpdriveusers /home/me/ram
```

```bash
chmod 777 /home/me/ram
```

## Создаем новый **ram-диск** в папке **/home/me/ram**

```bash
sudo printf "tmpfs /home/me/ram tmpfs nodev,nosuid,size=16G 0 0" >> /etc/fstab
```

*Добавляем в конец файла **/etc/fstab** такую строку, параметр size означает сколько нужно выделить из оперативной памяти под RAM диск, в данном случае это 16gb - то есть всю ОЗУ.*

## Перезапускаем систему

```bash
sudo shutdown -r 0
```

*После перезагрузки убеждаемся в том, что RAM-диск смонтирован и к нему есть доступ. В листинге команды mount должна присутствовать строка **“tmpfs on /home/me/ram type tmpfs (rw)”**.*

```bash
sudo mount | grep ram
```

## Убедиться в том, что ram-disk реально доступен для записи обычному пользователю, можно создав на нём новый файл

```bash
echo hi-akimdi > /home/me/ram/temp.txt && cat /home/me/ram/temp.txt
```

***При выключении компьютера ОЗУ очищается и всё что находилось в этой папке будет удалено!***

## Установка [KeePassXC](https://github.com/keepassxreboot/keepassxc)

```bash
wget --no-cache --no-cookies --https-only --output-document=/home/me/ram/KeePassXC-$(curl -Ls https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest | jq -r ".tag_name")-x86_64.AppImage https://github.com/keepassxreboot/keepassxc/releases/download/$(curl -Ls https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest | jq -r ".tag_name")/KeePassXC-$(curl -Ls https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest | jq -r ".tag_name")-x86_64.AppImage
```

```bash
wget --no-cache --no-cookies --https-only --output-document=/home/me/ram/KeePassXC-$(curl -Ls https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest | jq -r ".tag_name")-x86_64.AppImage.DIGEST https://github.com/keepassxreboot/keepassxc/releases/download/$(curl -Ls https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest | jq -r ".tag_name")/KeePassXC-$(curl -Ls https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest | jq -r ".tag_name")-x86_64.AppImage.DIGEST
```

```bash
wget --no-cache --no-cookies --https-only --output-document=/home/me/ram/KeePassXC-$(curl -Ls https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest | jq -r ".tag_name")-x86_64.AppImage.sig https://github.com/keepassxreboot/keepassxc/releases/download/$(curl -Ls https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest | jq -r ".tag_name")/KeePassXC-$(curl -Ls https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest | jq -r ".tag_name")-x86_64.AppImage.sig
```

```bash
cd /home/me/ram
```

```bash
shasum -a 256 -c /home/me/ram/KeePassXC-$(curl -Ls https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest | jq -r ".tag_name")-x86_64.AppImage.DIGEST
```

```bash
gpg --fetch-keys https://keepassxc.org/keepassxc_master_signing_key.asc
```

## Проверяем [GPG подпись](https://ru.stackoverflow.com/q/725314)

```bash
gpg --verify /home/me/ram/KeePassXC-$(curl -Ls https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest | jq -r ".tag_name")-x86_64.AppImage.sig /home/me/ram/KeePassXC-$(curl -Ls https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest | jq -r ".tag_name")-x86_64.AppImage
```

```bash
mv -v /home/me/ram/KeePassXC-$(curl -Ls https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest | jq -r ".tag_name")-x86_64.AppImage /home/me/ram/keepassxc.AppImage
```

```bash
cp -v /home/me/ram/keepassxc.AppImage /home/me/keepassxc.AppImage
```

```bash
sudo chmod a+rx /home/me/keepassxc.AppImage
```

```bash
sudo rm -r -f -v /home/me/ram/KeePassXC-*-x86_64.AppImage.DIGEST /home/me/ram/KeePassXC-*-x86_64.AppImage.sig /home/me/ram/keepassxc.AppImage
```

## Открываем базу данных KeepassXC

```bash
/home/me/keepassxc.AppImage
```

*В настройках KeepassXC разрешаем запуск ssh-agent (потребуется перезапук)*

## Тестируем SSH-соединение

```bash
ssh -T git@github.com
```

## Скачиваем последнюю версию Chezmoi

```bash
sudo wget --no-cache --no-cookies --https-only --output-document=/home/me/ram/chezmoi.deb https://github.com/twpayne/chezmoi/releases/download/v$(curl -sL https://api.github.com/repos/twpayne/chezmoi/releases/latest | jq -r ".tag_name" | sed -e "s/^.\{1\}//")/chezmoi_$(curl -sL https://api.github.com/repos/twpayne/chezmoi/releases/latest | jq -r ".tag_name" | sed -e "s/^.\{1\}//")_linux_amd64.deb
```

```bash
sudo apt update && sudo apt install /home/me/ram/chezmoi.deb -y
```

```bash
sudo rm -v /home/me/ram/chezmoi.deb
```

## Установливаем zsh качестве оболочки по-умолчанию для root

```bash
sudo -i
```

```bash
sudo chsh -s /bin/zsh
```

## Установка ZSH пользователю me

```bash
sudo usermod me -s /usr/bin/zsh
```

```bash
exit
```

## Установка [Antigen](https://github.com/zsh-users/antigen)

```bash
wget --no-cache --no-cookies --https-only --output-document=/home/me/ram/antigen.zsh https://github.com/zsh-users/antigen/releases/download/v$(curl -sL https://api.github.com/repos/zsh-users/antigen/releases/latest | jq -r ".tag_name" | sed -e "s/^.\{1\}//")/antigen.zsh
```

```bash
cp --verbose /home/me/ram/antigen.zsh /home/me
```

```bash
rm -v /home/me/ram/antigen.zsh
```

## Установка [ccat](https://github.com/jingweno/ccat)

```bash
sudo wget --no-cache --no-cookies --https-only --output-document=/home/me/ram/ccat-linux-amd64.tar.gz $(curl -sL https://api.github.com/repos/jingweno/ccat/releases/latest | jq -r ".assets[].browser_download_url" | grep linux | grep amd64)
```

```bash
sudo tar -xvzf /home/me/ram/ccat-linux-amd64.tar.gz -C /home/me/ram
```

```bash
sudo cp --verbose /home/me/ram/linux-amd64-*/ccat /usr/local/bin
```

```bash
sudo chmod a+rx /usr/local/bin/ccat
```

```bash
sudo rm -r -f -v /home/me/ram/linux-amd64-*
```

```bash
sudo rm -r -f -v /home/me/ram/ccat-linux-amd64.tar.gz
```

## Устанавливаем [git-extras](https://github.com/tj/git-extras/blob/master/Installation.md#building-from-source) чтобы получить дополнительные [команды Git](https://github.com/tj/git-extras/blob/master/Commands.md)

```bash
sudo git clone --verbose https://github.com/tj/git-extras.git /home/me/ram/git-extras
```

```bash
cd /home/me/ram/git-extras
```

```bash
sudo git checkout $(git describe --tags $(git rev-list --tags --max-count=1))
```

```bash
sudo make install
```

```bash
sudo wget --no-cache --no-cookies --https-only --output-document=/usr/share/git-core/git-extras-completion.zsh https://raw.githubusercontent.com/tj/git-extras/master/etc/git-extras-completion.zsh
```

```bash
cd /home/me/ram
```

```bash
sudo rm -r -f -v /home/me/ram/git-extras
```

## Настройка [chezmoi](https://github.com/twpayne/chezmoi)

*Это действие создаст chezmoi репозиторий в папке **/home/me/.local/share/chezmoi***

```bash
chezmoi -v init git@github.com:akimdi/dotfiles.git
```

*Этой командой можно увидеть что будет изменено, прежде чем применить изменения*

```bash
chezmoi -v diff
```

*Эта команда проверит репозиторий и любые его подмодули и при необходимости создаст конфигурационный файл chezmoi и применит склонированный репозиторий в систему, то есть dotfiles которые будут в репозитории будут аналогичными и в системе*

```bash
chezmoi -v apply
```

*Последняя команда выполняет `git pull` из репозитория с dotfiles и одновременно применяет все изменения в систему, то есть по сути команда `chezmoi update` это `git pull` + `chezmoi apply`*

```bash
chezmoi -v update
```

## [Устанавливаем](https://superuser.com/a/1322590) необходимые пакеты из [списка в файле](https://unix.stackexchange.com/a/212214)

```bash
cat /home/me/packages.txt | xargs sudo apt install -y
```

## Настраиваем JDK и Go

```bash
sudo update-java-alternatives --set java-1.11.0-openjdk-amd64 --verbose
```

```bash
sudo mkdir -p /usr/share/desktop-directories
```

```bash
mkdir -p /home/me/go
```

```bash
java -version
```

```bash
java -fullversion
```

```bash
javac -version
```

```bash
javac -fullversion
```

```bash
java -Xinternalversion
```

```bash
gccgo --version
```

```bash
go env
```

```bash
go version
```

## Установка [Nerd Fonts](https://github.com/ryanoasis/nerd-fonts)

```bash
git clone --depth 1 --verbose https://github.com/ryanoasis/nerd-fonts.git /home/me/ram/nerd
```

```bash
chmod +x /home/me/ram/nerd/install.sh
```

```bash
/home/me/ram/nerd/install.sh
```

```bash
fc-list | ag terminess
```

```bash
fc-list | ag hack
```

```bash
sudo rm -r -f -v /home/me/ram/nerd
```

*Шрифты установятся в папку **/home/me/.local/share/fonts/NerdFonts***

## Перезагружаемся

```bash
sudo shutdown -r 0
```

## Установка [SpaceVim](https://github.com/SpaceVim/SpaceVim)

```bash
curl -sLf https://spacevim.org/install.sh | bash
```

## Следует обязательно запустить SpaceVim чтобы установились [необходимые](https://spacevim.org/use-vim-as-a-php-ide) [плагины](https://github.com/Gabirel/Hack-SpaceVim)

```bash
vim
```

*Файл настроек SpaceVim лежит в **/home/me/.SpaceVim.d/init.toml***

## Проверка обновления [микрокода Intel](https://wiki.archlinux.org/index.php/Microcode)

```bash
sudo dmesg | sudo ag microcode
```

## Должно выдать что-то похожее на следующее, что указывает на то, что микрокод обновляется при ранней загрузке

```bash
[    0.000000] CPU0 microcode updated early to revision 0x1b, date = 2014-05-29
[    0.221951] CPU1 microcode updated early to revision 0x1b, date = 2014-05-29
[    0.242064] CPU2 microcode updated early to revision 0x1b, date = 2014-05-29
[    0.262349] CPU3 microcode updated early to revision 0x1b, date = 2014-05-29
[    0.507267] microcode: CPU0 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507272] microcode: CPU1 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507276] microcode: CPU2 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507281] microcode: CPU3 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507286] microcode: CPU4 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507292] microcode: CPU5 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507296] microcode: CPU6 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507300] microcode: CPU7 sig=0x306a9, pf=0x2, revision=0x1b
[    0.507335] microcode: Microcode Update Driver: v2.2.
```

## Установка [Rust и Сargo](https://www.rust-lang.org/ru/tools/install)

```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```

## Выбираем опцию `Customize installation` и прописываем установку `toolchain stable` и `Modify PATH variable?` (no)

```bash
info: downloading installer

Welcome to Rust!

This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.

It will add the cargo, rustc, rustup and other commands to
Cargo's bin directory, located at:

  /home/me/.cargo/bin

This can be modified with the CARGO_HOME environment variable.

Rustup metadata and toolchains will be installed into the Rustup
home directory, located at:

  /home/me/.rustup

This can be modified with the RUSTUP_HOME environment variable.

This path will then be added to your PATH environment variable by
modifying the profile files located at:

  /home/me/.profile
/home/me/.zprofile

You can uninstall at any time with rustup self uninstall and
these changes will be reverted.

Current installation options:


   default host triple: x86_64-unknown-linux-gnu
     default toolchain: stable
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>2

I'm going to ask you the value of each of these installation options.
You may simply press the Enter key to leave unchanged.

Default host triple?


Default toolchain? (stable/beta/nightly/none)
stable

Profile (which tools and data to install)? (minimal/default/complete)
default

Modify PATH variable? (y/n)
n    


Current installation options:


   default host triple: x86_64-unknown-linux-gnu
     default toolchain: stable
               profile: default
  modify PATH variable: no

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1

info: profile set to 'default'
info: setting default host triple to x86_64-unknown-linux-gnu
info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
info: latest update on 2020-01-30, rust version 1.41.0 (5e1a79984 2020-01-27)
info: downloading component 'cargo'
info: downloading component 'clippy'
info: downloading component 'rust-docs'
 12.0 MiB /  12.0 MiB (100 %)  11.1 MiB/s in  1s ETA:  0s
info: downloading component 'rust-std'
 17.5 MiB /  17.5 MiB (100 %)  11.0 MiB/s in  1s ETA:  0s
info: downloading component 'rustc'
 57.9 MiB /  57.9 MiB (100 %)  11.1 MiB/s in  5s ETA:  0s
info: downloading component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
 12.0 MiB /  12.0 MiB (100 %)   8.7 MiB/s in  1s ETA:  0s
info: installing component 'rust-std'
 17.5 MiB /  17.5 MiB (100 %)  17.1 MiB/s in  1s ETA:  0s
info: installing component 'rustc'
 57.9 MiB /  57.9 MiB (100 %)  12.4 MiB/s in  4s ETA:  0s
info: installing component 'rustfmt'
info: default toolchain set to 'stable'

  stable installed - rustc 1.41.0 (5e1a79984 2020-01-27)

Rust is installed now. Great!

To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH
environment variable.

To configure your current shell run source $HOME/.cargo/env
```

## Если вы установили предыдущую версию Rust средствами rustup, то для обновления до его последней версии версии, вам достаточно выполнить следующую команду

```bash
rustup update stable
```

## Чтобы убедиться, что установка прошла успешно, можно воспользоваться командой, которая выводит версию Cargo

```bash
cargo --version
```

```bash
rustc --version
```

## Установка [ripgrep-all](https://github.com/phiresky/ripgrep-all)

```bash
cargo install ripgrep_all
```

## Установка [Command Line Interactive Controller for Kubernetes](https://github.com/databricks/click)

```bash
cargo install click
```

## Установка [vimiv-gtk](https://github.com/karlch/vimiv)

**Внимание ⚠️**

**Версия** [**vimiv-gtk**](https://github.com/karlch/vimiv) **является устаревшей и разработчики переписали её на qt. Поэтому релиз v0.9.1 является последним и больше не будет разрабатываться. В будущем когда** [**версия vimiv-qt**](https://github.com/karlch/vimiv-qt) **достигнет стабильной версии 1.0 и будет готова, нужно будет переписать установку vimiv под qt.**

**Ссылка на новый репозиторий** [**версия vimiv-qt.**](https://github.com/karlch/vimiv-qt)

```bash
wget --no-cache --no-cookies --https-only --output-document=/home/me/ram/v0.9.1.tar.gz https://github.com/karlch/vimiv/archive/v0.9.1.tar.gz
```

```bash
tar -xvzf /home/me/ram/v0.9.1.tar.gz -C /home/me/ram
```

```bash
cd /home/me/ram/vimiv-0.9.1
```

```bash
sudo make install
```

```bash
cd /home/me/ram
```

```bash
sudo rm -r -f -v /home/me/ram/vimiv-0.9.1
```

## Установка [Axel](https://github.com/axel-download-accelerator/axel)

**Внимание ⚠️**

**Интегрировать установку и обновление Axel в алиас fullupgrade. Так как после установки он не обновляется больше.**

```bash
wget --no-cache --no-cookies --https-only --output-document=/home/me/ram/axel.tar.gz https://github.com/axel-download-accelerator/axel/releases/download/v$(curl -sL https://api.github.com/repos/axel-download-accelerator/axel/releases/latest | jq -r ".tag_name" | sed -e "s/^.\{1\}//")/axel-$(curl -sL https://api.github.com/repos/axel-download-accelerator/axel/releases/latest | jq -r ".tag_name" | sed -e "s/^.\{1\}//").tar.gz
```

```bash
tar -xvzf /home/me/ram/axel.tar.gz -C /home/me/ram
```

```bash
cd /home/me/ram/axel-$(curl -sL https://api.github.com/repos/axel-download-accelerator/axel/releases/latest | jq -r ".tag_name" | sed -e "s/^.\{1\}//")
```

```bash
./configure
```

```bash
make
```

```bash
sudo make install
```

## Установка [Wire](https://github.com/wireapp/wire-desktop/wiki/How-to-install-Wire-for-Desktop-on-Linux#installation-on-debian-based-distributions)

```bash
sudo -i
```

```bash
sudo printf "deb [arch=amd64] https://wire-app.wire.com/linux/debian stable main" > /etc/apt/sources.list.d/wire.list
```

```bash
sudo wget -q https://wire-app.wire.com/linux/releases.key -O- | sudo apt-key add -
```

```bash
sudo apt update
```

```bash
sudo apt install wire-desktop -y
```

```bash
sudo printf "deb [arch=amd64] https://wire-app.wire.com/linux/debian stable main" > /etc/apt/sources.list.d/wire.list
```

```bash
exit
```

## Установка [aws-cli](https://github.com/aws/aws-cli)

```bash
sudo pip3 install awscli
```

## Установка [Docker](https://docs.docker.com/install/linux/docker-ce/debian/#install-using-the-repository)

```bash
sudo apt update
```

```bash
sudo curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
```

**Убедитесь что есть ключ с отпечатком 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88**

```bash
sudo apt-key fingerprint 0EBFCD88
```

```bash
sudo sh -c 'echo "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list'
```

```bash
sudo apt update
```

```bash
sudo apt install docker-ce docker-ce-cli containerd.io -y
```

```bash
sudo sh -c 'echo "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list'
```

```bash
sudo systemctl start docker.service
```

```bash
sudo systemctl enable docker.service
```

```bash
sudo systemctl status docker.service
```

```bash
sudo usermod -aG docker me
```

## Настраиваем [драйвер](https://docs.docker.com/storage/storagedriver/select-storage-driver) [хранения](https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file) docker

```bash
sudo vim /etc/docker/daemon.json
```

## Прописываем следущее чтобы использовать [overlay2](https://docs.docker.com/storage/storagedriver/overlayfs-driver)

```bash
{
  "storage-driver": "overlay2"
}
```

**А также есть всеми любимый список** [**Awesome Docker**](https://github.com/veggiemonk/awesome-docker)

## Установка [happyfinder](https://github.com/hugows/hf)

```bash
go get -u -v github.com/hugows/hf
```

## Настройка отображения кодировки в текстовых редакторах

**gedit или xed открывает текстовые файлы в неправильной кодировке. Выполняем в терминале gconf-editor (запомните это приложение, оно полезное), идем в /apps/gedit-2/preferences/encodings. Двойной клик по ключу auto-detected, поднимаем на самый верх пункт CURRENT. Двойной клик по ключу shown-in-menu, поднимаем на самый верх пункты UTF-8 и WINDOWS-1251. P.S. для Ubuntu и Mint нужно сделать через sudo apt-get install dconf-editor -y**

## Для редактора gedit

```bash
gsettings set org.gnome.gedit.preferences.encodings candidate-encodings "['UTF-8', 'WINDOWS-1251', 'KOI8-R', 'CURRENT', 'ISO-8859-15', 'UTF-16']"
```

## Для редактора pluma

```bash
gsettings set org.mate.pluma auto-detected-encodings "['UTF-8', 'WINDOWS-1251', 'CURRENT', 'ISO-8859-15', 'UTF-16']"
```

## Настройка [web-камеры](https://wiki.archlinux.org/index.php/Webcam_setup)

```bash
sudo ls -ltrh /dev/* | sa video
```

```bash
v4l2-ctl --list-devices
```

```bash
qv4l2
```

## Настройка PulseAudio

*Создаём общесистемный файл*

```bash
sudo vim /etc/asound.conf
```

## Пишем следующие строки, что бы PulseAudio использовался по-умолчанию

```bash
pcm.!default {
    type pulse
}

ctl.!default {
     type pulse
}
```

*При некоторых ошибках установки alsa отключает звук всех каналов и устанавливает для всех громкость 0. Запустите программу командной строки alsamixer и включите звук (нажмите m) и измените громкость каналов, которые вас интересуют (используйте клавиши со стрелками для навигации и изменения громкости). Вы можете включить звук предпочтительно Master и PCM каналов.*

*Системы объемного звука. Многие люди имеют многоканальные звуковые карты, но используют акустические системы для двух каналов. PulseAudio не имеет настроек по умолчанию для поддержки объемного звука. Для включения поддержки все каналов отредактируйте файл /etc/pulse/daemon.conf: раскомментируйте строку default-sample-channels (т.е. удалите точку с запятой в начале строки) и установите значение в 6 если у Вас система 5.1, или в 8, если у Вас система 7.1.*

## Тогда редактируем файл

```bash
sudo vim /etc/pulse/daemon.conf
```

## Нужно расскоментировать строку

```bash
default-sample-channels = 2
```

**После внесения изменений необходимо перезапустить Pulseaudio.**

## Полезные ссылки

<https://help.ubuntu.ru/wiki/pulseaudio> [https://wiki.debian.org/ru/PulseAudio](https://wiki.debian.org/ru/PulseAudio\[) <https://wiki.archlinux.org/index.php/PulseAudio> <https://wiki.archlinux.org/index.php/PulseAudio/Examples> <https://wiki.debian.org/AlsaMixer>

## Настраиваем виртуальную машину через [QEMU](https://wiki.archlinux.org/index.php/QEMU) и [libvirt](https://wiki.archlinux.org/index.php/Libvirt)

## Создание [образа гостевой системы](https://www.ibm.com/support/knowledgecenter/linuxonibm/com.ibm.linux.z.ldva/ldva_r_qemu-imgCommand.html)

```bash
qemu-img create -f qcow2 debian-deploy.qcow2 128G
```

*-f указывает на формат файла, лучше использовать формат qcow2 родной для QEMU, так как qcow2 формат записи образа виртуальных машины с поддержкой сжатия, снапшотов и шифрования. Кроме того qcow2 образ занимает столько места, сколько данных записано в него виртуальной машиной, вне зависимости от размера созданного изначально при создании.*

*debian-deploy.qcow2 это имя нашего файла образа.*

*128G это размер файла для образа, в данном примере 128 гигабайт.*

## После выполнения данной команды будет такое сообщение

```bash
Formatting 'debian-deploy.qcow2', fmt=qcow2 size=8589934592 encryption=off cluster_size=65536 lazy_refcounts=off
```

## Установка ISO образа в QEMU

*Сначала нам надо запустить ISO образ в QEMU, затем проинсталлировать и потом уже использовать полученную виртуальную систему.*

```bash
qemu-system-x86_64 -cpu IvyBridge -enable-kvm -hda debian-deploy.qcow2 -cdrom /home/me/projects/vm/debian-deploy/debian-10.2.0-amd64-netinst.iso -boot d -m 4096
```

*-cpu IvyBridge это опция отвечающая за эмуляцию командных инструкций процессоров под кодовым названием IvyBridge. В принципе вы можете узнать какие еще процессора поддерживает qemu и выбрать свой.*

*-enable-kvm = включаем поддержку kvm ядра. Если мы не включим эту опцию, то qemu будет запущен без использования kvm.*

*-hda debian-deploy.qcow2 это указываем какой файл образ будем использовать. Выше было описано, как его создавать.*

*-cdrom /home/me/projects/vm/debian-deploy/debian-10.2.0-amd64-netinst.iso это опция указывает, что мы будем использовать ISO образ который находится виртуально на устройстве cdrom.*

*-boot d это указывает, что грузиться qemu будет с cdrom (т.е. с нашего ISO образа) но буква d говорит о том, что ISO образ находится не в приводе cdrom, а на жестком диске.*

*-m 4096 это указывает, сколько памяти будет выделено под работу qemu. В данном примере 4 Гигабайта.*

## Запуск виртуальной ОС в QEMU

```bash
qemu-system-x86_64 -cpu IvyBridge -enable-kvm -hda debian-deploy.qcow2 -m 4096
```

*Отличие данной строки запуска, от строки запуска с ISO образом в том, что в первом случае мы указываем параметр: -cdrom /home/me/projects/vm/debian-deploy/debian-10.2.0-amd64-netinst.iso и -boot d. Здесь, же нам это не требуется, т.к. уже имеется файл с установленной виртуальной системой.*

## Просмотр информации об образе системы

```bash
qemu-img info debian-deploy.qcow2
```

## Добавляем текущего пользователя me пользователя в группу kvm

```bash
sudo gpasswd -a me kvm
```

*или же можно сделать вот так*

```bash
sudo gpasswd -a $(whoami) kvm
```

## В зависимости от процессора Intel или AMD, прописываем модуль ядра в [/etc/modules-load.d/kvm.conf](https://raw.githubusercontent.com/akimdi/help-install-arch/master/kvm.conf)

```bash
sudo vim /etc/modules-load.d/kvm.conf
```

```bash
kvm_intel
```

## Или что бы не вписывать можно скачать конфигурационный файл kvm.conf (файл предназначен только для машин работающих под управлением процессоров Intel)

```bash
sudo wget --https-only --output-document=/etc/modules-load.d/kvm.conf https://raw.githubusercontent.com/akimdi/help-install-arch/master/kvm.conf
```

## Подгружаем модули ядра kvm\_intel или kvm\_amd в зависимости от процессора Intel или AMD

```bash
sudo modprobe kvm_intel
```

## Запускаем и устанавливаем в автозагрузку libvirtd

```bash
sudo systemctl start libvirtd
```

```bash
sudo systemctl enable libvirtd
```

```bash
sudo systemctl status libvirtd
```

## Создаём группу пользователей libvirt

```bash
sudo groupadd libvirt
```

## Добавляем пользователя me в группу libvirt

```bash
sudo gpasswd -a me libvirt
```

```bash
sudo systemctl start libvirtd
```

```bash
sudo systemctl enable libvirtd
```

```bash
sudo systemctl status libvirtd
```

## Просмотр всех сетей в [virsh](https://libvirt.org/manpages/virsh.html)

```bash
sudo virsh net-list --all
```

## [Стартуем сеть](https://libvirt.org/manpages/virsh.html#net-start)

```bash
sudo virsh net-start default
```

## [Ставим сеть в автозагрузку](https://serverfault.com/a/577210)

```bash
virsh net-autostart default
```

## [Смотрим результат](https://libvirt.org/manpages/virsh.html#net-info)

```bash
virsh net-info default
```

## Запускаем [Virtual Machine Manager by Red Hat](https://virt-manager.org)

```bash
virt-manager
```

*Важно знать что после установки, в гостевую систему нужно установить пакет* [*spice-vdagent*](https://askubuntu.com/a/858650)*. Например для Debian он находится* [*здесь*](https://packages.debian.org/buster/spice-vdagent)*. Для ArchLinux* [*здесь*](https://www.archlinux.org/packages/community/x86_64/spice-vdagent)*. Для Windows* [*здесь*](https://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-latest.exe)*.*

*Eсли хотим подключить* [*shared folder*](http://www.linux-kvm.org/page/9p_virtio) *в гостевую систему нужно запустить virt-manager, открыть свою виртуальную машину, дважды щелкнув по ней. Нажать на детали виртуального оборудования (лампочка). Далее «Добавить оборудование» и выбрать файловую систему. Драйвер выбираем **Path**. Режим **Mapped**. Правила записи **Immediate**. Указываем путь на хостовой и на гостевой системах.*

![](https://sun9-24.userapi.com/c855520/v855520802/1ee4fc/J5SxyiEEcQA.jpg)

*А также обязательно выставляем видеодрайвер Virtio чтобы не было проблем с 3D графикой*

![](https://sun9-43.userapi.com/c857224/v857224955/d6b8d/PgFxGoGVPVY.jpg)

## В гостевой системе создаём папку и монтируем её

```bash
mkdir -p /home/me/projects
```

```bash
sudo mount -t 9p -o trans=virtio,version=9p2000.L /home/me/projects /home/me/projects
```

## Для [автомонтирования](https://unix.stackexchange.com/a/405677) при загрузке системы, следует прописать следующие стоки в файле /etc/fstab

```bash
sudo vim /etc/fstab
```

```bash
/home/me/projects /home/me/projects 9p noauto,x-systemd.automount,x-systemd.device-timeout=10,timeo=14,x-systemd.idle-timeout=0,trans=virtio,version=9p2000.L,rw 0 0
```

## Так как гостевая система работает от имени [libvirt-qemu](https://askubuntu.com/a/772831) пользователя, а настройки [ACL](https://wiki.archlinux.org/index.php/Access_Control_Lists) ограничивают [разрешения](https://unix.stackexchange.com/a/258208) этого пользователя, на хостовой операционной системе следует выполнить следующие команды

```bash
sudo chmod -R 777 /home/me/projects
```

```bash
sudo chown -R me:me /home/me/projects
```

```bash
sudo chmod -R 777 /var/lib/libvirt/images
```

```bash
sudo chown -R me:me /var/lib/libvirt/images
```

```bash
sudo groupadd libvirt
```

```bash
sudo usermod -G libvirt -a me
```

```bash
sudo groupadd libvirtd
```

```bash
sudo usermod -a -G libvirtd me
```

```bash
sudo useradd libvirt-qemu
```

```bash
sudo usermod -a -G libvirt-qemu me
```

```bash
sudo useradd kvm
```

```bash
sudo usermod -a -G kvm me
```

```bash
sudo setfacl -R -m u:libvirt-qemu:rwx /home/me/projects
```

```bash
sudo chown -R me:me /home/me/projects
```

## Для гостевой Windows [инструкция здесь](https://unix.stackexchange.com/q/86071)

## Для подключения по SSH нужно на гостевой системе узнать IP

```bash
sudo ip a
```

## Должно выдать что-то типо этого

```bash
enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:e3:07:bc brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.106/24 brd 192.168.122.255 scope global dynamic noprefixroute enp1s0
       valid_lft 3366sec preferred_lft 3366sec
    inet6 fe80::5054:ff:fee3:7bc/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
```

## Далее на хостовой системе уже выполняем подключение

*Конкретно в этом примере IP 192.168.122.106*

```bash
ssh -p 22 me@192.168.122.106
```

***Полезные ссылки:***

[How to change the default Storage Pool from libvirt](https://serverfault.com/questions/840519/how-to-change-the-default-storage-pool-from-libvirt)

[Easy instructions to get QEMU/KVM and virt-manager up and running on Arch](https://gist.github.com/akimdi/2c02b2bf1123c9c4f83861f1c3254b19)

[Virt Tools Blog Planet](https://planet.virt-tools.org)

*Коротко о том что и где принято хранить:*

**\*/var/lib/libvirt/boot** — ISO-образы для установки гостевых систем.\*

**\*/var/lib/libvirt/images** — образы жестких дисков гостевых систем.\*

**\*/var/log/libvirt** — здесь следует искать все логи.\*

**\*/etc/libvirt** — каталог с файлами конфигурации.\*

*Далее можно установить виртуалку, а в качестве начального пособия рекомендую статью от* [*Александра Алексеева https://eax.me/kvm*](https://eax.me/kvm)

## Далее по-желанию можно настроить системные уведомления через [Dunst](https://wiki.archlinux.org/index.php/Dunst)

## Ставим расширения для Firefox

[Adguard](https://addons.mozilla.org/firefox/addon/adguard-adblocker)

[Firefox Multi-Account Containers](https://addons.mozilla.org/firefox/addon/multi-account-containers)

[Block Site](https://addons.mozilla.org/firefox/addon/block-website)

[CanvasBlocker](https://addons.mozilla.org/firefox/addon/canvasblocker)

[Container proxy](https://addons.mozilla.org/firefox/addon/container-proxy)

[FoxyTab](https://addons.mozilla.org/firefox/addon/foxytab)

[Copy PlainText](https://addons.mozilla.org/firefox/addon/copy-plaintext)

[Decentraleyes](https://addons.mozilla.org/firefox/addon/decentraleyes)

[DuckDuckGoogle](https://addons.mozilla.org/firefox/addon/duckduckgoogle)

[Don't touch my tabs](https://addons.mozilla.org/firefox/addon/dont-touch-my-tabs)

[Don't track me Google](https://addons.mozilla.org/firefox/addon/dont-track-me-google1)

[LanguageTool](https://addons.mozilla.org/firefox/addon/languagetool)

[User-Agent Switcher and Manager](https://addons.mozilla.org/firefox/addon/user-agent-string-switcher)

[uMatrix](https://addons.mozilla.org/firefox/addon/umatrix)

[Temporary Containers](https://addons.mozilla.org/firefox/addon/temporary-containers)

[Tabby - Window & Tab Manager](https://addons.mozilla.org/firefox/addon/tabby-window-tab-manager)

[Privacy Possum](https://addons.mozilla.org/firefox/addon/privacy-possum)

[NoScript Security Suite](https://addons.mozilla.org/firefox/addon/noscript)

[KeePassXC-Browser](https://addons.mozilla.org/firefox/addon/keepassxc-browser)

[Iridium for YouTube](https://addons.mozilla.org/firefox/addon/particle-iridium)

[Privacy Badger](https://addons.mozilla.org/firefox/addon/privacy-badger17)

[HTTPS Everywhere](https://addons.mozilla.org/firefox/addon/https-everywhere)

[Hide Tabs](https://addons.mozilla.org/firefox/addon/hide-tab)

[Google Redirects Fixer & Tracking Remover](https://addons.mozilla.org/firefox/addon/google-no-tracking-url)

[Google search link fix](https://addons.mozilla.org/firefox/addon/google-search-link-fix)

[FoxyProxy Standard](https://addons.mozilla.org/firefox/addon/foxyproxy-standard)

[Flagfox](https://addons.mozilla.org/firefox/addon/flagfox)

[Emoji Cheatsheet](https://addons.mozilla.org/firefox/addon/emoji-cheatsheet)

[ClearURLs](https://addons.mozilla.org/firefox/addon/clearurls)

[Smart HTTPS](https://addons.mozilla.org/firefox/addon/smart-https-revived)

[Forget Me Not - Forget cookies & other data](https://addons.mozilla.org/firefox/addon/forget_me_not)

[Containerise](https://addons.mozilla.org/firefox/addon/containerise)
