diff --git a/.drone.yml b/.drone.yml index cb5a1c3..e2353fd 100755 --- a/.drone.yml +++ b/.drone.yml @@ -4,8 +4,8 @@ type: docker name: build-home-docs steps: -- name: check-feature - image: squidfunk/mkdocs-material:9.1.17 +- name: build main + image: squidfunk/mkdocs-material:9.4.6 pull: if-not-exists volumes: - name: site @@ -16,6 +16,23 @@ steps: - cp -r site/ /site - chown 1000:1000 /site - chmod -R 777 /site + when: + event: + - push + branch: + - main + +- name: build states + image: git.st1t.ru/thest1tch/mkdocs-material:v9.4.6 + pull: if-not-exists + volumes: + - name: site + path: /site + commands: + - mkdocs build + - cp -r site/ /site + - chown 1000:1000 /site + - chmod -R 777 /site when: event: - push diff --git a/docs/blog/index.md b/docs/blog/index.md index d713ff5..9237040 100755 --- a/docs/blog/index.md +++ b/docs/blog/index.md @@ -1,3 +1 @@ -# Blogs - -{{ blog_content }} \ No newline at end of file +# Блог \ No newline at end of file diff --git a/docs/blog/posts/ark-config-server.md b/docs/blog/posts/ark-config-server.md new file mode 100755 index 0000000..c8b1201 --- /dev/null +++ b/docs/blog/posts/ark-config-server.md @@ -0,0 +1,69 @@ +--- +draft: true +date: 2023-10-17 +categories: + - "ark: se" + - games + - игры + - игровые сервера +--- + +## RCON Tools + +[ARK RCON tool ACCIon](https://survivetheark.com/index.php?/forums/topic/255792-ark-rcon-tool-accion/&) + +## Console Commands + +[список](https://ark.fandom.com/wiki/Console_commands) + +## Генераторы конфигов + +[https://ini.arkforum.de/](https://ini.arkforum.de/) + +[Dino Spawn Configuration Tool](http://www.gamewalkthrough-universe.com/Walkthroughs-Guides/Ark-Survival-Evolved/Game-Server-Customization/Dino-Spawn/default.aspx) + +--- + +## Файлы конфигурации + +Большинство параметров сервера нужно указывать в двух файлах конфигурации `GameUserSettings.ini` и `Game.ini`. + +**Прежде чем вносить изменения в данные файлы, сервер нужно отключить**. + +Расположение файлов конфигурации на FTP: + +| Файл Конфигурации | Место нахождения | +| --- | --- | +| GameUserSettings.ini | ShooterGame/Saved/Config/LinuxServer/ | +| Game.ini | ShooterGame/Saved/Config/LinuxServer/ | + +В файле `GameUserSettings.ini` содержатся параметры, как для клиента игры, так и для игрового сервера. Параметры клиента игры сервером не используются. Параметры сервера указаны в разделе под названием `[ServerSettings]`. + +Файл `Game.ini` используется для более продвинутых модификаций - отключение каких либо энграмм, какое количество XP игрок будет получать за новый уровень, отключение специфического контента или изменение баланса в зависимости от предпочтений игроков. +Изначально Game.ini чист, параметры в него нужно будет вписывать в ручную. Для начала вписываем раздел `[/script/shootergame.shootergamemode]`, только после этого указываем параметр. + +Пример: + +``` +[/script/shootergame.shootergamemode] +MatingIntervalMultiplie=1.0 +``` + +Все параметры в файлах `GameUserSettings.ini` и `Game.ini` нужно обязательно указывать со значением. Если параметр не указан в конфигурационном файле, его значение автоматически используется по умолчанию. +После команды обязательно ставьте символ `=` только потом значение + +Пример: + +``` +ServerCrosshair=True +AllowThirdPersonPlayer=True +MapPlayerLocation=True +MaxStructuresInRange=100 +``` + +**Важное замечание по значениям параметров** + +```plaintext +False - ложь\отключить +True - правда\включить +``` \ No newline at end of file diff --git a/docs/blog/posts/ark-myserver.md b/docs/blog/posts/ark-myserver.md new file mode 100755 index 0000000..ced3a02 --- /dev/null +++ b/docs/blog/posts/ark-myserver.md @@ -0,0 +1,28 @@ +--- +draft: true +date: 2023-10-17 +tags: + - "ark: se" + - games + - игры +--- + +[Локации на карте Fjordur](https://docs.google.com/spreadsheets/d/13Hov6IQNBorso8WqY0kkT72e4iISr192vkGbIMHVQWk/edit?usp=sharing) + +[Карта](https://ark.fandom.com/wiki/Mod:Fjordur/Explorer\Map) + +[Auction House команды админа](https://linode.ghazlawl.com/auction-house/admin-commands/) + +[Конфигурация сервера](https://ark.fandom.com/wiki/Server_configuration#Command_line_arguments) + +[Structures Plus](https://steamcommunity.com/sharedfiles/filedetails/?id=2184441067) + +[Console Commands](https://ark.fandom.com/wiki/Console_commands) + +[Spawn codes for Castles, Keeps, and Forts Remastered](https://usebeacon.app/mods/1814953878/spawncodes) + +[Linux Server Tools](https://github.com/arkmanager/ark-server-tools#commands-acting-on-instances) + +[Спавн предметов](https://dododex.ru/resources/) + +[образ docker](https://hub.docker.com/r/hermsi/ark-server/) \ No newline at end of file diff --git a/docs/other/chrome.md b/docs/blog/posts/chrome.md similarity index 92% rename from docs/other/chrome.md rename to docs/blog/posts/chrome.md index 80b5e19..e117dd8 100755 --- a/docs/other/chrome.md +++ b/docs/blog/posts/chrome.md @@ -1,4 +1,11 @@ -Google Chrome +--- +draft: false +date: 2023-10-17 +tags: + - chrome +--- + +# Google Chrome ## Блокировка медиакнопок diff --git a/docs/blog/posts/hardware.md b/docs/blog/posts/hardware.md new file mode 100755 index 0000000..790ccc8 --- /dev/null +++ b/docs/blog/posts/hardware.md @@ -0,0 +1,21 @@ +--- +draft: false +date: 2023-10-17 +tags: + - drivers + - hardware +--- + +# Железо + +Куча разных ссылок с полезностями + +## Загрузка драйверов + +- [HP сетевые устройства](https://h10145.www1.hpe.com/downloads/ProductsList.aspx?smp=1) +- [HP сервера](https://support.hpe.com/hpesc/public/km/search#t=DriversandSoftware&sort=relevancy&layout=table&numberOfResults=25) +- [HP домашние устройства](https://support.hp.com/ru-ru/drivers) + +## Проверка гарантии +- [Dell](https://www.dell.com/support/home/ru/ru/rsbsdt1/Products/?app=warranty) +- [HP](https://support.hp.com/us-en/checkwarranty) \ No newline at end of file diff --git a/docs/blog/posts/hikvision.md b/docs/blog/posts/hikvision.md new file mode 100755 index 0000000..7827742 --- /dev/null +++ b/docs/blog/posts/hikvision.md @@ -0,0 +1,23 @@ +--- +draft: false +date: 2023-10-17 +tags: + - hikvision + - hardware +--- + +# Hikvision + +## Hikvision: Путь до сохраненных файлов из веба + +``` +C:\Users\\AppData\Local\Microsoft\Windows\Temporary Internet Files\Virtualized\C\Users\\Web\DownloadFiles\ +``` + +## Hikvision: Password Reset Tool + +[https://ipcamtalk.com/pages/hikvision-password-reset-tool/](https://ipcamtalk.com/pages/hikvision-password-reset-tool/) + +[http://hillbillyhobbies.com/camera/](http://hillbillyhobbies.com/camera/) + +[https://ixnfo.com/sbros-parolya-na-hikvision-kamerah-i-videoregistratorah.html](https://ixnfo.com/sbros-parolya-na-hikvision-kamerah-i-videoregistratorah.html) \ No newline at end of file diff --git a/docs/blog/posts/my-bike.md b/docs/blog/posts/my-bike.md new file mode 100755 index 0000000..288f701 --- /dev/null +++ b/docs/blog/posts/my-bike.md @@ -0,0 +1,10 @@ +--- +draft: false +date: 2023-10-17 +--- +Мой велосипед, чтобы на потерять инструкции и что в нем щас есть + +[Настройка заднего амортизатора](https://cloud.st1t.ru/s/HNkq72CJzEtJ7gB) + +[](https://www.ridefox.com/fox17/help.php?m=bike&id=824) + diff --git a/docs/blog/posts/revert-hp-ban-cartridges.md b/docs/blog/posts/revert-hp-ban-cartridges.md new file mode 100755 index 0000000..16b120d --- /dev/null +++ b/docs/blog/posts/revert-hp-ban-cartridges.md @@ -0,0 +1,58 @@ +--- +draft: false +date: 2023-10-17 +slug: revert-hp-ban-cartridges +--- +# Откат обновления, запрещающего использовать сторонние картриджи на лазерных принтерах HP + +В 2020 году компания HP выпустила новую прошивку на свои принтера и МФУ. В прошивке оказался заблокирована возможность использования сторонних картриджей. Достигалось это путем блокировки чипов, выпущенных не HP. Назревала проблема, стоимость нового мфу равна стоимости комплекта катриджей к нему. Не приятненько.. + + +!!! note + + Данное руководство сделано для модели МФУ HP M282, но приминимо и для других моделей со схожей проблемой. Нужно лишь найти файл старой прошивки + +Версия прошивки, с которой начались проблемы - 20221021 + +Решение этой проблемы состоит в том, чтобы выполнить откат на более старую прошивку, когда печать работала на сторонних картриджах. + +Кста, проверить версию прошивки можно через меню на принтере: `Настройка` > `Обслуживание` > `Версия микропрограммы` + +Версия, на которой печать с использованием сторонних катриджей работает: **20211221** + +## Отключить автоматическое обновление + +Требуется отключить автоматическое обновление и не позволить принтеру скачать прошивку вновь. Я крайне рекомендую, отключать проверку обновлений на всей печатной технике и обновлять её только руками. + +В панели управления перейдите по ссылке `Настройка` > `Обслуживание` > `LaserJet обновление` > `Управление обновлением`: + +Затем установите следующие параметры: + +- Разрешить понижение версии: `Да` +- Проверять автоматически: `Нет` +- Запрос перед установкой: `Всегода спрашивать` +- Разрешить обновления: `Да` + +## Скачать старую прошивку + +Чтобы найти прошивку, в которой нет функции блока чипов, потребовалось перерыть кучу сайтов. На Reddit заветная прошивка была найдена. Как же много тех, кто тоже ищет способы решения проблемы. Найти прошмивку на оффицильном сайте тяжело, тк доступ к старым версиям закрыт. + +Вот файл для скачивания старой версии прошвики: [HP_Color_LaserJet_Pro_M282_M285_Multifunction_Printer_series_20200603.rfu](https://cloud.mail.ru/public/KWrv/YBL199ZDe). + +## Понизить прошивку + +1. Откройте веб-интерфейс. Вверху нажмите **«Сеть»**. +2. Слева установите флажок `FTP-ПЕЧАТЬ` и примените настройки. +3. Откройте ваше любимое FTP-приложение, я использую Filezilla +4. Введите IP-адрес, полученный на шаге 4, и подключитесь (имя пользователя или пароль не требуются). +5. Перетащите файл `HP_Color_LaserJet_Pro_M282_M285_Multifunction_Printer_series_20200603.rfu` на FTP-сервер удаленного сервера (у меня он был пустым. Никаких файлов там не было). +6. Принтер должен начать установку встроенного ПО, отобразить логотип HP и **ПРОГРАММИРОВАНИЕ...** После завершения обновления все будет готово. + +После обновления, у меня возникла проблема, что после включения принтер спустя пару минут зависал. Решалось это перезагрузкой принтера. Но после зависал снова. +Чтобы решить проблему, я обновил версию ПО. Установил ту что предлагалось. Спасибо HP, что чтобы поставить последнюю, надо ставить их попорядку. +Обновление ставить используя сам принтер, а не веб-интерфейс. Версия которая должна быть после обновления = **20211221** + +!!! warning + + Объязательно нужно проверить, не включилось ли автообновления. Если включились - выключить их. + Далее, выключаем любую возможность изменения прошивки: `Настройка` > `Обслуживание` > `LaserJet обновление` > `Управление обновлением` > `Разрешить обновления`: Нет \ No newline at end of file diff --git a/docs/blog/posts/traefik-fa.md b/docs/blog/posts/traefik-fa.md index 9272147..73974b8 100755 --- a/docs/blog/posts/traefik-fa.md +++ b/docs/blog/posts/traefik-fa.md @@ -1,13 +1,13 @@ +--- +draft: false +date: 2023-10-17 +--- # Руководство по Traefik Forward Auth – Простая защита через Google SSO -![](https://st1t.ru/wp-content/uploads/2022/11/traefik-forward-auth-google-flow-840x525.png) - ----------- - Хотите защитить свой стек Docker чем-то более надежным, чем обычная HTTP-аутентификация? Google OAuth2 SSO с Traefik Forward Auth — ваш выбор. Я был очень удивлен, узнав, что образ Thomseddon [Traefik Forward Auth](https://github.com/thomseddon/traefik-forward-auth) может защитить мои службы в Docker. Этот образ обеспечивает вход и аутентификацию OAuth/SSO для обратного прокси-сервера Traefik с использованием Traefik. - + > Почему Traefik Google OAuth2 для служб Docker? > > Google OAuth2 позволяет вам использовать свою учетную запись Google для входа в свои службы. Использование **Google OAuth с Traefik** позволит вам добавлять учетные записи в белый список, внедрять двухфакторную аутентификацию Google, а также обеспечивать единый вход (SSO) для ваших служб. Это не только обеспечивает удобство, поскольку вам не нужно часто входить в систему, но и повышает безопасность. diff --git a/docs/blog/posts/veeam-agent.md b/docs/blog/posts/veeam-agent.md deleted file mode 100755 index c8e88f9..0000000 --- a/docs/blog/posts/veeam-agent.md +++ /dev/null @@ -1,19 +0,0 @@ -# Настройка бекапов в Veeam Agent - ----------- - -![](https://st1t.ru/wp-content/uploads/2023/04/veeam_agent_configure_backup_1.png) - -![](https://st1t.ru/wp-content/uploads/2023/04/veeam_agent_configure_backup_2.png) - -![](https://st1t.ru/wp-content/uploads/2023/04/veeam_agent_configure_backup_3.png) - -![](https://st1t.ru/wp-content/uploads/2023/04/veeam_agent_configure_backup_4.png) - -![](https://st1t.ru/wp-content/uploads/2023/04/veeam_agent_configure_backup_6.png) - -![](https://st1t.ru/wp-content/uploads/2023/04/veeam_agent_configure_backup_7.png) - -![](https://st1t.ru/wp-content/uploads/2023/04/veeam_agent_configure_backup_5.png) - -![](https://st1t.ru/wp-content/uploads/2023/04/veeam_agent_configure_backup_8.png) \ No newline at end of file diff --git a/docs/docker/docker-compose-healthcheck.md b/docs/docker/compose/healthcheck.md similarity index 100% rename from docs/docker/docker-compose-healthcheck.md rename to docs/docker/compose/healthcheck.md diff --git a/docs/docker/compose/profile.md b/docs/docker/compose/profile.md new file mode 100755 index 0000000..4648dc5 --- /dev/null +++ b/docs/docker/compose/profile.md @@ -0,0 +1,50 @@ +# Docker Compose Profile - профили + +Те, кто юзает docker-compose, обычно делятся на 2 типа: +- пихаем все в 1 файл на каждый хост +- пихаем в разные файлы с какой-то логикой + +Что, если я напишу, что можно совместить эти 2 типа людей. 1 файл, но с разбивкой по профилям с какой-то логикой. Звучи правда классно? + +Возьмем классический монолитный файл docker-compose: + +```yaml title="docker-compose.yaml" +version: "3.9" +services: + nginx1: + image: nginx + container_name: nginx1 + profiles: + - prod + - test + nginx2: + image: nginx + container_name: nginx2 + profiles: + - prod + nginx3: + image: nginx + container_name: nginx3 + profiles: + - test +``` + +Используя profile, можно поместить 1 службу в несколько профилей, что дает больше гибкости, чем несколько файлов. + +```bash +user@test tmp % docker-compose --profile test up -d +[+] Running 2/2 + ⠿ Container nginx1 Started 0.1s + ⠿ Container nginx3 Started +``` + + Пример выше показывает, что были запущены только сервисы, с профилем `test`. Больше информации можно найти в [документации Docker](https://blog.ktz.me/monolithic-docker-compose-files-filtered-by-labels/#:~:text=%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D0%B8%20Docker%20.) . + + !!! note + + Eсли включаем профиль, то простой вариант docker-compose up -d не выполнится: + + ```bash + user@test tmp % docker-compose up -d + no service selected + ``` \ No newline at end of file diff --git a/docs/docker/drone.md b/docs/docker/drone.md new file mode 100755 index 0000000..c4f685b --- /dev/null +++ b/docs/docker/drone.md @@ -0,0 +1,35 @@ +# Drone CI + +```yaml title="docker-compose.yml" +version: '3.7' + +services: + drone: + image: drone/drone:latest + container_name: drone + environment: + - DRONE_GITEA_SERVER=https://gitea.example.com/ + - DRONE_GIT_ALWAYS_AUTH=true + - DRONE_GITEA_CLIENT_ID= + - DRONE_GITEA_CLIENT_SECRET= + - DRONE_SERVER_HOST=drone.example.com + - DRONE_SERVER_PROTO=https + - DRONE_RPC_SECRET= + - DRONE_USER_CREATE=username:admin,admin:true # Имя указать, что юзается в gitea + # Если есть PostgreSQL + #- DRONE_DATABASE_DRIVER=postgres + #- DRONE_DATABASE_DATASOURCE=postgres://root:password@1.2.3.4:5432/drone?sslmode=disable + restart: unless-stopped + + drone-runner-docker: + image: drone/drone-runner-docker:1 + container_name: drone-runner-docker + volumes: + - /var/run/docker.sock:/var/run/docker.sock + environment: + - DRONE_RPC_PROTO=https + - DRONE_RPC_HOST=drone.example.com> + - DRONE_RUNNER_CAPACITY=2 + - DRONE_RUNNER_NAME=whatsinaname + restart: unless-stopped +``` \ No newline at end of file diff --git a/docs/docker/gitea.md b/docs/docker/gitea.md new file mode 100755 index 0000000..1c37954 --- /dev/null +++ b/docs/docker/gitea.md @@ -0,0 +1,134 @@ +# Gitea + +[Gitea](https://gitea.io/en-us/) - это self-hosted сервис, аналог GitHub. Основное отличие от GitLab - меньшее потребление ресурсов, прозрачность при обновлении. Gitea может использоваться как локально, так и в облачном режиме. + +## Создание файлов конфигурации + +Создадим папку, где будут храниться файл `docker-compose.yml`, а так же другие файлы, связанные с gitea. + +Создадим файл `docker-compose.yml`: + +```yaml title="docker-compose.yml" +version: '3.7' + +services: + server: + image: gitea/gitea:latest + container_name: gitea + environment: + - USER_UID=1000 + - USER_GID=1000 + restart: always + volumes: + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + - ./data:/data + - ./custom:/app/gitea/custom + - ./log:/app/gitea/log + ports: + - 10880:3000 + - 10022:22 +``` + +В нем: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ПараметрОписание
+ +```yaml + image: gitea/gitea:latest +``` + +Указываем, что используем последнию версию образа gitea, доступную в Docker Hub
+ +```yaml + container_name: gitea +``` + +Имя контейнера
+ +```yaml + restart: always +``` + +Автоматический перезапуск контейнера, при остановке
+ +```yaml + environment: + - USER_UID=1000 + - USER_GID=1000 +``` + +ID пользователя и группы, использующиеся в контейнере
+ +```yaml + volumes: + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + - ./data:/data + - ./custom:/app/gitea/custom + - ./log:/app/gitea/log +``` + + + +- `/etc/timezone` и `/etc/localtime` - берем таймзону и время из настроек хоста +- `./data` - хранение файлов данных gitea +- `./custom` - пользовательские файлы конфигурации +- `./log` - логи + + +
+ +```yaml + ports: + - "3000:3000" + - "10022:22" +``` + + +Задаем порты, для доступа к gitea. 3000 - для веб-интерфейса. 10022 - для доступа через SSH +
+ +## Запуск контейнера + +Перейдем в директорию, где находится файл `docker-compose.yml` и запустим с помощью команды: + +``` +docker-compose up -d +``` + +Произойдет запуск контейнера gitea в фоновом режиме. В первый раз может занять какое-то время. + +После запуска, нужно открыть браузер и ввести адрес: `http://server-ip:3000`. Заполняем поля. По умолчанию используется БД SQLite. В Administrator Account Settings обязательно укажите имя пользователя и пароль для учетной записи администратора. + +Готово. + diff --git a/docs/docker/handbrake.md b/docs/docker/handbrake.md new file mode 100755 index 0000000..e829aec --- /dev/null +++ b/docs/docker/handbrake.md @@ -0,0 +1,47 @@ +```yaml title="docker-compose.yml" + +version: "3.7" +services: + +## Handbrake - Video Converter + handbrake: + container_name: handbrake + image: jlesage/handbrake:latest + restart: always + networks: + - traefik_proxy +# ports: +# - "5800:5800" + security_opt: + - no-new-privileges:true + volumes: + - $USERDIR/docker/handbrake/config:/config:rw + - $USERDIR/docker/handbrake/watch:/watch:rw # Watch folder + - $USERDIR/docker/handbrake/output:/output:rw # Output folder + - /mnt/storage:/storage:ro # Data folder - can be anything + - $USERDIR/dwnloads:/downloads:ro # Data folder - can be anything + environment: + - USER_ID=$PUID + - GROUP_ID=$PGID + - TZ=$TZ + - UMASK=002 + - DISPLAY_WIDTH=1600 + - DISPLAY_HEIGHT=768 +# - AUTOMATED_CONVERSION_PRESET=H.265 MKV 480p30 + - AUTOMATED_CONVERSION_PRESET=H.265 MKV 1080p30 + - AUTOMATED_CONVERSION_FORMAT=mkv + labels: + - "traefik.enable=true" + ## HTTP Routers + - "traefik.http.routers.handbrake-rtr.entrypoints=https" + - "traefik.http.routers.handbrake-rtr.rule=Host(`handbrake.$DOMAINNAME`)" + ## Middlewares + - "traefik.http.routers.handbrake-rtr.middlewares=secure-chain@file" + ## HTTP Services + - "traefik.http.routers.handbrake-rtr.service=handbrake-svc" + - "traefik.http.services.handbrake-svc.loadbalancer.server.port=5800" + +networks: + traefik_proxy: + external: true +``` \ No newline at end of file diff --git a/docs/docker/homarr.md b/docs/docker/homarr.md new file mode 100755 index 0000000..efbd90e --- /dev/null +++ b/docs/docker/homarr.md @@ -0,0 +1,60 @@ +# Homarr - дашборд для быстрого доступа к сервисам. + +[![](https://img.shields.io/github/stars/ajnart/homarr?label=%E2%AD%90%20Stars)](https://github.com/ajnart/homarr) +[![](https://img.shields.io/github/v/release/ajnart/homarr?label=%F0%9F%9A%80%20Release)](https://github.com/ajnart/homarr/releases/latest) +[![](https://img.shields.io/badge/Demo-purple)](https://demo.homarr.dev/ru) + +Современная панель управления домашней лабой. Позваоляет видеть все, что поднято. + + + +## Запуск через Docker + +Запуск простой, через docker: + +```bash +docker run \ + --name homarr \ + --restart unless-stopped \ + -p 7575:7575 \ + -v /homarr/configs:/app/data/configs \ + -v /homarr/icons:/app/public/icons \ + -d ghcr.io/ajnart/homarr:latest +``` + +После, открываем [http://localhost:7575/](http://localhost:7575) в браузере и пользуемся. + +## Запуск через Docker-Compose + +Надо создать файл docker-compose.yml и вставить следующий код: + +```yaml title="docker-compose.yml" +version: '3.9' + homarr: + container_name: homarr + image: ghcr.io/ajnart/homarr:latest + restart: unless-stopped + volumes: + - ./homarr/configs:/app/data/configs + - ./homarr/icons:/app/public/icons + - ./homarr/img:/app/public/img + ports: + - 7575:7575 + - EDIT_MODE_PASSWORD='strong_password' +``` +Затем, запускаем через `docker-compose up -d ` находясь в той же папке, где файл. + + +## Возможности + +- 🖌️ Широкие возможности настройки благодаря обширной системе перетаскивания сетки. +- ✨ Легко интегрируется с вашими любимыми автономными приложениями. +- 📌 Простое и быстрое управление приложениями — без использования YAML +- 🙊 Усовершенствованная система управления секретами для повышения безопасности +- 📄 Подробная документация и активное сообщество +- 🔍 Мгновенный поиск в Интернете или поддерживаемых интеграциях. +- 🏴 Football Football Result Следите за своей заявкой с помощью встроенной системы статуса. +- 🦞 Комплексный встроенный инструмент выбора значков, содержащий более 7000 значков. +- 🐳 Простое развертывание с помощью Docker, unRAID и Synology. +- 🚀 Совместимость с любым основным потребительским оборудованием (x86, Raspberry Pi, старые ноутбуки и т. д.) +- 💵 Бесплатность и открытый исходный код — ваши данные остаются на вашем устройстве. Нет данных телеметрии. \ No newline at end of file diff --git a/docs/docker/linx-server.md b/docs/docker/linx-server.md index bcbc0fd..85cd2fc 100755 --- a/docs/docker/linx-server.md +++ b/docs/docker/linx-server.md @@ -1,69 +1,54 @@ -[Self-hosted файл/медиа хостинг.](https://github.com/ZizzyDizzyMC/linx-server/) +# Linx - свой хостинг для картинок, гифок, видяшек и документов. -## Демо +[![](https://img.shields.io/docker/pulls/andreimarcu/linx-server?color=brightgreen)](https://hub.docker.com/r/andreimarcu/linx-server) +[![](https://img.shields.io/github/stars/andreimarcu/linx-server.svg?label=Stars&style=social)](https://github.com/andreimarcu/linx-server) +[![](https://img.shields.io/badge/Demo-purple)](https://put.icu/) -Как выглядит, можно посмотреть на: [https://put.icu/](https://put.icu/) +Таких сервисов много, это лиш один из них. Позводяет захостить у себя сервис по хранению и выдаче различных медия. Аля imgur. -### Клиенты +## Запуск -| | | | -| --- | --- | --- | -| Официальный | CLI: **linx-client** | [Source](https://github.com/andreimarcu/linx-client) | -| Не официальный | Android: **LinxShare** | [Source](https://github.com/iksteen/LinxShare/) \| [Google Play](https://play.google.com/store/apps/details?id=org.thegraveyard.linxshare) | -| CLI: **golinx** | [Source](https://github.com/mutantmonkey/golinx) | +1. Создать папки `files` и `meta` и запустить `chown -R 65534:65534 meta && chown -R 65534:65534 files` +2. Создайте файл конфигурации (пример предоставлен в репозитории), мы будем называть его **linx-server.conf** в следующих примерах. -## Features +=== "Docker" + + ```bash + docker run andreimarcu/linx-server \ + -p 8080:8080 \ + -v /path/to/linx-server.conf:/data/linx-server.conf \ + -v /path/to/meta:/data/meta \ + -v /path/to/files:/data/files \ + -config /data/linx-server.conf + ``` + +=== "Docker Compose" + + ```yaml title="docker-compose.yaml" + version: "3.9" + + service: + # linx - self-hosting picture and data + linx: + container_name: linx-server + image: andreimarcu/linx-server + command: -config /data/linx-server.conf + volumes: + - ./linx/files:/data/files + - ./linx/meta:/data/meta + - ./linx/linx-server.conf:/data/linx-server.conf + environment: + PUID: 1000 + PGID: 1000 + ports: + - "8080:8080" + restart: unless-stopped + ``` + +## Возможности - Отображение базовых типов файлов (картинки, видео, аудио, markdown, pdf) - Отображение подсветки кода во строенном редакторе - API для работы. С документацией - Скачивание торрентов - Установка срока действия файлов и ссылок, удаление ключей, рандомные имена файлов - -## Screenshots - -| | | | -| --- | --- | --- | -| ![](https://user-images.githubusercontent.com/4650950/76579039-03c82680-6488-11ea-8e23-4c927386fbd9.png) | ![](https://user-images.githubusercontent.com/4650950/76578903-771d6880-6487-11ea-8baf-a4a23fef4d26.png) | ![](https://user-images.githubusercontent.com/4650950/76578910-7be21c80-6487-11ea-9a0a-587d59bc5f80.png) | -| ![](https://user-images.githubusercontent.com/4650950/76578908-7b498600-6487-11ea-8994-ee7b6eb9cdb1.png) | ![](https://user-images.githubusercontent.com/4650950/76578907-7b498600-6487-11ea-8941-8f582bf87fb0.png) | | - -## Начало - -1. Создать папки `files` и `meta` и запустить `chown -R 65534:65534 meta && chown -R 65534:65534 files` -2. Создайте файл конфигурации (пример предоставлен в репозитории), мы будем называть его **linx-server.conf** в следующих примерах. - -Пример: - -``` -docker run -p 8080:8080 -v /path/to/linx-server.conf:/data/linx-server.conf -v /path/to/meta:/data/meta -v /path/to/files:/data/files andreimarcu/linx-server -config /data/linx-server.conf -``` - -Пример с docker-compose - -```yaml -version: "3.7" - -# linx - self-hosting picture and data - linx: - container_name: linx-server - image: andreimarcu/linx-server - command: -config /data/linx-server.conf - volumes: - - $DOCKER_APP/linx/files:/data/files - - $DOCKER_APP/linx/meta:/data/meta - - $DOCKER_APP/linx/linx-server.conf:/data/linx-server.conf - networks: - - direct_net - environment: - PUID: $PUID - PGID: $PGID - ports: - - "8090:8080" - restart: unless-stopped -``` - -В идеале вы должны использовать обратный прокси-сервер, такой как nginx, traefik или caddy, для обработки сертификатов TLS. - -## Автор - -Andrei Marcu, [https://andreim.net/](https://andreim.net/) \ No newline at end of file diff --git a/docs/docker/nextcloud/cron.md b/docs/docker/nextcloud/cron.md new file mode 100755 index 0000000..2fa225e --- /dev/null +++ b/docs/docker/nextcloud/cron.md @@ -0,0 +1,10 @@ +# Настройка cron + +запустить редактор crontab +``` +crontab -e +``` +В редакторе добавляем: +``` +*/5 * * * * docker exec -u www-data nextcloud php cron.php +``` diff --git a/docs/docker/nextcloud/index.md b/docs/docker/nextcloud/index.md index c5e6922..e5191e5 100755 --- a/docs/docker/nextcloud/index.md +++ b/docs/docker/nextcloud/index.md @@ -1,4 +1,9 @@ -```env +# Nextcloud - свое облако для файлов + + +Запуск через docker-compose. Для начала создадим файл `.env` со следующим содержанием: + +```env title=".env" PUID= PGID= TZ= @@ -8,23 +13,11 @@ NEXTCLOUD_DOMAIN_NAME= REDIS_PASSWORD= ``` -docker-compose.yml +Далее создаем файл `docker-compose.yml` -```yaml +```yaml title="docker-compose.yml" version: "3.7" -secrets: - nextcloud_admin_password: - file: $SECRETSDIR/nextcloud_admin_password # put admin password in this file - nextcloud_admin_user: - file: $SECRETSDIR/nextcloud_admin_user # put admin username in this file - nextcloud_postgres_db: - file: $SECRETSDIR/nextcloud_postgres_db # put postgresql db name in this file - nextcloud_postgres_password: - file: $SECRETSDIR/nextcloud_postgres_password # put postgresql password in this file - nextcloud_postgres_user: - file: $SECRETSDIR/nextcloud_postgres_user # put postgresql username in this file - services: # Nextcloud Docker Application nextcloud: @@ -52,12 +45,6 @@ services: - NEXTCLOUD_TRUSTED_DOMAIN=$NEXTCLOUD_DOMAIN_NAME - TRUSTED_PROXIES=172.18.0.253 - OVERWRITEPROTOCOL=https - secrets: - - nextcloud_admin_password - - nextcloud_admin_user - - nextcloud_postgres_db - - nextcloud_postgres_password - - nextcloud_postgres_user labels: - com.centurylinklabs.watchtower.enable=False ``` \ No newline at end of file diff --git a/docs/docker/nextcloud/php-imagick.md b/docs/docker/nextcloud/php-imagick.md index 80cf9f5..c60be27 100755 --- a/docs/docker/nextcloud/php-imagick.md +++ b/docs/docker/nextcloud/php-imagick.md @@ -2,7 +2,7 @@ При использовании официального Nextcloud образа Docker вы увидите сообщение вроде: -![](../images/docker/nextcloud-docker-php-imagick.png) +![](../../images/docker/nextcloud-docker-php-imagick.png) Чтобы исправить это предупреждение в docker нужно установить пакет `libmagickcore-6.q16-6-extra`: diff --git a/docs/docker/nextcloud/problems-after-moving-data-folder.md b/docs/docker/nextcloud/problems-after-moving-data-folder.md new file mode 100755 index 0000000..6944ec4 --- /dev/null +++ b/docs/docker/nextcloud/problems-after-moving-data-folder.md @@ -0,0 +1,15 @@ +# Проблемы с доступом после перемещения `data` + +Иногда так бывает, что при переносе `data` папки используя [инструкцию](https://help.nextcloud.com/t/howto-change-move-data-directory-after-installation/17170) возникают проблемы. +Одна из них - не возможность удалять или добавлять новые файлы. +При выполнении команды `sudo -u www-data php -f /var/www/html/nextcloud/console.php files:scan --all`, будет выходить ошибка: `Exception: Environment not properly prepared.` + +## Решение + +Ошибка идет из-за того, что неверно выданы права на папку `data`. Права должны быть у юзера `www-data`: + +```bash +chown -R www-data:www-data /path/to/nextcloud +find /path/to/nextcloud/ -type d -exec chmod 750 {} \; +find /path/to/nextcloud/ -type f -exec chmod 640 {} \; +``` \ No newline at end of file diff --git a/docs/docker/pictshare.md b/docs/docker/pictshare.md new file mode 100755 index 0000000..2c325b9 --- /dev/null +++ b/docs/docker/pictshare.md @@ -0,0 +1,33 @@ +# Pictshare - свой хостинг для картинок, гифок, видяшек и документов. + +[![](https://img.shields.io/docker/pulls/hascheksolutions/pictshare?color=brightgreen)](https://hub.docker.com/r/hascheksolutions/pictshare) +[![Apache License](https://img.shields.io/badge/license-Apache-brightgreen.svg?style=flat)](https://github.com/HaschekSolutions/pictshare/blob/master/LICENSE) +[![](https://img.shields.io/github/stars/HaschekSolutions/pictshare.svg?label=Stars&style=social)](https://github.com/HaschekSolutions/pictshare) + +Таких сервисов много, это лиш один из них. Позводяет захостить у себя сервис по хранению и выдаче различных медия. Аля imgur. + +## Запуск + +Запуск простой, через docker: + +```bash +docker run -d -p 8080:80 --name=pictshare ghcr.io/hascheksolutions/pictshare +``` + +После, открываем [http://localhost:8080/](http://localhost:8080) в браузере и пользуемся. + +## Возможности + +- Selfhostable +- [Простая загрузка через API](https://github.com/HaschekSolutions/pictshare/blob/master/rtfm/API.md) +- Без БД +- [Масштабируемость](https://github.com/HaschekSolutions/pictshare/blob/master/rtfm/SCALING.md) +- Фильтры для картинок +- GIF в MP4 преобразование +- JPG, PNG в WEBP преобразование +- MP4 смена размера +- PictShare удаляет все данные exif, чтобы вы могли загружать фотографии со своего телефона, при этом все теги GPS и информация о модели камеры будут удалены. +- Изменяйте и изменяйте размеры своих изображений и видео, просто отредактировав URL-адрес. +- Дубликаты не занимают места. Если один и тот же файл загружается дважды, вторая загрузка будет связана с первой. +- [Много возможностей для настройки](https://github.com/HaschekSolutions/pictshare/blob/master/rtfm/CONFIG.md) +- Полный контроль над вашими данными. Удаление изображений с индивидуальными и глобальными кодами удаления \ No newline at end of file diff --git a/docs/docker/plex-mm.md b/docs/docker/plex-mm.md index a09fd2e..21fe6de 100755 --- a/docs/docker/plex-mm.md +++ b/docs/docker/plex-mm.md @@ -1,186 +1,136 @@ -Plex Meta Managers +# Plex Meta Managers -.env файл -``` -PUID=1000 -PGID=1000 -TZ="Asia/Yekaterinburg" -DOCKER_APP="/opt/appdata" -``` +[![GitHub release (latest by date)](https://img.shields.io/github/v/release/meisnate12/Plex-Meta-Manager?style=plastic)](https://github.com/meisnate12/Plex-Meta-Manager/releases) +[![Docker Image Version (latest semver)](https://img.shields.io/docker/v/meisnate12/plex-meta-manager?label=docker&sort=semver&style=plastic)](https://hub.docker.com/r/meisnate12/plex-meta-manager) +[![Docker Pulls](https://img.shields.io/docker/pulls/meisnate12/plex-meta-manager?style=plastic)](https://hub.docker.com/r/meisnate12/plex-meta-manager) +[![Reddit](https://img.shields.io/reddit/subreddit-subscribers/PlexMetaManager?color=%2300bc8c&label=r%2FPlexMetaManager&style=plastic)](https://www.reddit.com/r/PlexMetaManager/) -``` yaml - plexmm-films: +```yaml title="docker-compose.yml" +version: "3.7" +services: + plexmm: image: lscr.io/linuxserver/plex-meta-manager:latest - container_name: plexmm-films + container_name: plexmm restart: "no" - networks: - - direct_net security_opt: - no-new-privileges:true environment: - TZ: $TZ - PUID: $PUID - PGID: $PGID + TZ: "Asia/Yekaterinburg" + PUID: 1000 + PGID: 1000 PMM_CONFIG: /config/config.yml #optional PMM_TIME: 03:00 #optional PMM_RUN: "True" #optional PMM_TEST: "False" #optional PMM_NO_MISSING: "False" #optional volumes: - - $DOCKER_APP/plexmm/films:/config + - ./plexmm:/config ``` -конфиг файл в папке $DOCKER_APP/plexmm/films +## Конфиги под разные типы библиотек -config.yml +=== "Фильмы" -```yaml -## This file is a template remove the .template to use the file + ```yaml title="./plexmm/config.yml" + ## This file is a template remove the .template to use the file + libraries: + Фильмы: + metadata_path: + - file: config/Movies/Genre.yml + - file: config/Movies/Studio.yml + - folder: config/Movies/Collections + - folder: config/Movies/Metadata/Collections + - pmm: basic + - pmm: imdb + - pmm: franchise + overlay_path: + - remove_overlays: false + - reapply_overlay: false + - pmm: resolution + - pmm: commonsense + - pmm: ratings + template_variables: + rating1: critic + rating1_image: imdb + rating2: audience + rating2_image: trakt + rating3: user + rating3_image: tmdb + horizontal_position: right + operations: + mass_critic_rating_update: imdb + mass_audience_rating_update: mdb_trakt + mass_user_rating_update: tmdb + ``` -libraries: - Фильмы: - metadata_path: - - file: config/Movies/Genre.yml - - file: config/Movies/Studio.yml - - folder: config/Movies/Collections - - folder: config/Movies/Metadata/Collections - - pmm: basic - - pmm: imdb - - pmm: franchise - overlay_path: - - remove_overlays: false - - reapply_overlay: false - - pmm: resolution - - pmm: commonsense - - pmm: ratings - template_variables: - rating1: critic - rating1_image: imdb - rating2: audience - rating2_image: trakt - rating3: user - rating3_image: tmdb - horizontal_position: right - operations: - mass_critic_rating_update: imdb - mass_audience_rating_update: mdb_trakt - mass_user_rating_update: tmdb -playlist_files: -- pmm: playlist -settings: - cache: true - cache_expiration: 60 - asset_directory: config/assets - asset_folders: true - asset_depth: 0 - create_asset_folders: false - prioritize_assets: false - dimensional_asset_rename: false - download_url_assets: false - show_missing_season_assets: false - show_missing_episode_assets: false - show_asset_not_needed: true - sync_mode: append - minimum_items: 1 - default_collection_order: - delete_below_minimum: true - delete_not_scheduled: false - run_again_delay: 2 - missing_only_released: false - only_filter_missing: false - show_unmanaged: true - show_filtered: false - show_options: false - show_missing: true - show_missing_assets: true - save_report: false - tvdb_language: rus - ignore_ids: - ignore_imdb_ids: - item_refresh_delay: 0 - playlist_sync_to_user: all - playlist_report: false - verify_ssl: true - custom_repo: - check_nightly: false - show_unconfigured: true - playlist_exclude_users: -webhooks: # Can be individually specified per library as well - error: - version: - run_start: - run_end: - changes: - delete: -plex: # Can be individually specified per library as well; REQUIRED for the script to run - url: http:// - token: token - timeout: 60 - clean_bundles: false - empty_trash: false - optimize: false -tmdb: # REQUIRED for the script to run - apikey: api - language: ru - cache_expiration: 60 - region: -trakt: - client_id: id - client_secret: secret - pin: pin - authorization: - # everything below is autofilled by the script - access_token: - token_type: - expires_in: - refresh_token: - scope: public - created_at: -``` +=== "Сериалы" + + ```yaml title="./plexmm/config.yml" + libraries: + Сериалы: + metadata_path: + - file: config/TV-Shows/Collections.yml + - folder: config/TV-Shows/Metadata/Anime + - folder: config/TV-Shows/Metadata/TV + - pmm: basic + - pmm: imdb + overlay_path: + - remove_overlays: false + - reapply_overlay: false + - pmm: ratings + template_variables: + rating1: critic + rating1_image: imdb + rating2: audience + rating2_image: trakt + rating3: user + rating3_image: tmdb + horizontal_position: right + - pmm: resolution + template_variables: + overlay_level: season + - pmm: resolution + template_variables: + overlay_level: episode + - pmm: ratings # 3, 4 + template_variables: + rating1: audience + rating1_image: trakt + horizontal_position: right # the set of ratings is on the right of the poster + overlay_level: episode + - pmm: status + template_variables: + font_size: 75 + #font: config/fonts/Juventus-Fans-Bold.ttf + back_color: "#262626" # darker + back_width: 1920 + back_height: 125 + horizontal_align: center + vertical_align: top + vertical_offset: 0 + ``` + +## Улучшения -Для сериалов: +### Статус сериала (TMDB) + +В конфиге добавить этот текст для библиотеки, в которой нужно отображение: ```yaml - Сериалы: - metadata_path: - - file: config/TV-Shows/Collections.yml - - folder: config/TV-Shows/Metadata/Anime - - folder: config/TV-Shows/Metadata/TV - - pmm: basic - - pmm: imdb - overlay_path: - - remove_overlays: false - - reapply_overlay: false - - pmm: ratings - template_variables: - rating1: critic - rating1_image: imdb - rating2: audience - rating2_image: trakt - rating3: user - rating3_image: tmdb - horizontal_position: right - - pmm: resolution - template_variables: - overlay_level: season - - pmm: resolution - template_variables: - overlay_level: episode - - pmm: ratings # 3, 4 - template_variables: - rating1: audience - rating1_image: trakt - horizontal_position: right # the set of ratings is on the right of the poster - overlay_level: episode - pmm: status template_variables: + text_canceled: Отменен + text_airing: Идет сезон + text_returning: Продолжится + text_ended: Завершен font_size: 75 - #font: config/fonts/Juventus-Fans-Bold.ttf - back_color: "#262626" # darker + #back_color: "#262626" # darker back_width: 1920 back_height: 125 horizontal_align: center vertical_align: top vertical_offset: 0 -``` \ No newline at end of file +``` + +[Документация](https://metamanager.wiki/en/latest/defaults/overlays/mediastinger.html) \ No newline at end of file diff --git a/docs/docker/plextraktsync.md b/docs/docker/plextraktsync.md index 3dada01..bea8260 100755 --- a/docs/docker/plextraktsync.md +++ b/docs/docker/plextraktsync.md @@ -1,3 +1,5 @@ +[![](https://img.shields.io/github/stars/Taxel/PlexTraktSync?label=%E2%AD%90%20Stars)](https://github.com/Taxel/PlexTraktSync) + Сервис добавляет двустороннюю сихронизацию между trakt.tv и Plex Media Server. Для этого требуется учетная запись trakt.tv, но без премиум-подписки Plex или VIP-подписки Trakt, в отличие от приложения Plex, предоставляемого Trakt. ## Функции @@ -66,6 +68,4 @@ servers: token: token urls: - http://plex:32400 -``` - -[Github](https://github.com/Taxel/PlexTraktSync){ .md-button .md-button--primary } \ No newline at end of file +``` \ No newline at end of file diff --git a/docs/docker/traefik-forward-auth.md b/docs/docker/traefik-forward-auth.md index 8a8071c..36d261b 100755 --- a/docs/docker/traefik-forward-auth.md +++ b/docs/docker/traefik-forward-auth.md @@ -1,4 +1,8 @@ -[github.com](https://github.com/thomseddon/traefik-forward-auth) +# Traefik Forward Auth + +[![](https://img.shields.io/github/stars/thomseddon/traefik-forward-auth?label=%E2%AD%90%20Stars)](https://github.com/thomseddon/traefik-forward-auth) +[![](https://img.shields.io/github/v/release/thomseddon/traefik-forward-auth?label=%F0%9F%9A%80%20Release)](https://github.com/thomseddon/traefik-forward-auth/releases/latest) +![Docker Pulls](https://img.shields.io/docker/pulls/thomseddon/traefik-forward-auth.svg) - Бесшовно накладывает любой http-сервис на одну конечную точку (см.: `url-path`в [разделе «Конфигурация](https://github.com/thomseddon/traefik-forward-auth#configuration) ») . - Поддерживает несколько поставщиков, включая Google и OpenID Connect (поддерживается Azure, Github, Salesforce и т. д.). diff --git a/docs/docker/traefik/errorpages.md b/docs/docker/traefik/errorpages.md new file mode 100755 index 0000000..e4e4285 --- /dev/null +++ b/docs/docker/traefik/errorpages.md @@ -0,0 +1,201 @@ +# Настройка страницы в Traefik 2 + +## Промежуточное программное обеспечение ErrorPage + +Traefik поставляется с готовым [middlewares error](https://docs.traefik.io/middlewares/errorpages/). Его обязанность — возвращать пользовательскую страницу вместо страницы по умолчанию в соответствии с настроенными диапазонами кодов состояния HTTP. Вот пример: + + +```yaml +# Dynamic Custom Error Page for 4XX/5XX Status Code +labels: + - "traefik.http.middlewares.test-errorpage.errors.status=400-599" + - "traefik.http.middlewares.test-errorpage.errors.service=serviceError" + - "traefik.http.middlewares.test-errorpage.errors.query=/{status}.html" +``` + +Как указано в официальной документации: + +- **status** — это статус HTTP, который вызывает страницу с ошибкой (в этом примере каждый код между 400 и 599). +- `serviceError` - это **служба** , которая будет обслуживать новую запрошенную страницу ошибки +- **запрос** — URL-адрес страницы ошибки (размещенной на сервисе), где `{status}` в запросе будет заменен полученный код состояния. + +Стоит отметить, что страницы ошибок не размещаются непосредственно на Traefik, необходимо размещать их на своем веб-сервере. На следующем рисунке из документации Traefik показан пример этого сценария. + +![](../../images/docker/traefik-errorpages.jpg) + +## Рабочий сценарий +Промежуточное ПО ErrorPage - это то что нам нужно. Но как мы можем использовать его для обслуживания наших страниц и ошибок в целом? + +Представьте, что вы хотите обслуживать глобальную страницу для URL-адресов, которые указывают на ваш хост, но не привязаны к определенным службам. Например, если у вас есть запись DNS, которая соответствует таким запросам, как: + +``` +*.example.com +``` + +URL-адреса, такие как: + +``` +http://bla-bla.example.com +``` + +попадут в ваш Traefik, но ни один маршрутизатор не справится с ними. В таких случаях мы хотим, чтобы Traefik вернул нашу классную кастомную страницу ошибки. + +Как мы можем это настроить? Начнем с этого чертежа: + + + +**В двух словах:** мы определяем правило **универсального маршрутизатора с низким приоритетом** , которое сработает только в том случае, если другие маршрутизаторы для определенных служб не могут обработать запрос. Затем такой неизвестный запрос обрабатывается **промежуточным программным обеспечением ErrorPage**, которое сообщает **Nginx** об обслуживании страницы с ошибкой. + + +## Практика +Пришло время практики. Будем считать, что у нас же есть работающий Traefik 2, запущенный через `docker-compose`. Добавим в нему `nginx` с нашими страничками ошибок и тестовый контейнер `whoami` для проверки работы: + +??? note + ```yaml title="docker-compose.yml" + version: "3.9" + + networks: + traefik_net: + external: true + + services: + + # Traefik 2 - Reverse Proxy + traefik: + container_name: traefik + image: traefik:2.10 + restart: always + security_opt: + - no-new-privileges:true + command: # CLI arguments + - --api.dashboard=true + - --providers.docker.network=traefik_net + - --entrypoints.webinsecure.address=:80 + - --providers.docker.exposedByDefault=false + - --providers.docker=true + networks: + - traefik_net + ports: + - "80:80" + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + labels: + traefik.enable: true + ## Dashboard + traefik.http.routers.traefik.entrypoints: http + traefik.http.routers.traefik.rule: host('traefik.localhost') + traefik.http.routers.traefik.service: api@internal + + nginx-error: + image: nginx:latest + volumes: + - ./error-pages:/usr/share/nginx/error-pages + - ./nginx/default.conf:/etc/nginx/conf.d/default.conf + network: + - traefik_net + labels: + traefik.enable: true + traefik.http.routers.error-rtr.rule: HostRegexp(`{host:.+}`) + traefik.http.routers.error-rtr.priority: 1 + traefik.http.routers.error-rtr.entrypoints: webinsecure + traefik.http.routers.error-rtr.middlewares: error-pages-middleware + + traefik.http.middlewares.error-pages-middleware.errors.status: 400-599 + traefik.http.middlewares.error-pages-middleware.errors.service: error-pages-service + traefik.http.middlewares.error-pages-middleware.errors.query: /{status}.html + + traefik.http.services.error-pages-svc.loadbalancer.server.port: 80 + + test-app: + image: containous/whoami + networks: + - traefik_net + labels: + traefik.enable: true + traefik.http.routers.error-rtr.rule: host('test.localhost') + traefik.http.routers.error-rtr.entrypoints: webinsecure + traefik.http.services.error-pages-svc.loadbalancer.server.port: 80 + ``` + +В приведенном compose файле содержится все, что нам нужно для отображения кастомных страниц ошибок. Страницы ошибок находятся в службе Docker `nginx-error`, которая управляет контейнером **Nginx**, предназначенным для страниц ошибок. + +Все начинается с `error-router`: + +```yaml +labels: + traefik.http.routers.error-rtr.rule: HostRegexp(`{host:.+}`) + traefik.http.routers.error-rtr.priority: 1 + traefik.http.routers.error-rtr.entrypoints: webinsecure +``` +Ему присвоен [приоритет](https://doc.traefik.io/traefik/routing/routers/#priority) `1`, поэтому он перехватывает все запросы , если они не были обработаны ранее другими (т.е. `traefik.http.routers.traefik` и `traefik.http.routers.my-test-app`). + +Затем прикрепляем к нему `error-pages-middleware`: + +```yaml +labels: + traefik.http.routers.error-rtr.middlewares: error-pages-middleware +``` + +это фактическое промежуточное программное обеспечение ErrorPage Traefik: + +```yaml +labels: + traefik.http.middlewares.error-pages-middleware.errors.status: 400-599 + traefik.http.middlewares.error-pages-middleware.errors.service: error-pages-svc + traefik.http.middlewares.error-pages-middleware.errors.query: /{status}.html + + traefik.http.services.error-pages-service.loadbalancer.server.port: 80 +``` + +Такое промежуточное программное обеспечение запросит `error-pages-svc` обслуживание наших кастомных страниц ошибок. + +Пара слов о **папках Nginx**. В этом примере мы связываем монтирование (но мы также можем скопировать файлы в контейнер) двух основных томов: +```yaml +volumes: + - ./error-pages:/usr/share/nginx/error-pages + - ./nginx/default.conf:/etc/nginx/conf.d/default.conf +``` +В этой папке ``./error-pages` мы храним файлы страниц ошибок, такие как наши собственные файлы `404.html`. Кроме того, мы настраиваем конфигурацию этого экземпляра Nginx следующим образом `default.conf`: + +```nginx +server { + listen 80; + server_name localhost; + + error_page 404 /404.html; + # other error pages here: + # error_page 403 /403.html; + + location / { + root /usr/share/nginx/error-pages; + internal; + } +} +``` +## Проверка работы + +Пришло время запустить наши контейнеры и проверить их работу. + +Если вы запросите: `http://traefik.localhost/` или `http://test.localhost/` вы получите панель управления Traefik и выходные данные whoami соответственно. + +Если вы попытаетесь получить: `http://bla-bla.localhost`, Traefik вернет именно вашу дружественную страницу с ошибкой 404 (т. е. `404.html`). + +!!! tip + Обратите внимание: если вы заинтересованы в **управлении ошибками таким же образом и для определенных служб, вы можете использовать промежуточное программное обеспечение ErrorPage**. + Например, вы можете подключить промежуточное программное обеспечение к маршрутизатору панели управления Traefik следующим образом: + ```yaml + labels: + # Dashboard + traefik.http.routers.traefik.rule: Host(`traefik.localhost`) + traefik.http.routers.traefik.service: api@internal + traefik.http.routers.traefik.entrypoints: webinsecure + # Attach the error middleware also to this router + traefik.http.routers.traefik.middlewares: error-pages-middleware + ``` + Теперь, если вы запросите: `http://traefik.localhost/bla-bla`, вы снова получите настроенную страницу ошибки 404. + +--- + +[Middlewares ErrorPage](https://docs.traefik.io/middlewares/errorpages/) +Интересная ветка на эту тему на форуме сообщества Containous. +[Статические страницы ошибок сервера в образе Docker](https://github.com/tarampampam/error-pages) (также готовы для Traefik) \ No newline at end of file diff --git a/docs/docker/traefik/tcp-routes.md b/docs/docker/traefik/tcp-routes.md new file mode 100755 index 0000000..9fed8a7 --- /dev/null +++ b/docs/docker/traefik/tcp-routes.md @@ -0,0 +1,33 @@ +# TCP Routes + +Начинав со скромной установки домашней лабы на базе самосборного ПК на 4 диска и хостинга на нем Plex, я за 5 лет начучился поднимать с запускать различные полезные вещи для дома. +Сейчас у меня есть несколько доменов с различным сервисами. Где то год назад я понял, что надо разделать сервисы по типу. Но была проблема - поскульку сервисы находятся на 3 и более разных хостах докера, то прописывать правила в Traefik нужно было на главном. Это было как бы норм, но не совсем удобно. +Поэтому я начал изучать, как можно было бы вынести конфиги и сам Траефик на разные хосты. И решение это TCP Route. + +По сути, это TCP-маршрутизатор делающий следующее: если есть запросы, адресованные домен2 или его субдоменам, то запрос передается второму экземпляру Traefik, который прослушивает адрес 192.168.100.254:443 на другом моем хосте. + +![TCP Route](../../images/docker/traefik-tcp-routes.png) + +Для того, чтобы реализовать это, нужно создать файл yml в папке rules с определением route TCP: + +```yml title="tcp-domain2.yml" +tcp: + routers: + tcp-domain2-rtr: + entryPoints: + - "https" + rule: "HostSNIRegexp(`domain2.com`, `{subdomain:[a-z]+}.domain2.com`)" + service: tcp-domain2-svc + tls: + passthrough: true + services: + tcp-domain2-svc: + loadBalancer: + servers: + - address: "192.168.100.254:443" +``` + +Правда все равно есть большое НО: + +!!! warning + Если основной экземпляр Traefik не работает, то и TCP Route работать тоже не будет! \ No newline at end of file diff --git a/docs/docker/wikijs.md b/docs/docker/wikijs.md new file mode 100755 index 0000000..24a3c0e --- /dev/null +++ b/docs/docker/wikijs.md @@ -0,0 +1,26 @@ +# WikiJS + +```yaml +version: "3.7" + +networks: + traefik_net: + external: true + +services: + wikijs: + image: lscr.io/linuxserver/wikijs + container_name: wikijs + environment: + PUID: $PUID + PGID: $PGID + TZ: $TZ + networks: + - traefik_net + volumes: + - $DOCKER_APP/wiki/config:/config + - $DOCKER_APP/wiki/data:/data + ports: + - 4000:3000 + restart: unless-stopped +``` \ No newline at end of file diff --git a/docs/blog/posts/ark-admins-command.md b/docs/games/ark/admin-commands.md similarity index 50% rename from docs/blog/posts/ark-admins-command.md rename to docs/games/ark/admin-commands.md index f893a8d..48294ee 100755 --- a/docs/blog/posts/ark-admins-command.md +++ b/docs/games/ark/admin-commands.md @@ -1,28 +1,26 @@ +# Настройка и использование консольных команд Админа в ARK: Survival Evolved -# Настройка и использование консольных команд Админа в Ark Survival Evolved +Как использовать администраторские команды консоли в **ARK: Survival Evolved**? Для этого потребуется открыть консоль, нажав кнопку **TAB**. +Некоторые из этих команд будут недоступны, пока вы не выполнили аутентификацию с помощью команды `enablecheats`. -Как использовать администраторские команды консоли в **Ark: Survival Evolved**? Для этого потребуется открыть консоль, нажав кнопку **TAB**. -Некоторые из этих команд будут недоступны, пока вы не выполнили аутентификацию с помощью команды **enablecheats**. - -Команды, отмеченные тегом _cheat_ должны указываться с префиксом **admincheat**. +Команды, отмеченные тегом `_cheat_` должны указываться с префиксом `admincheat`. ## Использование ### Первый способ 1. Выключаем сервер. -2. В конфиге сервера **GameUserSettings.ini** указываем пароль администратора переменной **ServerAdminPassword.** (Пример: _ServerAdminPassword password_). +2. В конфиге сервера `GameUserSettings.ini` указываем пароль администратора переменной `ServerAdminPassword`. (Пример: `ServerAdminPassword password`). 3. Включаем сервер. 4. Заходим в игру и на сервер, открываем консоль нажатием кнопки **TAB**. -5. Авторизируемся на сервере как администратор указывая команду: **enablecheats «AdminPassword».** (Пример: enablecheats password). +5. Авторизируемся на сервере как администратор указывая команду: `enablecheats AdminPassword`. (Пример: `enablecheats password`). ### Второй способ Добавляем игроков в белый список. 1. Выключаем сервер. -2. Создать файл **AllowedCheaterSteamIDs.txt** (_Путь: ShooterGame/Saved/AllowedCheaterSteamIDs.txt_). +2. Создать файл `AllowedCheaterSteamIDs.txt` (Путь: `ShooterGame/Saved/AllowedCheaterSteamIDs.txt`). 3. Указать Steam ID игрока, если администраторов несколько, Steam ID нужно указывать с новой строчки. 4. Включаем сервер. -5. Авторизация на сервере командой **enablecheats «AdminPassword»** не требуется. -6. Открываем графическую админку командой **ShowMyAdminManager**. \ No newline at end of file +5. Открываем графическую админку командой `ShowMyAdminManager`. \ No newline at end of file diff --git a/docs/games/factorio/index.md b/docs/games/factorio/index.md new file mode 100755 index 0000000..30ab5d1 --- /dev/null +++ b/docs/games/factorio/index.md @@ -0,0 +1,22 @@ +# Factorio + +## Мирный режим + +Ввод команды, отключит ачивки + +``` +/c game.player.print(game.player.surface.peaceful_mode); +``` + +## Различные ссылки +[Хранилище чертежей](https://www.factorio.school/) + +[Моды для сервера](https://mods.factorio.com/) + +[Введение в поезда](https://forums.factorio.com/viewtopic.php?f=194&t=18621) + +[Балансировщики разгрузки1](https://forums.factorio.com/viewtopic.php?f=194&t=71921) и [Балансировщики разгрузки1](http://greenlightning.eu/games/factorio-train-balancer/) + +[Калькулятор производства](https://kirkmcdonald.github.io/calc.html) + +[Чертежи для BobS](https://pastebin.com/u/fed1s) \ No newline at end of file diff --git a/docs/games/payday2/hud.md b/docs/games/payday2/hud.md new file mode 100644 index 0000000..342c5c3 --- /dev/null +++ b/docs/games/payday2/hud.md @@ -0,0 +1,5 @@ +# VanillaHUD Plus + +https://gitlab.com/steam-test1/alternative-updates/-/wikis/VanillaHUD-Plus-Compatibility-Guide + +https://modworkshop.net/mod/25629 \ No newline at end of file diff --git a/docs/hass/automation/trigger/time.md b/docs/hass/automation/trigger/time.md new file mode 100755 index 0000000..c8040ca --- /dev/null +++ b/docs/hass/automation/trigger/time.md @@ -0,0 +1,133 @@ +# Time trigger + +`time` — это один из триггеров которые можно использовать в автоматизациях Home Assistant. + +С помощью этого триггера можно запустить автоматизацию в определенное время. Есть несколько вариантов как можно использовать триггер: + +- указать точное время +- использовать `input_datetime` +- использоваь сенсор в котором хранится время +- указать несколько разных объектов + +!!! note + + Важный момент — чтобы этот триггер правильно работал нужно чтобы в Home Assistant был указан правильный часовой пояс. + +Кроме триггера `time` еще есть триггер `time_pattern` с помощью которого можно настраивать регулярный запуск автоматизаций. + +## `time` - точное время + +!!! example + + ```yaml + automation: + - trigger: + platform: time + at: "07:00:00" + action: + service: system_log.write + data: + message: "время 07:00:00" + ``` + Эта автоматизация будет запускаться каждый день в 7 утра. Если сервер в момент запуска будет выключен, то запуска автоматизации не будет + +Значение `at` записывается в формате `ЧЧ:ММ:СС` (`ЧЧ` - час, `ММ` - минуты, `СС` - секунды, `:` - разделитель). + +Секунды или минуты, равные 00 можно не указывать. Запись `at: "01:58"` означает то же самое что и `at: "01:58:00"`. + +В поле `at` можно указать только время, там нельзя указать дату и время. Если написать `at: "2023-10-20 01:58:00"`, то проверка конфигурации Home Assistant пройдет успешно, но в логе будет ошибка + +Указание точного времени в автоматизации используется редко. Это не особо удобно. Чтобы поменять время запуска автоматизации нужно менять код и нажимать кнопку чтобы Home Assistant узнал про изменение. Более гибкие способы указания времени — это использование `input_datetime` или использование сенсора. + +## `input_datatime` + +!!! example "Пример автоматизации" + + ```yaml + automation: + - trigger: + platform: time + at: input_datetime.sample + action: + service: system_log.write + data: + message: time + + ``` + +Это автоматизация выполнится в момент времени который указан в `input_datetime.sample`. + +`input_datetime` может быть определен тремя разными способами: + +- только время +- только дата +- есть время и дата + +Вот пример описания `input_datetime` в котором есть время и дата: + +```yaml +input_datetime: + sample: + name: Sample + has_time: true + has_date: true +``` + +- в `input_datetime` есть только время - автоматизация будет запускаться каждый день в это время +- в `input_datetime` есть только дата - автоматизация запустися в `00:00:00` в эту дату +- в `input_datetime` есть время и дата - автоматизация запустится в указанную дату в указанное время + +## Сенсор + +В качестве значения `at` можно указать сенсор у которого `device_class timestamp`: + +```yaml +automation: + - trigger: + platform: time + at: sensor.phone_next_alarm + action: + service: system_log.write + data: + message: alarm +``` + +## Комбинирование разных объектов + +В значении `at` триггера `time` можно указать несколько разных объектов: + +```yaml +automation: + - trigger: + platform: time + at: + - "09:38:00" + - input_datetime.sample + - sensor.phone_next_alarm + action: + service: system_log.write + data: + message: time + +``` + +## Запуск раз в месяц + +Иногда надо запускать что-то раз в месяц в какое-то число. Это можно сделать с помощью триггера `time` и доп. условия `condition`: + +```yaml +automation: + - trigger: + platform: time + at: 21:40:00" + condition: + condition: template + value_template: > + {{ now().day == 20 }} + action: + service: system_log.write + data: + message: "Today is 20" +``` + +Запуск произойдет 20 числа в 21:40, при условии, что сервер работает в указанное время \ No newline at end of file diff --git a/docs/hass/device/xiaomi-airpurifier.md b/docs/hass/device/xiaomi-airpurifier.md new file mode 100755 index 0000000..70d24a4 --- /dev/null +++ b/docs/hass/device/xiaomi-airpurifier.md @@ -0,0 +1,3 @@ +# Xiaomi Mi Air Purifier & Xiaomi Mi Air Humidifier + +![GitHub stars](https://img.shields.io/github/stars/syssi/xiaomi_airpurifier) \ No newline at end of file diff --git a/docs/hass/hacs/stack-in-card.md b/docs/hass/hacs/stack-in-card.md new file mode 100755 index 0000000..644dda6 --- /dev/null +++ b/docs/hass/hacs/stack-in-card.md @@ -0,0 +1,8 @@ +# custom:stack-in-card + +```yaml +# тип + + + +``` \ No newline at end of file diff --git a/docs/hass/klimat.md b/docs/hass/klimat.md new file mode 100755 index 0000000..e69de29 diff --git a/docs/hass/package/budilnik.md b/docs/hass/package/budilnik.md new file mode 100755 index 0000000..315c6f9 --- /dev/null +++ b/docs/hass/package/budilnik.md @@ -0,0 +1,336 @@ +# Будильник для Home Assistant + +Представление карточки в Home Assistant: + +В карточке используется дополнительные компоненты. Ставятся при помощи HACS.: + +- [custom:stack-in-card](https://github.com/custom-cards/stack-in-card) +- [custom:button-card](https://github.com/custom-cards/button-card) + +## Карточка + +![](../../images/hass/card-budilnik-1.png) +![](../../images/hass/card-budilnik-2.png) + +??? example "Код карточки" + + ```yaml title="card-budilnik.yaml" + type: custom:stack-in-card + title: Будильник + cards: + - cards: + - entity: input_boolean.alarm_weekday + name: Будни + size: 30px + icon: mdi:alarm + tap_action: + action: toggle + type: custom:button-card + - entity: input_boolean.alarm_weekend + name: Выходные + icon: mdi:party-popper + size: 30px + tap_action: + action: toggle + type: custom:button-card + type: horizontal-stack + - type: conditional + conditions: + - entity: input_boolean.alarm_weekday + state: 'on' + card: + type: entities + entities: + - entity: input_datetime.alarm_weekday + name: По будням + - type: conditional + conditions: + - entity: input_boolean.alarm_weekend + state: 'on' + card: + type: entities + entities: + - entity: input_datetime.alarm_weekend + name: В выходные + ``` + +## Как это работает + +В указанное время срабатывает будильник. + +Начинает проигрываться мелодия. + +Если солнце уже встало, открываются шторы. Иначе включается мягкий тусклый свет. + +## Идеи на реализацию: + +- [ ] Добавить возможность отложить пробуждение, используя куб Aqare +- [ ] Выключение будильника, используя куб Aqare + +## Код будильника + +??? example + + ```yaml + #ДОБАВЛЯЕМ ЭЛЕМЕНТЫ ВВОД И УПРАВЛЕНИЯ + input_datetime: + alarm_weekday: + has_date: false + has_time: true + alarm_weekend: + has_date: false + has_time: true + + #ПЕРЕКЛЮЧАТЕЛИ + input_boolean: + alarm_weekday: + alarm_weekend: + + #СЕНСОРЫ ДЛЯ ПОДСЧЕТА ВРЕМЕНИ В ОТЛОЖЕННЫХ ФУНКЦИЯХ + sensor: + - platform: template + sensors: + input_alarm_weekday: + friendly_name: Будильник будни + value_template: "{{ (((state_attr('input_datetime.alarm_weekday' , 'timestamp')) - (5 * 60))|timestamp_custom('%H:%M', false)) }}" + + input_alarm_weekend: + friendly_name: Будильник выходные + value_template: "{{ (((state_attr('input_datetime.alarm_weekend' , 'timestamp')) - (5 * 60))|timestamp_custom('%H:%M', false)) }}" + + binary_sensor: + - platform: template + sensors: + alarm_weekday_start: + friendly_name: Будильник будни + value_template: "{{ states('sensor.time') == states('sensor.input_alarm_weekday_start') }}" + alarm_weekend_start: + friendly_name: Будильник выходные + value_template: "{{ states('sensor.time') == states('sensor.input_alarm_weekend_start') }}" + + automation: + # ВКЛЮЧЕНИЕ БУДИЛЬНИКА ПРИ ЗАПУСКЕ HA + - id: 'startup_on_alarm_clock' + alias: Включение будильника при запуске HA + trigger: + platform: homeassistant + event: start + condition: + condition: time + after: '09:00:00' + before: '00:00:00' + action: + - delay: 0:01 + + # ВКЛЮЧЕНИЕ КЛАВИШАМИ. ПРОСТО ЗВУКОВОЕ СООБЩЕНИЕ О ВКЛЮЧЕНИИ + - id: 'on_alarm_clock' + alias: "Включение будильника клавишей" + trigger: + platform: state + entity_id: + - input_boolean.alarm_weekday + - input_boolean.alarm_weekend + to: 'on' + action: + - service: script.yandex_tts_alarm_on + + # ВЫКЛЮЧЕНИЕ КЛАВИШАМИ. ПРОСТО ЗВУКОВОЕ СООБЩЕНИЕ О ВЫКЛЮЧЕНИИ + - id: 'off_alarm_clock' + alias: "Выключение будильника клавишей" + trigger: + platform: state + entity_id: + - input_boolean.alarm_1_weekday + - input_boolean.alarm_1_weekend + to: 'off' + action: + - service: script.yandex_tts_alarm_off + + # Запуск будильника по будням + - id: 'alarm_weekday' + alias: Wake me up (weekday) + trigger: + - platform: time_pattern + minutes: "/1" + seconds: 0 + condition: + - condition: state + entity_id: input_boolean.alarm_weekday + state: 'on' + - condition: time + weekday: + - mon + - tue + - wed + - thu + - fri + - condition: template + value_template: >- + {{ now().strftime("%H:%M") == states.sensor.input_alarm_weekday.state }} + - condition: state + entity_id: person.thest1tch + state: 'home' + action: + - data: {} + service: script.wakeup_sequence + + # Запуск будильника по выходным + - id: 'alarm_weekend' + alias: Wake me up (weekend) + trigger: + - platform: time_pattern + minutes: "/1" + seconds: 0 + condition: + - condition: state + entity_id: input_boolean.alarm_weekend + state: 'on' + - condition: time + weekday: + - sat + - sun + - condition: template + value_template: >- + {{ now().strftime("%H:%M") == states.sensor.input_alarm_weekend.state }} + - condition: state + entity_id: person.thest1tch + state: 'home' + action: + - data: {} + service: script.wakeup_sequence + + script: + # Включение люстры, если солнце еще не встало + wakeup_celib_start: + alias: wakeup_celib_start + sequence: + - condition: state + entity_id: sun.sun + state: below_horizon + for: + hours: 0 + minutes: 1 + seconds: 0 + - service: light.turn_on + data: + brightness: '3' + brightness_step: 2 + entity_id: + - light.yeelight_ceilb_0x17879e8e_nightlight + + # Открывание штор, если солнце уже встало + wakeup_cover_start: + alias: wakeup_cover_start + sequence: + - condition: state + entity_id: sun.sun + state: above_horizon + - service: cover.set_cover_position + data: + position: 10 + target: + entity_id: cover.yeelink_ctmt1_c8c9_curtain + - delay: 00:02:00 + - service: cover.set_cover_position + data: + position: 30 + target: + entity_id: cover.yeelink_ctmt1_c8c9_curtain + - delay: 00:02:00 + - service: cover.set_cover_position + data: + position: 50 + target: + entity_id: cover.yeelink_ctmt1_c8c9_curtain + - delay: 00:02:00 + - service: cover.set_cover_position + data: + position: 70 + target: + entity_id: cover.yeelink_ctmt1_c8c9_curtain + - delay: 00:02:00 + - service: cover.set_cover_position + data: + position: 100 + target: + entity_id: cover.yeelink_ctmt1_c8c9_curtain + + # Главный скрипт будильника + wakeup_sequence: + alias: wakeup_sequence + sequence: + - service: script.turn_on + target: + entity_id: script.wakeup_celib_start + - delay: 00:00:05 + - service: script.turn_on + target: + entity_id: script.wakeup_cover_start + - delay: 00:00:05 + - service: script.turn_on + target: + entity_id: script.yandex_tts_alarm_start + + # TTS YANDEX + yandex_tts_alarm_start: + alias: "YaStation Запуск будильника" + sequence: + - service: media_player.volume_set + data: + entity_id: + - media_player.yandex_station_m0017y300grsqb + volume_level: 0.1 + - delay: 00:00:01 + - service: yandex_station.send_command + data: + entity_id: media_player.yandex_station_m0017y300grsqb + command: sendText + text: Включи фоновую музыку + - delay: 00:01:00 + - service: media_player.volume_set + data: + entity_id: + - media_player.yandex_station_m0017y300grsqb + volume_level: 0.2 + - delay: 00:00:30 + - service: media_player.volume_set + data: + entity_id: + - media_player.yandex_station_m0017y300grsqb + volume_level: 0.3 + - delay: 00:00:30 + - service: media_player.volume_set + data: + entity_id: + - media_player.yandex_station_m0017y300grsqb + volume_level: 0.4 + + yandex_tts_alarm_on: + alias: "YaStation Включение будильника" + sequence: + - service: media_player.volume_set + data: + entity_id: + - media_player.yandex_station_m0017y300grsqb + volume_level: 0.4 + - delay: 00:00:01 + - service: media_player.play_media + entity_id: media_player.yandex_station_m0017y300grsqb + data: + media_content_id: Включаю будильник. + media_content_type: text + + yandex_tts_alarm_off: + alias: YaStation_Выключение будильника + sequence: + - service: media_player.volume_set + data: + entity_id: + - media_player.yandex_station + volume_level: 0.4 + - service: media_player.play_media + entity_id: media_player.yandex_station_m0017y300grsqb + data: + media_content_id: Будильник выключен. + media_content_type: text + ``` \ No newline at end of file diff --git a/docs/hass/package/index.md b/docs/hass/package/index.md new file mode 100755 index 0000000..927b1ca --- /dev/null +++ b/docs/hass/package/index.md @@ -0,0 +1,63 @@ +# Пакеты конфигурации + +С увеличением количества устройств в умном доме, возникает вопрос: как не потеряться в файле конфигурации? На помощь приходят **Packages (пакеты)**. Они позволяют организовывать и группировать компоненты ***Home Assistant*** в один или несколько файлов. + +## Первые шаги + +Для начала необходимо создать папку **packages** в корне директории, где храниться файл **configuration.yaml**! +Затем добавьте в **configuration.yaml** следующие строки, указанные ниже! (пример использования на картинке). + +```yaml +homeassistant: + packages: !include_dir_named packages +``` + +Готово! Вам осталось придумать, как вы назовёте папки и файлы в которых будут храниться *switch*, *light*, *sensor* и другие компоненты. + +К примеру, чтобы перенести все *switch* из **configuration.yaml** в отдельный файл, создайте в папке **packages** файл с названием - **названиеФайла.yaml** и поместите в него ваш код! + +## Стандартная структура файла + +Для использования компонента, укажите [название интеграции](https://www.home-assistant.io/components/) и поставьте двоеточие. После этого вы можете добавлять свои устройства! Также, можно кастомизировать устройства прямо в пакетах, пример ниже. + +```yaml +binary_sensor: + - platform: workday + name: tools_workday + country: 'RU' + - platform: rest + name: hall_doorbell + device_class: sound + resource: http://0.0.0.0/sec/?pt=10&cmd=get + scan_interval: 1 + +# Кастомизация устройств в пакетах (не обязательно) +homeassistant: + customize: + binary_sensor.tools_workday: + friendly_name: Рабочий день +``` + +Еще можно объединять **несколько компонентов** в один файл: + +```yaml +### Очиститель воздуха Philips ### +# Настройки интеграции +fan: + - platform: philips_airpurifier + host: !secret host_philips_airpurifier + +# Внешний вид +homeassistant: + customize: + sensor.philips_pre_filter: + friendly_name: 'Предв. фильтр' + +# Датчики +sensor: + - platform: template + sensors: + philips_pre_filter: + unit_of_measurement: 'ч' + value_template: "{{ state_attr('fan.philips_airpurifier', 'pre_filter') }}" +``` \ No newline at end of file diff --git a/docs/hass/zigbee2mqtt.md b/docs/hass/zigbee2mqtt.md new file mode 100755 index 0000000..fbdd5e5 --- /dev/null +++ b/docs/hass/zigbee2mqtt.md @@ -0,0 +1,58 @@ +# Zigbee2mqtt - установка и обновление в Home Assistant + +Чтоб установить актуальную версию, нам нужно зайти в магазин дополнений и добавить туда новую ссылку: `https://github.com/zigbee2mqtt/hassio-zigbee2mqtt` + +![](../images/hass/card-budilnik-1.png) + +После добавления этой ссылки в репозитории, необходимо перезапустить Home Assistant. + +После перезапуска, у нас появится новый аддон zigbee2mqtt, который можно установить. Перед установкой старый можно не удалять, достаточно его выключить. + +!!! warning + + Если есть какие-то аддоны или надстройки, что используют стик Zigbee, их надо удалять. + Именно удалить, а не отключить. + Иначе работать Zigbee2mqtt не будет. + + +## Sonoff ZB Dongle-E - USB стик + +[Sonoff zb dongle-E](http://alii.pub/6hb9ju) + +USB Stick Sonoff ZB Dongle-E – это новый координатор Zigbee от компании SOnoff. С недавних пор они начали делать координаторы для Home Assistant и версия “E” это уже вторая версия данного свистка. + +Данный Zigbee-стик у меня не заработал сам. Пришлось дописывать в конфигурации аддона Zigbee2mqtt. + +На момент подключения этого стика у меня стояла версия zigbee2mqtt аддона 1.33.1-1 + +Для настройки нужно узнать адрес стика sonoff zb dongle-E: + +1. Для этого вставим его в USB порт +2. Перейдем в **Настройки** +3. Далее в **Система** +4. Выбираем **Оборудование** +5. Нажимает на **3 точки** в правом верхнем углу экрана +6. Выбираем **Все оборудование**. +7. Находим через поиск наш стик - можно ввести в поиск sonoff, покажется адрес + +![](../images/hass/zigbee2mqtt-2.png) + +Копируем строчу начиная от **DEVLINKS:**. Строчка должна выглядеть примерно так: + +``` +/dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_40fdc5301b3bec119340a4957a0af07f-if00-port0 +``` + +Далее заходим непосредственно в аддон. Настройки->Дополнения->Zigbee2mqtt + +Далее в самом аддоне Zigbee2mqtt переходим во вкладку "Конфигурация". + +Там в блоке Serial прописываем следующее: + +``` +port: >- + /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_40fdc5301b3bec119340a4957a0af07f-if00-port0 +# adapter: ezsp # должно работать и без этого. Если нет - раскоментить +``` + +После этого запускаем аддон и все должно начать работать. \ No newline at end of file diff --git a/docs/images/docker/traefik-errorpages.jpg b/docs/images/docker/traefik-errorpages.jpg new file mode 100755 index 0000000..c355d04 Binary files /dev/null and b/docs/images/docker/traefik-errorpages.jpg differ diff --git a/docs/images/docker/traefik-tcp-routes.png b/docs/images/docker/traefik-tcp-routes.png new file mode 100755 index 0000000..87875d4 Binary files /dev/null and b/docs/images/docker/traefik-tcp-routes.png differ diff --git a/docs/images/hass/card-budilnik-1.png b/docs/images/hass/card-budilnik-1.png new file mode 100755 index 0000000..a9c6610 Binary files /dev/null and b/docs/images/hass/card-budilnik-1.png differ diff --git a/docs/images/hass/card-budilnik-2.png b/docs/images/hass/card-budilnik-2.png new file mode 100755 index 0000000..d629368 Binary files /dev/null and b/docs/images/hass/card-budilnik-2.png differ diff --git a/docs/images/hass/zigbee2mqtt-1.png b/docs/images/hass/zigbee2mqtt-1.png new file mode 100755 index 0000000..6f62e77 Binary files /dev/null and b/docs/images/hass/zigbee2mqtt-1.png differ diff --git a/docs/images/hass/zigbee2mqtt-2.png b/docs/images/hass/zigbee2mqtt-2.png new file mode 100755 index 0000000..4f97b96 Binary files /dev/null and b/docs/images/hass/zigbee2mqtt-2.png differ diff --git a/docs/images/network/mikrotik-hnat_1.png b/docs/images/network/mikrotik-hnat_1.png new file mode 100755 index 0000000..9bcc9f7 Binary files /dev/null and b/docs/images/network/mikrotik-hnat_1.png differ diff --git a/docs/images/network/mikrotik-hnat_2.png b/docs/images/network/mikrotik-hnat_2.png new file mode 100755 index 0000000..6290e9c Binary files /dev/null and b/docs/images/network/mikrotik-hnat_2.png differ diff --git a/docs/images/network/mikrotik-hnat_3.png b/docs/images/network/mikrotik-hnat_3.png new file mode 100755 index 0000000..8b8129b Binary files /dev/null and b/docs/images/network/mikrotik-hnat_3.png differ diff --git a/docs/images/network/mikrotik-upnp_1.png b/docs/images/network/mikrotik-upnp_1.png new file mode 100755 index 0000000..f4b1276 Binary files /dev/null and b/docs/images/network/mikrotik-upnp_1.png differ diff --git a/docs/images/network/mikrotik-upnp_2.png b/docs/images/network/mikrotik-upnp_2.png new file mode 100755 index 0000000..395e86a Binary files /dev/null and b/docs/images/network/mikrotik-upnp_2.png differ diff --git a/docs/images/other/tsd/flashing-ce5_1.png b/docs/images/other/tsd/flashing-ce5_1.png new file mode 100755 index 0000000..1ae0669 Binary files /dev/null and b/docs/images/other/tsd/flashing-ce5_1.png differ diff --git a/docs/images/other/tsd/flashing-ce5_2.png b/docs/images/other/tsd/flashing-ce5_2.png new file mode 100755 index 0000000..8f2bedf Binary files /dev/null and b/docs/images/other/tsd/flashing-ce5_2.png differ diff --git a/docs/images/other/tsd/flashing-ce5_3.jpg b/docs/images/other/tsd/flashing-ce5_3.jpg new file mode 100755 index 0000000..abeda21 Binary files /dev/null and b/docs/images/other/tsd/flashing-ce5_3.jpg differ diff --git a/docs/images/other/tsd/flashing-ce5_4.png b/docs/images/other/tsd/flashing-ce5_4.png new file mode 100755 index 0000000..55fa615 Binary files /dev/null and b/docs/images/other/tsd/flashing-ce5_4.png differ diff --git a/docs/images/other/tsd/flashing-ce5_5.png b/docs/images/other/tsd/flashing-ce5_5.png new file mode 100755 index 0000000..0e20279 Binary files /dev/null and b/docs/images/other/tsd/flashing-ce5_5.png differ diff --git a/docs/images/other/tsd/flashing-ce5_6.png b/docs/images/other/tsd/flashing-ce5_6.png new file mode 100755 index 0000000..3029ffe Binary files /dev/null and b/docs/images/other/tsd/flashing-ce5_6.png differ diff --git a/docs/images/other/tsd/flashing-ce5_7.png b/docs/images/other/tsd/flashing-ce5_7.png new file mode 100755 index 0000000..6c9ebff Binary files /dev/null and b/docs/images/other/tsd/flashing-ce5_7.png differ diff --git a/docs/images/other/tsd/flashing-ce5_8.png b/docs/images/other/tsd/flashing-ce5_8.png new file mode 100755 index 0000000..03b4732 Binary files /dev/null and b/docs/images/other/tsd/flashing-ce5_8.png differ diff --git a/docs/images/other/tsd/flashing-m61_1.png b/docs/images/other/tsd/flashing-m61_1.png new file mode 100755 index 0000000..4330514 Binary files /dev/null and b/docs/images/other/tsd/flashing-m61_1.png differ diff --git a/docs/images/other/tsd/repair_01.png b/docs/images/other/tsd/repair_01.png new file mode 100755 index 0000000..ec55c9d Binary files /dev/null and b/docs/images/other/tsd/repair_01.png differ diff --git a/docs/images/other/tsd/repair_02.png b/docs/images/other/tsd/repair_02.png new file mode 100755 index 0000000..24e30aa Binary files /dev/null and b/docs/images/other/tsd/repair_02.png differ diff --git a/docs/images/other/tsd/repair_03.png b/docs/images/other/tsd/repair_03.png new file mode 100755 index 0000000..b418535 Binary files /dev/null and b/docs/images/other/tsd/repair_03.png differ diff --git a/docs/images/other/tsd/repair_04.png b/docs/images/other/tsd/repair_04.png new file mode 100755 index 0000000..ac09f8e Binary files /dev/null and b/docs/images/other/tsd/repair_04.png differ diff --git a/docs/images/other/tsd/repair_05.png b/docs/images/other/tsd/repair_05.png new file mode 100755 index 0000000..1cdd948 Binary files /dev/null and b/docs/images/other/tsd/repair_05.png differ diff --git a/docs/images/other/tsd/repair_06.png b/docs/images/other/tsd/repair_06.png new file mode 100755 index 0000000..d21e8b4 Binary files /dev/null and b/docs/images/other/tsd/repair_06.png differ diff --git a/docs/images/other/tsd/repair_07.png b/docs/images/other/tsd/repair_07.png new file mode 100755 index 0000000..3a11999 Binary files /dev/null and b/docs/images/other/tsd/repair_07.png differ diff --git a/docs/images/other/tsd/repair_08.png b/docs/images/other/tsd/repair_08.png new file mode 100755 index 0000000..bd3edb9 Binary files /dev/null and b/docs/images/other/tsd/repair_08.png differ diff --git a/docs/images/software/win-desk-kms1.jpg b/docs/images/software/win-desk-kms1.jpg new file mode 100755 index 0000000..28c454b Binary files /dev/null and b/docs/images/software/win-desk-kms1.jpg differ diff --git a/docs/images/software/win-desk-kms2.png b/docs/images/software/win-desk-kms2.png new file mode 100755 index 0000000..67fac3b Binary files /dev/null and b/docs/images/software/win-desk-kms2.png differ diff --git a/docs/images/software/win-desk-kms3.png b/docs/images/software/win-desk-kms3.png new file mode 100755 index 0000000..4d51154 Binary files /dev/null and b/docs/images/software/win-desk-kms3.png differ diff --git a/docs/images/software/win-desk-kms4.png b/docs/images/software/win-desk-kms4.png new file mode 100755 index 0000000..d4f2657 Binary files /dev/null and b/docs/images/software/win-desk-kms4.png differ diff --git a/docs/images/software/win-desk-sendto1.jpg b/docs/images/software/win-desk-sendto1.jpg new file mode 100755 index 0000000..96795d9 Binary files /dev/null and b/docs/images/software/win-desk-sendto1.jpg differ diff --git a/docs/images/software/win-serv-wimesd_1.png b/docs/images/software/win-serv-wimesd_1.png new file mode 100755 index 0000000..7abb25f Binary files /dev/null and b/docs/images/software/win-serv-wimesd_1.png differ diff --git a/docs/images/software/win-serv-wimesd_2.png b/docs/images/software/win-serv-wimesd_2.png new file mode 100755 index 0000000..6da2b7f Binary files /dev/null and b/docs/images/software/win-serv-wimesd_2.png differ diff --git a/docs/images/software/win-serv-wimesd_3.png b/docs/images/software/win-serv-wimesd_3.png new file mode 100755 index 0000000..190a3b2 Binary files /dev/null and b/docs/images/software/win-serv-wimesd_3.png differ diff --git a/docs/images/software/win-serv-wimesd_4.png b/docs/images/software/win-serv-wimesd_4.png new file mode 100755 index 0000000..229da3b Binary files /dev/null and b/docs/images/software/win-serv-wimesd_4.png differ diff --git a/docs/images/software/win-serv-wimesd_5.png b/docs/images/software/win-serv-wimesd_5.png new file mode 100755 index 0000000..3e931d4 Binary files /dev/null and b/docs/images/software/win-serv-wimesd_5.png differ diff --git a/docs/images/software/win-serv-wimesd_6.png b/docs/images/software/win-serv-wimesd_6.png new file mode 100755 index 0000000..f258756 Binary files /dev/null and b/docs/images/software/win-serv-wimesd_6.png differ diff --git a/docs/images/ubuntu/add-disk.png b/docs/images/ubuntu/add-disk.png new file mode 100755 index 0000000..3828c8d Binary files /dev/null and b/docs/images/ubuntu/add-disk.png differ diff --git a/docs/images/ubuntu/ncdu.png b/docs/images/ubuntu/ncdu.png new file mode 100755 index 0000000..a9a28ff Binary files /dev/null and b/docs/images/ubuntu/ncdu.png differ diff --git a/docs/index.md b/docs/index.md index a5e5dd5..fe0864f 100755 --- a/docs/index.md +++ b/docs/index.md @@ -1,12 +1,19 @@ # Приветствую на моем сайт -Данный ресурс создан для структурирования моих знаний в различных областях IT. +Данный ресурс создан для структурирования моих знаний в различных областях IT. + +Много из того, что здесь, было откопано на просторах интернета и долгое время лежало в закладках. И когда уже количество таких закладок перевалило за тысячи, я решил их как-то систематизировать в виде вики. Прошло мого времени, прежде чем я пришел к такому виду. До этого были Mediawiki, Dokuwiki, WikiJS, Wordpress. -Сейчас MkDocs, но я изучаю еще Docusaurus +Сейчас MkDocs. + +Надеюсь, что страницы будут полезны. + +## **Контакты** -Надеюсь, что статьи будут полезны. +E-mail: [admin@st1t.ru](mailto:admin@st1t.ru) -Для связи: [TG](https://t.me/thest1tch) +Telegram: [https://t.me/thest1tch](https://t.me/thest1tch) +Мой часовой пояс: MSK +2 или UTC +5 diff --git a/docs/network/mikrotik/4g.md b/docs/network/mikrotik/4g.md new file mode 100755 index 0000000..f6d08d2 --- /dev/null +++ b/docs/network/mikrotik/4g.md @@ -0,0 +1,77 @@ +# Настройка работы с 4G модемом оператора + +Открыть окно терминала в **winbox** + +```plaintext +/system resource usb print +/system serial-terminal usb1 channel=1 +``` + +Соединяемся на COM-порт модема и вводим там команду. Она нужна для включения локального эха, чтобы вы видели что вы набираете в терминале. + +```plaintext +ATE1 +``` +Далее вводим команду, для того чтобы модем не сыпал в порт *RSSI (Received Signal Strength Indication)* и прочим. + +```plaintext +AT^CURC=0 +``` + +И наконец вводим команду смены композиции модема. ТЕ режим «без переключения». Т.е. в данном режиме первичная композиция модема (initial mode) отключена, т.е. задана как `FF - Dummy` (отсутствие переключения), а вторичная композиция (normal mode) задана как `10,12,16,A2`: +- 10 - модем +- 12 - PC UI +- 16 - RNDIS (у нас его нет) +- A2 - TF Card Reader. + +```plaintext +AT^SETPORT="FF;10,12,16,A2" +``` + +После чего вынимаем модем из Mikrotik и вставляем его по новой. Модем будет находиться уже в рабочей композиции, поэтому соединение `ppp-out1`, когда он зарегистрируется в сети оператора должно подняться у вас в Mikrotik автоматически + +Далее включаем 4G модем и отключаем режим CD-Rom: + +```plaintext +AT^SETPORT="A1;10,12,13"OK +``` + +После чего выходим, нажав `Ctrl-A` и `Q` +``` +Ctrl-A + +[Q - quit connection] [B - send break] [A - send Ctrl-A prefix] [R - autoconfigure rate] +``` + +Теперь можете активировать интерфейс и работать с ним + +## Настройка Mikrotik на 4G Megafon + +Подключаем ПК к третьему порту **Mikrotik**(вообще можно использовать любой, кроме первого), переворачиваем устройство и видим на наклейке со штрих-кодом диапазон mac адресов, последний относится к пятому порту, вводим его в окно подключения **winbox**, либо используем как аргумент mactelnet. Пользователь admin, пароль отсутствует. Так же можно подучиться через поиск neighbors в окне подключения **winbox** + +Появится предложение: сохранить базовую конфигурацию, либо обнулить устройство. Выбираем `Remove Configuration`. Устройство перезагрузится. + +Далее проверяем что версия routerboard последняя, для этого идем в system → routerboard. Скачать последнюю версию можно по ссылке: [https://mikrotik.com/download](https://mikrotik.com/download) + +Закачиваем последнюю версию на роутер, для этого открываем files и перетаскиваем сам файл прошивки + +Далее идем в system → routerboard, нажимаем upgrade. Соглашаемся с обновлением. идем в system-reboot + +После перезагрузки проверяем версию системы + +Теперь, заливаем [конфигурашку](https://cloud.thest1tch.ru/s/tXTqRCwnGP9trRZ). В окне files выделяем скопированный файл конфигурации и жмем restore. Вводим пароль от нашего роутера + +Готово + +--- + +Список используемых ресурсов: + +- список команд AT [https://3ginfo.ru/page53.html](https://3ginfo.ru/page53.html) и [http://4pda.ru/forum/lofiversion/index.php?t582284.html](https://4pda.ru/forum/lofiversion/index.php?t582284.html) +- перепрошивка модема [https://mr-allen.com/mikrotik/e3372s-lte-modem](https://mr-allen.com/mikrotik/e3372s-lte-modem) и [https://tugibaev.ru/2015/03/megafon-m150-2-mikrotik/](https://tugibaev.ru/2015/03/megafon-m150-2-mikrotik/) +- [https://buywifi.ru/blog/mikrotik/nastroyka-mikrotik-dlya-raboty-s-3g-lte-modemom/](https://buywifi.ru/blog/mikrotik/nastroyka-mikrotik-dlya-raboty-s-3g-lte-modemom/) +- [http://valec.ru/?p=316](http://valec.ru/?p=316) +- [https://dev.turn-guild.ru/?p=251](https://dev.turn-guild.ru/?p=251) +- [https://habr.com/ru/post/188424/](https://habr.com/ru/post/188424/) +- [https://trustoff.ru/page/45/vvodim-at-komandy-v-modem/](https://trustoff.ru/page/45/vvodim-at-komandy-v-modem/) +- [https://www.technotrade.com.ua/Articles/mikrotik\_3g-modem\_setup.php](https://www.technotrade.com.ua/Articles/mikrotik_3g-modem_setup.php) \ No newline at end of file diff --git a/docs/network/mikrotik/chr.md b/docs/network/mikrotik/chr.md new file mode 100755 index 0000000..4ed1cf8 --- /dev/null +++ b/docs/network/mikrotik/chr.md @@ -0,0 +1,188 @@ +# Cloud Hosted Router + +## Установка IP адреса + +=== "У MikroTik CHR статический IP" + + ``` + /ip address add interface=ether1 address=10.103.0.111 netmask=255.255.255.0 + /ip route add gateway=10.103.0.254 dst-address=0.0.0.0/0 distance=1 + ``` + +=== "У MikroTik CHR автоматический IP(dhcp)" + + ``` + /ip dhcp-client add disabled=no interface=ether1 + ``` + +## Настройка NTP + +``` +/system ntp client +set enabled=yes +/system ntp client servers +add address=193.171.23.163 +add address=85.114.26.194 +``` + +## Настройка Firewall + +=== "Filter" + + ``` + /ip firewall filter + add action=accept chain=input dst-port=22024,29514 in-interface=ether1 \ + protocol=tcp src-address-list=Admin_IP + add action=accept chain=input comment="VPN Wireguard" dst-port=34567 \ + in-interface=ether1 protocol=udp + add action=accept chain=input dst-port=34568 in-interface=ether1 protocol=udp \ + src-address=5.189.70.251 + add action=accept chain=input dst-port=34569 in-interface=ether1 protocol=udp + add action=accept chain=input comment=l2tp port=1701,500,4500 protocol=udp \ + src-address=95.59.244.153 + add action=accept chain=input protocol=ipsec-esp + add action=accept chain=input comment=Socks5 dst-port=24444 \ + in-interface-list=VPN protocol=tcp + add action=drop chain=input dst-port=24444 in-interface-list=!VPN protocol=\ + tcp + add action=accept chain=input comment="Web Proxy" dst-port=25555 \ + in-interface-list=VPN log=yes log-prefix=webproxy protocol=tcp + add action=drop chain=input connection-state="" dst-port=8080 \ + in-interface-list=!VPN port="" protocol=tcp src-port="" + add action=drop chain=input connection-state="" dst-port=25555 \ + in-interface-list=!VPN port="" protocol=tcp src-port="" + add action=return chain=detect-ddos comment="Anti DDos" dst-limit=\ + 32,32,src-and-dst-addresses/10s + add action=add-dst-to-address-list address-list=ddos-target \ + address-list-timeout=10m chain=detect-ddos + add action=add-src-to-address-list address-list=ddos-attackers \ + address-list-timeout=10m chain=detect-ddos + add action=return chain=detect-ddos dst-limit=32,32,src-and-dst-addresses/10s \ + protocol=tcp tcp-flags=syn,ack + add action=fasttrack-connection chain=forward comment=" fasttrack" \ + connection-state=established,related hw-offload=yes + add action=accept chain=input comment="\D0\E0\E7\F0\E5\F8\E0\E5\EC \F3\F1\F2\ + \E0\ED\EE\E2\EB\E5\ED\ED\FB\E5 \E8 \F1\E2\FF\E7\E0\ED\ED\FB\E5 \E2\F5\EE\ + \E4\F9\E8\E5 \F1\EE\E5\E4\E8\ED\E5\ED\E8\FF" connection-state=\ + established,related,untracked + add action=accept chain=forward connection-state=\ + established,related,untracked + add action=drop chain=input comment="Drop invalid" connection-state=invalid \ + log-prefix=invalid + add action=drop chain=forward connection-state=invalid log-prefix=invalid + add action=drop chain=input connection-state="" dst-port=53 \ + in-interface-list=WAN port="" protocol=udp src-port="" + add action=drop chain=input comment=NTP connection-state=new dst-port=123 \ + in-interface-list=WAN log-prefix=" " protocol=tcp + add action=drop chain=input connection-state=new dst-port=123 \ + in-interface-list=WAN log-prefix=" " protocol=udp + add action=drop chain=input comment="Drop SSH brutforce" dst-port=22-23 \ + protocol=tcp + add action=accept chain=input comment="defconf: accept ICMP after RAW" \ + protocol=icmp + add action=accept chain=input comment="\F0\E0\E7\F0\E5\F8\E0\E5\EC \EF\EE\E4\ + \EA\EB\FE\F7\E5\ED\E8\FF \E8\E7 \ED\E0\F8\E5\E9 \EB\EE\EA \F1\E5\F2\E8" \ + in-interface=!ether1 src-address=192.168.3.0/24 + add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface-list=WAN + add action=drop chain=forward comment="defconf: drop bad forward IPs" \ + dst-address-list=no_forward_ipv4 + add action=drop chain=forward comment="defconf: drop bad forward IPs" \ + src-address-list=no_forward_ipv4 + add action=drop chain=input comment="defconf: drop all not coming from LAN" \ + in-interface-list=!VPN log-prefix=drop + ``` + +=== "NAT" + ``` + /ip firewall nat + add action=masquerade chain=srcnat + add action=masquerade chain=srcnat out-interface=ether1 src-address=\ + 192.168.3.1 + ``` + +=== "RAW" + ``` + /ip firewall raw + add action=accept chain=prerouting comment=\ + "defconf: enable for transparent firewall" disabled=yes + add action=accept chain=prerouting comment="defconf: accept DHCP discover" \ + dst-address=255.255.255.255 dst-port=67 in-interface-list=LAN protocol=\ + udp src-address=0.0.0.0 src-port=68 + add action=drop chain=prerouting comment="defconf: drop bogon IP's" \ + src-address-list=bad_ipv4 + add action=drop chain=prerouting comment="defconf: drop bogon IP's" disabled=\ + yes dst-address-list=bad_ipv4 log=yes log-prefix=132 + add action=drop chain=prerouting comment="defconf: drop bogon IP's" \ + src-address-list=bad_src_ipv4 + add action=drop chain=prerouting comment="defconf: drop bogon IP's" disabled=\ + yes dst-address-list=bad_dst_ipv4 log=yes + add action=drop chain=prerouting comment="defconf: drop non global from WAN" \ + in-interface=ether1 src-address-list=not_global_ipv4 + add action=drop chain=prerouting comment=\ + "defconf: drop forward to local lan from WAN" dst-address=192.168.1.0/24 \ + in-interface-list=WAN + add action=drop chain=prerouting comment=\ + "defconf: drop local if not from default IP range" in-interface-list=LAN \ + log=yes src-address=!192.168.3.0/24 + add action=drop chain=prerouting comment="defconf: drop bad UDP" log-prefix=\ + 123 port=0 protocol=udp + add action=jump chain=prerouting comment="defconf: jump to ICMP chain" \ + jump-target=icmp4 protocol=icmp + add action=jump chain=prerouting comment="defconf: jump to TCP chain" \ + jump-target=bad_tcp protocol=tcp + add action=accept chain=prerouting comment=\ + "defconf: accept everything else from LAN" in-interface-list=VPN + add action=accept chain=prerouting comment=\ + "defconf: accept everything else from WAN" in-interface-list=WAN + add action=drop chain=bad_tcp comment="defconf: TCP flag filter" protocol=tcp \ + tcp-flags=!fin,!syn,!rst,!ack + add action=drop chain=bad_tcp comment=defconf protocol=tcp tcp-flags=fin,syn + add action=drop chain=bad_tcp comment=defconf protocol=tcp tcp-flags=fin,rst + add action=drop chain=bad_tcp comment=defconf protocol=tcp tcp-flags=fin,!ack + add action=drop chain=bad_tcp comment=defconf protocol=tcp tcp-flags=fin,urg + add action=drop chain=bad_tcp comment=defconf protocol=tcp tcp-flags=syn,rst + add action=drop chain=bad_tcp comment=defconf protocol=tcp tcp-flags=rst,urg + add action=drop chain=bad_tcp comment="defconf: TCP port 0 drop" port=0 \ + protocol=tcp + ``` + +=== "Address List" + + ``` + /ip firewall address-list + add address=192.168.1.2-192.168.88.254 list=allowed_to_router + add address=0.0.0.0/8 comment="defconf: RFC6890" list=no_forward_ipv4 + add address=169.254.0.0/16 comment="defconf: RFC6890" list=no_forward_ipv4 + add address=224.0.0.0/4 comment="defconf: multicast" list=no_forward_ipv4 + add address=255.255.255.255 comment="defconf: RFC6890" list=no_forward_ipv4 + add address=127.0.0.0/8 comment="defconf: RFC6890" list=bad_ipv4 + add address=192.0.0.0/24 comment="defconf: RFC6890" list=bad_ipv4 + add address=192.0.2.0/24 comment="defconf: RFC6890 documentation" list=\ + bad_ipv4 + add address=198.51.100.0/24 comment="defconf: RFC6890 documentation" list=\ + bad_ipv4 + add address=203.0.113.0/24 comment="defconf: RFC6890 documentation" list=\ + bad_ipv4 + add address=240.0.0.0/4 comment="defconf: RFC6890 reserved" list=bad_ipv4 + add address=0.0.0.0/8 comment="defconf: RFC6890" list=not_global_ipv4 + add address=10.0.0.0/8 comment="defconf: RFC6890" list=not_global_ipv4 + add address=100.64.0.0/10 comment="defconf: RFC6890" list=not_global_ipv4 + add address=169.254.0.0/16 comment="defconf: RFC6890" list=not_global_ipv4 + add address=172.16.0.0/12 comment="defconf: RFC6890" list=not_global_ipv4 + add address=192.0.0.0/29 comment="defconf: RFC6890" list=not_global_ipv4 + add address=192.168.0.0/16 comment="defconf: RFC6890" list=not_global_ipv4 + add address=198.18.0.0/15 comment="defconf: RFC6890 benchmark" list=\ + not_global_ipv4 + add address=255.255.255.255 comment="defconf: RFC6890" list=not_global_ipv4 + add address=224.0.0.0/4 comment="defconf: multicast" list=bad_src_ipv4 + add address=255.255.255.255 comment="defconf: RFC6890" list=bad_src_ipv4 + add address=0.0.0.0/8 comment="defconf: RFC6890" list=bad_dst_ipv4 + add address=224.0.0.0/4 comment="defconf: RFC6890" list=bad_dst_ipv4 + add list=ddos-attackers + add list=ddos-target + add address=5.189.70.251 list=Admin_IP + add address=10.0.10.2 list=Admin_IP + add address=95.59.244.153 list=Admin_IP + ``` \ No newline at end of file diff --git a/docs/network/mikrotik/dhcp.md b/docs/network/mikrotik/dhcp.md new file mode 100755 index 0000000..14bc279 --- /dev/null +++ b/docs/network/mikrotik/dhcp.md @@ -0,0 +1,92 @@ +# DHCP + +## DHCP Option + +Это может понадобиться, когда необходимо, чтобы один из компьютеров в локальной сети получил нестандартный адрес DNS-Сервера, шлюза, NTP-Сервера и.т.д.. Или например, когда требуется для определенной сети установить нестандартную DHCP-опцию. + +[Список RFC DHCP Options](https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml) + +## Создадим DHCP опцию для DNS-Сервера. + +```plaintext +/ip dhcp-server option +add code=6 name=AD_DC value="'192.168.5.10'" +``` + +Выведем активные подключения + +```plaintext +/ip dhcp-server lease print +``` + +Установим dhcp опцию для конкретного хоста + +```plaintext +/ip dhcp-server lease +set numbers=0 dhcp-option=AD_DC +``` + +## Настройка DNS-суффикса + +Клиенты Windows поддерживают только доменное имя, в то время как Linux/Mac поддерживает только функцию поиска домена. + +Windows, установка dhcp-опции для конкретной сети + +```plaintext +/ip dhcp-server network print +/ip dhcp-server network +set 0 domain=local.net +``` + +Linux | Windows, установка dhcp-опции для конкретного хоста + +```plaintext +/ip dhcp-server option +add code=119 name=Domain_Search value="'local.net'" | Linux +add code=15 name=Domain_Name value="'local.net'" | Windows +/ip dhcp-server lease print +/ip dhcp-server lease +set numbers=0 dhcp-option=Domain_Search +``` + +## Настройка выдачи статических маршрутов + +[IP Address to HEX](https://ncalculators.com/digital-computation/ip-address-hex-decimal-binary.htm) + +[Конвертор чисел HEX/BIN/DEC](https://lin.in.ua/tools/numconv.html) + +DHCP Classless Route с Option 249 и Option 121. + +## Option 249 + +**Дано:** + +- MASK = 24 = 0x18 +- DEST = 192.168.5.0 = C0A80500 +- GW = 192.168.6.1 = C0A80601 + +**Пример:** + +- `0x[MASK][DEST][GW]` + +**Итог:** + +- `0x18C0A80500C0A80601` + +##  Option 121 + +( `0.0.0.0/0 [00] gw 192.168.6.1 [C0A80601]`) - необходимо добавить 00C0A80601 + +Должно получиться: + +  `0x18C0A80500C0A8060100C0A80601` + + CLI: + +```plaintext +/ip dhcp-server option add name=opt_249 code=249 value=0x18C0A80500C0A80601 +/ip dhcp-server option add name=opt_121 code=121 value=0x18C0A80500C0A8060100C0A80601 +/ip dhcp-server option sets add name=sets_249+121 options=opt_249,opt_121 +/ip dhcp-server network print +/ip dhcp-server network set dhcp-option-set=sets_249+121 numbers=0 +``` \ No newline at end of file diff --git a/docs/network/mikrotik/hairpin-nat.md b/docs/network/mikrotik/hairpin-nat.md new file mode 100755 index 0000000..8072580 --- /dev/null +++ b/docs/network/mikrotik/hairpin-nat.md @@ -0,0 +1,72 @@ +# Hairpin Nat + +Допустим нужно прокинуть 80 и 443 порт + +`192.168.100.0/24` - наша подсеть +`WAN_IP` - внешний IP-адрес +`192.168.100.5` - сервер, куда делаем проброс +``` +/ip firewall nat +add action=dst-nat chain=dstnat dst-address=WAN_IP dst-port=80 protocol=tcp to-addresses=192.168.100.5 +add action=masquerade chain=srcnat dst-address=192.168.100.5 dst-port=80 protocol=tcp src-address=192.168.100.0/24 +add action=dst-nat chain=dstnat dst-address=WAN_IP dst-port=443 protocol=tcp to-addresses=192.168.100.5 +add action=masquerade chain=srcnat dst-address=192.168.100.5 dst-port=443 protocol=tcp src-address=192.168.100.0/24 +``` + +## Подробности +Конфигурация нашей сети: + +- Вы имеете IP адрес `WAN_IP` на интерфейсе WAN вашего маршрутизатора +- Вы имеете IP адрес `192.168.100.1/24` на интерфейсе LAN вашего маршрутизатора. +- Вы имеете www-сервер с адресом `192.168.100.5` в LAN сегменте. +- Адрес вашего компьютера находится в диапазоне адресов LAN. Для примера пусть это будет `192.168.100.15` + +![](../../images/network/mikrotik-hnat_1.png) + +Чтобы опубликовать web-сервер на внешнем ресурсе, создается правило dst-nat: + +``` +/ip firewall nat add action=dst-nat chain=dstnat dst-address=WAN_IP dst-port=80 protocol=tcp to-addresses=192.168.100.5 +``` +**in-interface** не указан потому, что правило должно срабатывать при обращении на порт 80 адреса `WAN_IP` с любого интерфейса + +Вы это делаете и.. И у вас все замечательно работает снаружи сети (при обращении из Интернет), но обращение с вашего компьютера по адресу http://WAN_IP говорит «Нет ответа от сервера». Для того, чтобы понять, что же происходит, рисуем схему прохождения и преобразования пакета: +![](../../images/network/mikrotik-hnat_2.png) + +Теперь распишем что происходит на каждом этапе. +1. Компьютер с адреса `192.168.100.15` пытается установить соединение с адресом `WAN_IP` по `80 порту` и отправляет пакет на маршрутизатор. +1. На маршрутизаторе срабатывает правило `dst-nat`, в результате чего адрес назначения пакета меняется на `192.168.100.5`, и пакет отправляется на www-сервер `192.168.100.5`. +1. Узел `192.168.100.5` получив пакет с адресом источника `192.168.100.15`, определяет, что они оба находятся в одной локальной сети и отвечает ему напрямую, минуя маршрутизатор. + +**Проблема** +Компьютер, отправив пакет на адрес WAN_IP, вдруг получает ответ с адреса 192.168.100.5. Естественно этот пакет он игнорирует и соединение не устанавливается. + +**Решение** +Чтобы решить эту проблему, необходимо, чтобы www-сервер получил пакет у которого адрес источника будет равен адресу маршрутизатора. Добавляем к нашей конфигурации правило, которое заменит адрес отправителя, адресом интерфейса маршрутизатора и получаем следующую конфигурацию: + +``` +/ip firewall nat +add action=dst-nat chain=dstnat dst-address=1.1.1.1 dst-port=80 protocol=tcp to-addresses=192.168.0.10 +add action=masquerade chain=srcnat dst-address=192.168.0.10 dst-port=80 protocol=tcp src-address=192.168.0.0/24 +``` +Теперь у нас из конфигурация работает правильно. Схема для понимания: +![](../../images/network/mikrotik-hnat_3.png) + +**Работа схемы** +1. Компьютер с адреса `192.168.100.15` пытается установить соединение с адресом WAN_IP по 80 порту и отправляет пакет на маршрутизатор. +1. На маршрутизаторе срабатывает правило `dst-nat`, в результате чего адрес назначения пакета меняется на `192.168.100.5` и правило `src-nat`, где адрес источника пакета меняется на адрес интерфейса маршрутизатора (`192.168.100.1`). После чего пакет отправляется на www-сервер `192.168.100.5`. +1. Узел `192.168.100.5` получив пакет с адресом источника `192.168.100.1` (адрес маршрутизатора), определяет, что они оба находятся в одной локальной сети и отвечает ему. В результате чего пакет попадает на маршрутизатор +1. Connection Tracker маршрутизатора получив такой пакет выполняет обратное преобразование адресов. Компьютер получает ожидаемый ответ с адреса `WAN_IP` + +Вот такая схема трансляции адресов и является Hairpin NAT. + +Нужно отметить что у схемы есть недостаток. Заключается он в том, что публикуемый сервер будет получать запросы от хостов локальной сети с адреса маршрутизатора. Что не всегда хорошо. Например, если Вы так опубликуете прозрачный proxy-сервер, вряд ли у вас получится собрать нормальную статистику. + +Альтернативой такой схемы могут служить. + +Вынос публикуемых, или вообще всех серверов в отдельную подсеть. +Использование так называемого **split-dns**. Когда компьютер находясь снаружи сети на запрос www.mydomain.com получит адрес `WAN_IP`, а находясь внутри сети на этот же запрос получит адрес `192.168.100.5`. + +--- +[Использованы материалы сайта](https://housecomputer.ru/devices/switch/mikrotik/Setting_up_NAT_-_hairpin/Setting_up_NAT_-_hairpin.html){ .md-button .md-button--primary } + diff --git a/docs/network/mikrotik/index.md b/docs/network/mikrotik/index.md new file mode 100755 index 0000000..8e653dc --- /dev/null +++ b/docs/network/mikrotik/index.md @@ -0,0 +1,21 @@ +# Mikrotik + +## куча ссылок для микротика + +[Большое собрание скриптов и различных полезных инструментов для Микротик](https://buananetpbun.github.io/) + +[Прямая ссылка на готовые скрипты](https://buananetpbun.github.io/mikrotik/) + +[QUEUES TREE](https://g-support.ru/articles/mikrotik_nastroyka_queues_tree.html) и [еще про QoS](https://g-support.ru/articles/mikrotik_nastroyka_queues_tree_chast_vtoraya.html) + +[Закрытие портов](https://g-support.ru/articles/zakryvaem_porty_na_mikrotik.html) + +[Проверка на взлом](https://g-support.ru/articles/zashchita_mikrotik_ot_vzloma.html) + +[Базовый VPN](https://g-support.ru/articles/obedinenie_dvukh_ofisov_po_vpn_na_mikrotik.html) + +[Capsman](https://g-support.ru/articles/nastroyka_capsman_mikrotik.html) + +[NAT](https://g-support.ru/articles/probros_portov_mikrotik.html) + +[Отправка уведомлений из Mikrotik RouterOS прямо на мобильный при помощи Telegram](https://hd.zp.ua/otpravka-uvedomlenij-iz-mikrotik-routeros-pryamo-na-mobilnyj-pri-pomoshhi-telegram/) \ No newline at end of file diff --git a/docs/network/mikrotik/split-dns.md b/docs/network/mikrotik/split-dns.md new file mode 100755 index 0000000..7fd51e9 --- /dev/null +++ b/docs/network/mikrotik/split-dns.md @@ -0,0 +1,46 @@ +# Domain Overrides (Split-DNS) + +Представим себе ваш MikroTik выступает в роли маршрутизатора удалённого филиала. На нём поднимается VPN до центрального филиала прописываются маршруты и прочее. У вас доменная авторизация все компьютеры в домене, естественно хорошей практикой на компьютерах прописать DNS сервера который обслуживают Active Directory службы. Но в таком случае если туннель по какой-то причине упадёт ваш филиал останется без интернета, а ведь интернета может не быть в центральном филиале. Да перестанут работать различные шары и прочее, конечно для этих целей существует как минимум RODC, но навсегда есть возможность установить подобный сервис в филиале ввиду множества различных проблем. + +На практике: + +- MikroTik: 192.168.5.1 - DNS-Сервер для локальной сети; +- Samba AD DC: 192.168.5.10 - DNS-Сервер обслуживающий зону local.net. + +Необходимо, чтобы все запросы, связанные с зоной local.net, обслуживались DNS-Сервером 192.168.5.10. + +В pfSense такая возможность присутствует из коробки и делается немного проще чем в MikroTik. + +!!! note + Начиная с версии **RouterOS v6.47**, появилась возможность пересылки запросов с помощью встроенного DNS-сервера. Раньше это делалось костылями через L7. + +## DNS Settings + +Для поддержки Domain Overrides необходимо, чтобы на DNS-Сервере была включена опция **Allow Remote Requests**. + +```plaintext +/ip dns +set allow-remote-requests=yes +``` + +## Настройка Firewall + +Разрешаем работу DNS-Сервера на всех интерфейсах, кроме WAN. + +```plaintext +/ip firewall filter +add action=accept chain=input protocol=udp dst-port=53 in-interface=!wan +add action=drop chain=input in-interface=wan +``` + +## Domain Overrides + +Делается это в меню DNS через управление статическими записями. Обязательным условием для работы является отключенный DoH. + +```plaintext +/ip dns static add forward-to=192.168.5.10 regexp="((^)|(\.))local.net$" type=FWD +- .*\\.local\\.net +- ^.+(local).net +- ^.+local.net +- ".*local\\.net" +``` \ No newline at end of file diff --git a/docs/network/mikrotik/unblock-site.md b/docs/network/mikrotik/unblock-site.md new file mode 100755 index 0000000..39fa598 --- /dev/null +++ b/docs/network/mikrotik/unblock-site.md @@ -0,0 +1,69 @@ +# Обход блокировок + +Расписывать как поднять и настроить VPN через Wireguard или OpenVPN не буду. В сети достаточно инструкций. Чуть ниже слева есть еще одна от меня. + +Варианта как обходить блокировки 2: + +- через таблицу маршрутизации, куда вносим ресурсы руками или скриптами +- через BGP с одного "неизвестного" сайта + +## Вариант 1: таблица маршрутизации + +Статья о маркировке трафика, для отправки его в VPN: [Policy_Base_Routing](https://wiki.mikrotik.com/wiki/Policy_Base_Routing) + +Формируем списки (`address-list`) для подсетей, трафик на которые будем гнать через VPN: +``` +# auth.servarr.com - заблоченный ресурс +/ip firewall address-list add list=unblock address=auth.servarr.com +``` +Вместо формирования руками, готовые списки можно выкачивать с [https://antifilter.download](https://antifilter.download) + +Создаем таблицу маршрутизации + +``` +/routing table +add Disabled=no name=unblock fib +``` +Настраиваем правила роутинга + +``` +/ip firewall mangle add disabled=no action=mark-routing chain=prerouting dst-address-list=unblock new-routing-mark=unblock passthrough=yes src-address=192.168.88.2-192.168.88.254 +/ip route add disabled=no dst-address=0.0.0.0/0 type=unicast gateway=wireguard1 routing-mark=unblock scope=30 target-scope=10 +/ip firewall nat add chain=srcnat src-address=192.168.88.0/24 out-interface=wireguard1 action=masquerade +``` + +## Вариант 2: BGP + +Проверяем, что VPN жив и работает. + +Выпускаем трафик BGP с маршрутизатора + +``` +/ip firewall filter add action=accept chain=output protocol=tcp dst-address=51.75.66.20 dst-port=179 out-interface=wireguard1 +``` + +Прописываем маршрут до сервиса antifilter.network через VPN. Это нужно для того, чтобы если провайдер блочит или фильтрует BGP, на нас это не влияло. + +``` +/ip route add dst-address=51.75.66.20/32 gateway=wireguard1 +``` + +Настраиваем пиринг с сервисом + +!!! info "Mikrotik ROS7" + + ``` + /routing bgp template + add as="64999" disabled=no hold-time=4m input.filter=bgp_in .ignore-as-path-len=yes keepalive-time=1m multihop=yes name=antifilter routing-table=main + + /routing bgp connection + add as=64999 disabled=no hold-time=4m input.filter=bgp_in \ + .ignore-as-path-len=yes keepalive-time=1m local.address= .role=\ + ebgp multihop=yes name=bgp-antifilter.net output.filter-chain=discard \ + remote.address=51.75.66.20/32 .as=65444 router-id= \ + routing-table=main templates=antifilter + + /routing filter rule + add chain=bgp_in disabled=no rule="set gw wireguard1; accept; + add chain=discard disabled=no rule=reject + ``` \ No newline at end of file diff --git a/docs/network/mikrotik/upnp.md b/docs/network/mikrotik/upnp.md new file mode 100755 index 0000000..4edcd96 --- /dev/null +++ b/docs/network/mikrotik/upnp.md @@ -0,0 +1,34 @@ +# UPnP + +Именно эта штука и отвечает за то, что нужные порты будут открываться автоматически по запросу программы. Настройка достаточно простая и заключается всего нескольких нажатиях мышки. + +Подключаемся к нашему Mikrotik через Winbox и открываем необходимый раздел: + +**IP->UPnP** + +![](../../images/network/mikrotik-upnp_1.png) + +Здесь достаточно поставить галочку Enable, но после этого все-равно ничего работать не будет. А все потому, что надо микротику сказать, что есть внешний интерфейс, а что внутренний. Для этого, в открытом ранее окошке находим кнопку **Interfaces** и нажимаем ее. + +Сейчас у нас ничего нет и окно пустое. Жмем синий плюсик и добавляем два интерфейса. + +![](../../images/network/mikrotik-upnp_2.png) + +**External** + + — это наш внешний интерфейс. У меня это pppoe-соединение с провайдером. У вас может быть так же, а если получаете по DHCP, то выбрать надо тот, где висит DHCP-клиент. + +**Internal** + + — это наш внутренний интерфейс. У меня часть портов объединена в bridge, поэтому я выбираю интерфейс bridge-home. Вы же выбираете свой. + +Теперь закрываем окошко настройки интерфейсов. Затем жмем Apply и Ok. Вот и все. После проделанных манипуляций порты на микротике будут открываться автоматически без вмешательства в его настройку. + +То же самое можно сделать не только в графической оболочке, но и через терминал. + +```plaintext +/ip upnp set enabled=yes show-dummy-rule=yes allow-disable-external-interface=no +/ip upnp interfaces add interface=pppoe-out1 type=external add interface=bridge-home type=internal +``` + +Проверить работает или нет довольно просто, для этого достаточно зайти в раздел IP->Firewall->NAT и посмотреть наличие новых правил с префиксом D. Если такие есть, значит все в порядке. \ No newline at end of file diff --git a/docs/network/tools/nmap.md b/docs/network/tools/nmap.md new file mode 100755 index 0000000..6380ec6 --- /dev/null +++ b/docs/network/tools/nmap.md @@ -0,0 +1,171 @@ +# Nmap + +## Сканирование Одного Хоста или IP Адреса + +| | | +| --- | --- | +| `nmap 192.168.1.1` | Сканировать Отдельный IP Адрес | +| `nmap server.shellhacks.com` | Сканировать сервер по Имени Хоста | +| `nmap -v server.shellhacks.com`
`nmap -vv server.shellhacks.com` | Увеличить Уровень Детализации результатов сканирования | + +## Сканирование Множества IP Адресов + +| | | +| --- | --- | +| `nmap 192.168.1.1 192.168.1.2 192.168.1.3`
`nmap 192.168.1.1,2,3` | Сканировать Множество IP Адресов | +| `nmap 192.168.1.0/24`
`nmap 192.168.1.*` | Сканировать Подсеть | +| `nmap 192.168.1.0-200` | Сканировать Диапазон IP Адресов | + +## Поиск Активных Компьютеров в Сети + +| | | +| --- | --- | +| `nmap -sn 192.168.1.0/24` | Сканировать сеть в поиске Активных Хостов | + +## Сканирование Списка Хостов из Файла + +| | | +| --- | --- | +| `nmap -iL input.txt` | Сканирование списка хостов/сетей из Файла | + +??? note "Формат файла" + Записи могут быть представлены в любом из форматов, с которыми работает Nmap из командной строки (IP адреса, имена хостов, CIDR, IPv6, или октетные диапазоны). Записи должны разделятся одним или более пробелами, табуляциями или переходами на новую строку. + + ``` + cat input.txt + server.shellhacks.com + 192.168.1.0/24 + 192.168.2.1,2,3 + 192.168.3.0-200 + ``` + +## Исключение IP/Хостов/Сетей из Сканирования + +| | | +| --- | --- | +| `nmap 192.168.1.0/24 --exclude 192.168.1.1`
`nmap 192.168.1.0/24 --exclude 192.168.1.1 192.168.1.5`
`nmap 192.168.1.0/24 --exclude 192.168.1.1,2,3` | Исключить Цели из сканирования Nmap-ом | +| `nmap 192.168.1.0/24 --excludefile exclude.txt` | Исключить Список хостов, взятых из файла | + +!!! note + Формат файла с исключенными хостами аналогичен приведенному выше. + +## Сканирование Определенных Портов + +| | | +| --- | --- | +| `nmap -p 80 192.168.1.1` | Сканировать Один Порт | +| `nmap -p 80,443 192.168.1.1` | Сканировать Несколько Портов | +| `nmap -p 80-1000 192.168.1.1` | Сканировать Диапазон Портов | +| `nmap -p "*" 192.168.1.1` | Сканировать Все Порты | +| `nmap --top-ports 5 192.168.1.1`
`nmap --top-ports 10 192.168.1.1` | Сканировать несколько самых Распространенных Портов | + +## Определение Поддерживаемых IP Протоколов + +| | | +| --- | --- | +| `nmap -sO 192.168.1.1` | Определить какие IP Протоколы (TCP, UDP, ICMP, и т.д.) поддерживает сканируемый хост | + +## Сканирование TCP/UDP Портов + +| | | +| --- | --- | +| `nmap -sT 192.168.1.1` | Сканировать все TCP Порты | +| `nmap -p T:80 192.168.1.1` | Сканировать определенные TCP Порты | +| `nmap -sU 192.168.1.1` | Сканировать все UDP Порты | +| `nmap -p U:53 192.168.1.1` | Сканировать определенные UDP Порты | +| `nmap -p U:53,79,113,T:21-25,80,443,8080 192.168.1.1` | Объединение сканирования разных портов | + +## Быстрое Сканирование + +| | | +| --- | --- | +| `nmap -F 192.168.1.1` | Активировать Быстрый Режим сканирования | + +!!! note + Сканирует меньшее кол-во портов, чем при обыкновенном сканировании. + +## Показывать Причину Состояния Порта + +| | | +| --- | --- | +| `nmap –reason 192.168.1.1` | Показать Причину, по которой Nmap считает что порт находится в определенном состоянии | + +## Показывать Только Открытые Порты + +| | | +| --- | --- | +| `nmap –open 192.168.1.1`| Показать Только Открытые Порты (либо возможно открытые) | + +## Определение ОС + +Одна из наиболее известных функциональных возможностей Nmap — это удаленное определение ОС на основе анализа работы стека TCP/IP. + +Nmap посылает серию TCP и UDP пакетов на удаленный хост и изучает ответы. + +После проведения множества тестов, Nmap сравнивает результаты со своей базой данных и, при нахождении соответствий, выводит информацию об ОС. + +| | | +| --- | --- | +| `nmap -O 192.168.1.1` | Включить Определение ОС | + +## Определение Версии Сервисов + +| | | +| --- | --- | +| `nmap -sV 192.168.1.1` | Включить Определение Версии Сервисов | + +> Определяет версии программ, запущенных на удаленном сервере. + +## Обнаружение Фаервола + +| | | +| --- | --- | +| `nmap -sA 192.168.1.1` | Узнать, защищен ли компьютер какими-либо Пакетными Фильтрами или Фаерволом | + +## Подмена MAC Адреса + +| | | +| --- | --- | +| `nmap –spoof-mac 00:11:22:33:44:55 192.168.1.1` | Подменить MAC Адреса | +| `nmap –spoof-mac 0 192.168.1.1` | Подменить MAC Адрес Случайным MAC-ом | + +## Сканирование Фаервола на Уязвимости + +Эти три типа сканирования используют незаметную лазейку в TCP RFC, чтобы разделять порты на открытые и закрытые. + +Когда сканируется система отвечающая требованиям RFC, любой пакет, не содержащий установленного бита SYN, RST или ACK, повлечет за собой отправку RST в ответ в случае, если порт закрыт, или не повлечет никакого ответа, если порт открыт. + +Т.к. ни один из этих битов не установлен, то любая комбинация трех оставшихся (FIN, PSH и URG) будет являться правильной. + +| | | +| --- | --- | +|`nmap -sN 192.168.1.1`| TCP Null сканирование - Не устанавливаются никакие биты (Флагов в TCP заголовке 0) | +| `nmap -sF 192.168.1.1` | TCP Fin сканирование - Устанавливается только TCP FIN бит | +| `nmap -sX 192.168.1.1` | TCP Xmas сканирование - Устанавливаются FIN, PSH и URG флаги (пакет светится как новогодняя елка) | + +## Скрытое Сканирование + +| | | +| --- | --- | +| `nmap -sS 192.168.0.1` | TCP SYN сканирование | + +> Известное как сканированием с использованием полуоткрытых соединений, так как не отрывает полных TCP соединений. + +## Отключение Обнаружения Хостов (No Ping) + +| | | +| --- | --- | +| `nmap -Pn 192.168.1.1` | Не пинговать хосты перед сканированием | + +## Отключение Использования DNS + +| | | +| --- | --- | +| `nmap -n 192.168.1.1` | Никогда не производить обратное преобразование DNS имен для каждого обнаруженного активного IP адреса | + +## Сохранение Результатов Сканирования Nmap в Файл + +| | | +| --- | --- | +| `nmap 192.168.1.1 > output.txt`
`nmap -oN output.txt 192.168.1.1` | Сохранить результат сканирования Nmap в Текстовый Файл | +| `nmap -oX output.xml 192.168.1.1` | Сохранить результат сканирования Nmap в XML Файл | \ No newline at end of file diff --git a/docs/network/tools/wtraf.md b/docs/network/tools/wtraf.md new file mode 100755 index 0000000..6d8669b --- /dev/null +++ b/docs/network/tools/wtraf.md @@ -0,0 +1,7 @@ +# Wtraf + +Пока альфа-версия бинарников. Разместил [**здесь на Sourceforge**](https://sourceforge.net/projects/wtraf/files/). +Проверено на Windows 7/8/10 32-bit и 64-bit. Debian и Ubuntu. +Кушает данные SNMP — COUNTER, INTEGER, GAUGE. + +https://habr.com/ru/post/358970/ \ No newline at end of file diff --git a/docs/blog/posts/close-phishing-site.md b/docs/other/close-phishing-site.md similarity index 94% rename from docs/blog/posts/close-phishing-site.md rename to docs/other/close-phishing-site.md index 0ccae5f..5a19da7 100755 --- a/docs/blog/posts/close-phishing-site.md +++ b/docs/other/close-phishing-site.md @@ -1,3 +1,4 @@ +# Закрыть фишинговый сайт Каждый раз, когда я в интернете натыкался на фишинговый сайт, у меня был сложный квест куда писать и что делать, чтобы его закрыть. У меня, обычно это были сайты, которые притворялись игровыми. Каждый раз даже интересно, как у тебя пытаются узнать пароль. diff --git a/docs/other/cloudflare-cname.md b/docs/other/cloudflare-cname.md deleted file mode 100755 index 0a4b94c..0000000 --- a/docs/other/cloudflare-cname.md +++ /dev/null @@ -1,24 +0,0 @@ -# Cоздание новой DNS-записи CNAME на Cloudflare - ----------- - -Я рекомендую получить собственное доменное имя, указывающее на IP-адрес вашего дома в глобальной сети. Частное доменное имя через reg.ru будет стоить 850 рублей в год. Есть несколько причин, почему я рекомендую это: - -- В моем тестировании я никогда не мог заставить некоторые контейнеры докеров работать в качестве подкаталога (даже на моем собственном частном доменном имени) за обратным прокси-сервером Traefik. В таких ситуациях вам останется создать несколько динамических субдоменов DNS, чтобы разместить все ваши службы. Большинство бесплатных динамических DNS-сервисов ограничивают количество субдоменов, которые вы можете создать. -- Afraid DNS не является одним из поддерживаемых поставщиков wildcard сертификатов. Хотя DuckDNS указан как поддерживаемый, он еще не тестировался. - -В моей настройке использую собственное доменное имя, все мои приложения в качестве отдельных хостов и Traefik 2.9 с сертификатами Wildcard. Мой провайдер DNS — Cloudflare, который [протестирован и подтвержден](https://doc.traefik.io/traefik/v1.7/configuration/acme/#wildcard-domains) для работы с подстановочными сертификатами Traefik Let’s Encrypt. Если у вас есть собственное доменное имя, а ваш провайдер DNS не указан в списке поддерживаемых, то я рекомендую перенести ваш DNS на Cloudflare, который удивительно быстр и бесплатен. - -В Cloudflare вы должны указать свой корневой домен (example.com) на свой IP-адрес WAN. Затем добавьте CNAME с подстановочным знаком (*.example.com) или отдельные субдомены, указывающие на ваш корневой домен (@ для хоста), как показано ниже (для этого не требуется платная учетная запись). - -[![Cloudflare Dns Entries](https://www.smarthomebeginner.com/images/2018/05/cloudflare-dns-records-screenshot-740x495.png "Traefik Tutorial: Traefik Reverse Proxy with LetsEncrypt for Docker Media Server 3")](https://www.smarthomebeginner.com/images/2018/05/cloudflare-dns-records-screenshot.png) - -Cloudflare Dns Entries For Traefik Dns Challenge - -In addition to creating the DNS records, you will have to adjust Cloudflares SSL settings to avoid indefinite redirects. Go to **Crypto** settings for the domain and change **SSL** to **Full** as shown below. - -[![Cloudflare &Quot;Full&Quot; Ssl](https://www.smarthomebeginner.com/images/2018/05/cloudflare-crypto-full-ssl-740x358.png "Traefik Tutorial: Traefik Reverse Proxy with LetsEncrypt for Docker Media Server 4")](https://www.smarthomebeginner.com/images/2018/05/cloudflare-crypto-full-ssl.png) - -Cloudflare “Full” Ssl - -Note that you may have to wait for a few minutes for the DNS entries to propagate. If you run Traefik before that, DNS challenge may fail and no SSL certificate will be generated. If you keep trying, [Let’s Encrypt may ban you temporarily](https://letsencrypt.org/docs/rate-limits/) for reaching the request limits. To counter this I have added a 5 min wait in the traefik configuration below but you may need longer. Until validation is complete, Traefik’s default certificate will be used and your browser will throw a warning. \ No newline at end of file diff --git a/docs/other/hardware/hpe-ilo.md b/docs/other/hardware/hpe-ilo.md new file mode 100755 index 0000000..e65c040 --- /dev/null +++ b/docs/other/hardware/hpe-ilo.md @@ -0,0 +1,216 @@ +# Версии прошивки HPE iLo + +Здесь собраны **последние версии прошивок ILO** для модуля удаленного управления серверами HP (Integrated Lights-Out) +***ОБНОВЛЕНО* 2023-05-28** + +ILO1 : [ilo196.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1980791503/v97349/CP023365.scexe) (30-Apr-2014) +ILO2 : [ilo2_233.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p915269625/v148520/CP035238.scexe) (30-Mar-2018) +ILO3 : [ilo3_194.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1573561412/v189986/CP046328.scexe) (iLO3 v 1.94.2 06-Dec-2020) +ILO4 : [ilo4_282.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v218149/CP053894.scexe) (iLO4 v 2.82.5 06-Feb-2023) +ILO5 : [ilo5_291.bin](https://downloads.hpe.com/pub/softlib2/software1/fwpkg-ilo/p991377599/v231082/ilo5_291.fwpkg) (24-May-2023) +ILO6 : [ilo6_130.bin](https://downloads.hpe.com/pub/softlib2/software1/fwpkg-ilo/p788720876/v221408/ilo6_130.fwpkg) (07-Apr-2023) + +Для получения файлов в формате .bin: + + +=== "Linux" + ``` + $ chmod +x CP022551.scexe + $ ./CP022551.scexe --unpack=/tmp/iLO3 + $ ls -l /tmp/iLO3 + .. + ilo3_180.bin + .. + ``` + +=== "Windows" + используйте архиватор 7-zip: + ![extract_ilo](https://pingtool.org/wp-content/uploads/2012/09/extract_ilo.png) + +Старые версии прошивок: + +??? note "ILO1" + [ilo187.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308174093/v33430/CP006786.scexe) + [ilo188.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308174093/v35729/CP006953.scexe) + [ilo189.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308174093/v38868/CP007118.scexe) + [ilo191.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308174093/v41461/CP007684.scexe) + [ilo192.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308174093/v44421/CP008488.scexe) + [ilo193.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1980791503/v50126/CP009895.scexe) + [ilo194.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1980791503/v51876/CP010428.scexe) + [ilo195.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1980791503/v57149/CP011850.scexe) + +??? note "ILO2" + [ilo2_120.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308277578/v33150/CP006634.scexe) + [ilo2_122.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308280586/v33324/CP006747.scexe) + [ilo2_124.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308280586/v35700/CP006942.scexe) + [ilo2_126.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308280586/v39551/CP007149.scexe) + [ilo2_129.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308280586/v40736/CP007549.scexe) + [ilo2_130.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308280586/v41965/CP007818.scexe) + [ilo2_135.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308280586/v42540/CP007977.scexe) + [ilo2_140.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308280586/v43257/CP008198.scexe) + [ilo2_142.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308280586/v43790/CP008317.scexe) + [ilo2_143.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308280586/v45110/CP008590.scexe) + [ilo2_150.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p308280586/v45689/CP008777.scexe) + [ilo2_160.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v47657/CP009237.scexe) + [ilo2_161.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v49242/CP009636.scexe) + [ilo2_170.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v49991/CP009857.scexe) + [ilo2_175.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v51453/CP010337.scexe) + [ilo2_177.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v52557/CP010541.scexe) + [ilo2_178.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v54329/CP011095.scexe) + [ilo2_179.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v55943/CP011535.scexe) + [ilo2_180.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v57485/CP011945.scexe) + [ilo2_181.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v58075/CP012108.scexe) + [ilo2_182.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v59643/CP012567.scexe) + [ilo2_183.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v98108/CP023549.scexe) + [ilo2_201.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v63249/CP013601.scexe) + [ilo2_205.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v65718/CP014256.scexe) + [ilo2_206.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v68054/CP014890.scexe) + [ilo2_207.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v71019/CP015685.scexe) + [ilo2_208.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v74437/CP016664.scexe) + [ilo2_209.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v75848/CP017013.scexe) + [ilo2_212.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v78468/CP017737.scexe) + [ilo2_213.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v80498/CP018259.scexe) + [ilo2_215.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v82920/CP019022.scexe) + [ilo2_220.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v85709/CP019821.scexe) + [ilo2_222.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v90711/CP021566.scexe) + [ilo2_223.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v91953/CP021881.scexe) + [ilo2_225.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1285463034/v96369/CP023069.scexe) + [ilo2_227.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p915269625/v104866/CP025666.scexe) + [ilo2_228.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p915269625/v108120/CP026708.scexe) + [ilo2_229.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p915269625/v112310/CP027871.scexe) + [ilo2_230.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p915269625/v128193/CP032232.scexe) + [ilo2_231.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p915269625/v142909/CP033889.scexe) + [ilo2_232.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p915269625/v144949/CP034429.scexe) + +??? note "ILO3" + [ilo3_187.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1573561412/v113322/CP028239.scexe) + [ilo3_100.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1255562964/v57781/CP012025.scexe) + [ilo3_105.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1255562964/v60837/CP012894.scexe) + [ilo3_110.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1255562964/v62116/CP013210.scexe) + [ilo3_115.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1255562964/v62444/CP013313.scexe) + [ilo3_116.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1255562964/v65714/CP014254.scexe) + [ilo3_120.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1255562964/v64722/CP014002.scexe) + [ilo3_126.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1255562964/v70182/CP015458.scexe) + [ilo3_128.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1255562964/v73832/CP016462.scexe) + [ilo3_150.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1255562964/v73060/CP016203.scexe) + [ilo3_155.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1255562964/v81459/CP018561.scexe) + [ilo3_157.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1255562964/v87094/CP020301.scexe) + [ilo3_161.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1255562964/v89960/CP021281.scexe) + [ilo3_165.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1255562964/v92752/CP022033.scexe) + [ilo3_170.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1255562964/v88836/CP020873.scexe) + [ilo3_180.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1255562964/v94618/CP022551.scexe) + [ilo3_182.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1573561412/v104114/CP025437.scexe) + [ilo3_185.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1573561412/v107245/CP026424.scexe) + [ilo3_187.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1573561412/v113322/CP028239.scexe) + [ilo3_188.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1573561412/v116231/CP029099.scexe) + [ilo3_189.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1573561412/v127869/CP032172.scexe) + [ilo3_190.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1573561412/v149362/CP035511.scexe) + [ilo3_191.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1573561412/v158427/CP037906.scexe) + [ilo3_192.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1573561412/v176309/CP042794.scexe) + [ilo3_193.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1573561412/v183969/CP044657.scexe) + +??? note "ILO4" + [ilo4_101.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1950562118/v72782/CP016116.scexe) + [ilo4_105.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1950562118/v74710/CP016765.scexe) + [ilo4_110.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1950562118/v76510/CP017241.scexe) + [ilo4_113.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1457726527/v83089/CP019101.scexe) + [ilo4_120.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1457726527/v79401/CP017976.scexe) + [ilo4_122.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1457726527/v85901/CP019887.scexe) + [ilo4_130.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1950562118/v80804/CP018365.scexe) + [ilo4_132.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1950562118/v91629/CP021804.scexe) + [ilo4_140.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1457726527/v87181/CP020340.scexe) + [ilo4_150.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1457726527/v94428/CP022524.scexe) + [ilo4_151.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1457726527/v98384/CP023645.scexe) + [ilo4_153.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1457726527/v100933/CP024444.scexe) + [ilo4_200.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1457726527/v79407/CP017980.scexe) + [ilo4_202.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1457726527/v100330/CP024170.scexe) + [ilo4_203.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1457726527/v102910/CP025110.scexe) + [ilo4_210.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1457726527/v101197/CP024540.scexe) + [ilo4_211.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1892756734/v105467/CP025816.scexe) + [ilo4_220.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1950562118/v103093/CP025143.scexe) + [ilo4_222.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v111019/CP027514.scexe) + [ilo4_230.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v106715/CP026236.scexe) + [ilo4_231.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v112690/CP027992.scexe) + [ilo4_240.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v111237/CP027578.scexe) + [ilo4_242.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v117904/CP029630.scexe) + [ilo4_244.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v119757/CP030133.scexe) + [ilo4_250.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v112485/CP027911.scexe) + [ilo4_253.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v124470/CP031406.scexe) + [ilo4_254.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v133828/CP032620.scexe) + [ilo4_255.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v129421/CP032487.scexe) + [ilo4_260.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v142463/CP033806.scexe) + [ilo4_261.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v154294/CP036949.scexe) + [ilo4_262.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v160135/CP038290.scexe) + [ilo4_270.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v158634/CP037959.scexe) + [ilo4_272.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v170463/CP041058.scexe) + [ilo4_273.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v176128/CP042663.scexe) + [ilo4_275.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v182737/CP044405.scexe) + [ilo4_276.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v183797/CP044610.scexe) + [ilo4_277.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v188589/CP046020.scexe) + [ilo4_278.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v190650/CP046465.scexe) + [ilo4_279.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v204995/CP049647.scexe) + [ilo4_280.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v209058/CP050768.scexe) + [ilo4_281.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p192122427/v213013/CP051872.scexe) + +??? note "ILO5" + [ilo5_117.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v141254/CP033476.scexe) + [ilo5_120.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v138105/CP032773.scexe) + [ilo5_130.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v144224/CP034170.scexe) + [ilo5_135.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v153199/CP036661.scexe) + [ilo5_137.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v157138/CP037568.scexe) + [ilo5_139.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v159725/CP038198.scexe) + [ilo5_140.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v161986/cp038901.exe) + [ilo5_143.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v162234/RPMS/x86_64/firmware-ilo5-1.43-1.1.x86_64.rpm) *Linux RPM* + [ilo5_143.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v162231/cp038939.exe) *Windows exe* + [ilo5_145.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v168530/RPMS/x86_64/firmware-ilo5-1.45-1.1.x86_64.rpm) *Linux RPM* + [ilo5_145.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v168528/cp040393.exe) *Windows exe* + [ilo5_146.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v169508/RPMS/x86_64/firmware-ilo5-1.46-1.1.x86_64.rpm) *Linux RPM* + [ilo5_146.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v169505/cp040736.exe) *Windows exe* + [ilo5_210.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v161193/RPMS/x86_64/firmware-ilo5-2.10-1.1.x86_64.rpm) *Linux RPM* + [ilo5_210.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v161192/cp038706.exe) *Windows exe* + [ilo5_214.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v177105/RPMS/x86_64/firmware-ilo5-2.14-1.1.x86_64.rpm) *Linux RPM* + [ilo5_214.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v177103/cp042927.exe) *Windows exe* + [ilo5_215.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v178124/RPMS/x86_64/firmware-ilo5-2.15-1.1.x86_64.rpm) *Linux RPM* + [ilo5_215.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v178118/cp043129.exe) *Windows exe* + [ilo5_216.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v179644/RPMS/x86_64/firmware-ilo5-2.16-1.1.x86_64.rpm) *Linux RPM* + [ilo5_216.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v179643/cp043490.exe) *Windows exe* + [ilo5_218.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v183738/RPMS/x86_64/firmware-ilo5-2.18-1.1.x86_64.rpm) *Linux RPM* + [ilo5_218.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v183739/cp044597.exe) *Windows exe* + [ilo5_230.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v167893/RPMS/x86_64/firmware-ilo5-2.30-1.1.x86_64.rpm) *Linux RPM* + [ilo5_230.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v167896/cp040154.exe) *Windows exe* + [ilo5_231.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v182696/RPMS/x86_64/firmware-ilo5-2.31-1.1.x86_64.rpm) *Linux RPM* + [ilo5_231.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v182701/cp044397.exe) *Windows exe* + [ilo5_233.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v188218/RPMS/x86_64/firmware-ilo5-2.33-1.1.x86_64.rpm) *Linux RPM* + [ilo5_233.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v188225/cp045967.exe) *Windows exe* + [ilo5_235.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v192284/RPMS/x86_64/firmware-ilo5-2.35-1.1.x86_64.rpm) *Linux RPM* + [ilo5_235.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v192285/cp046894.exe) *Windows exe* + [ilo5_241.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v193150/RPMS/x86_64/firmware-ilo5-2.41-1.1.x86_64.rpm) *Linux RPM* + [ilo5_241.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v193154/cp047027.exe) *Windows exe* + [ilo5_244.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v193437/RPMS/x86_64/firmware-ilo5-2.44-1.1.x86_64.rpm) *Linux RPM* + [ilo5_244.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v193439/cp047147.exe) *Windows exe* + [ilo5_246.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v195963/cp047873.exe) *Windows exe* + [ilo5_248.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v196411/RPMS/x86_64/firmware-ilo5-2.48-1.1.x86_64.rpm) *Linux RPM* + [ilo5_248.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v196412/cp047987.exe) *Windows exe* + [ilo5_255.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v190646/RPMS/x86_64/firmware-ilo5-2.55-1.1.x86_64.rpm) *Linux RPM* + [ilo5_255.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v190647/cp046463.exe) *Windows exe* + [ilo5_260.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v204064/RPMS/x86_64/firmware-ilo5-2.60-1.1.x86_64.rpm) *Linux RPM* + [ilo5_260.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v204066/cp049452.exe) *Windows exe* + [ilo5_260.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v208441/RPMS/x86_64/firmware-ilo5-2.60-1.1.x86_64.rpm) *Linux RPM* + [ilo5_260.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v208443/cp050571.exe) *Windows exe* + [ilo5_263.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v205679/RPMS/x86_64/firmware-ilo5-2.63-1.1.x86_64.rpm) *Linux RPM* + [ilo5_263.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v205681/cp049779.exe) *Windows exe* + [ilo5_265.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v205303/RPMS/x86_64/firmware-ilo5-2.65-1.1.x86_64.rpm) *Linux RPM* + [ilo5_265.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v205305/cp049685.exe) *Windows exe* + [ilo5_271.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-linux-fw-ilo/p1342933511/v214929/RPMS/x86_64/firmware-ilo5-2.71-1.1.x86_64.rpm) *Linux RPM* + [ilo5_271.bin](https://downloads.hpe.com/pub/softlib2/software1/sc-windows-fw-ilo/p1748018352/v214931/cp052505.exe) *Windows exe* + [ilo5_272.bin](https://downloads.hpe.com/pub/softlib2/software1/fwpkg-ilo/p991377599/v203662/ilo5_272.fwpkg) + [ilo5_278.bin](https://downloads.hpe.com/pub/softlib2/software1/fwpkg-ilo/p991377599/v217404/ilo5_278.fwpkg) + [ilo5_281.bin](https://downloads.hpe.com/pub/softlib2/software1/fwpkg-ilo/p991377599/v225522/ilo5_281.fwpkg) + +??? note "ILO6" + [ilo6_110.bin](https://downloads.hpe.com/pub/softlib2/software1/fwpkg-ilo/p788720876/v201141/ilo6_110.fwpkg) + [ilo6_120.bin](https://downloads.hpe.com/pub/softlib2/software1/fwpkg-ilo/p788720876/v217630/ilo6_120.fwpkg) + +--- + +[Источник](https://pingtool.org/ru/latest-hp-ilo-firmwares/){ .md-button .md-button--primary } diff --git a/docs/other/hardware/printers/kyocera.md b/docs/other/hardware/printers/kyocera.md new file mode 100755 index 0000000..495a1cd --- /dev/null +++ b/docs/other/hardware/printers/kyocera.md @@ -0,0 +1,46 @@ +# Kyocera + +## Обновление ПО +Извлечь файлы из архива, зайти в папку соответствующую модели принтера и скопировать на флешку в корень. Чтобы файлы были без папки + +1. Включи питание и дождись пока на дисплее будет написано “Ready to print” («Готов к печати»), затем выключи устройство. +2. Вставь флешку с обновлением в USB-порт +3. Включи питание +4. В течении 40 секунд будет отображаться на экране надпись “FW-Update” и будет мигать индикатор «память» +5. Окончание прошивки будет выведено на экран сообщением complite и индикатор «память» перестанет мигать +6. Выдерни кабель из устройства и вытащи флешку +7. Готово + +Для проверки версии используй вход в системное меню 10871087 и команду U000 + +Если обновление производится из-за того, что были проблемы, то после обновления, нужно сбросить на заводские параметры. Для этого: + +1. Включить МФУ и дождаться окончания загрузку +2. Набрать 10871087, и мы попадаем в техническое меню +3. Набираем команду U021 +4. Нажимаем большую зеленую кнопку «Старт» +5. Выбираем \[EXECUTE\] и нажимаем кнопку «Старт» +6. Выключаем питание +7. Включаем питание +8. Настройки сброшены + +## Сбой обновления + +В случаях возникновения сбоев в момент прошивки устройства можно провести процедуру по восстановлению микропрограммного обеспечения. + +Данная процедура называется **Emergency update**. Вот краткая инструкция по ее проведению: + +1. Загрузить обычную прошивку с сайта Kyocera Document Solutions +2. Распаковать и скопировать все файлы на флешку +3. Открыть скопированные файлы на флешке и: +4. переименовать файл DL\_CTRL.**\* в KM\_EMRG.**\* *(где .\*\*\* – расширение файла)* +5. удалить файл ES\_SKIP.ON +6. Вставить флешку в аппарат, включить и ждать. Прошивка займет значительно больше времени, чем обычно. + +## Файлы прошивок + +[https://cloud.mail.ru/public/4pfw/P4JtQwhfa](https://cloud.mail.ru/public/4pfw/P4JtQwhfa) + +## Страница в ВК с прошивками + +[https://vk.com/topic-115150661\_35168109](https://vk.com/topic-115150661_35168109) \ No newline at end of file diff --git a/docs/other/marvel.md b/docs/other/marvel.md deleted file mode 100755 index 7d2a654..0000000 --- a/docs/other/marvel.md +++ /dev/null @@ -1,53 +0,0 @@ -Оптимальный вариант просмотра (в порядке выхода) -I. «Сага Бесконечности» - -Первая фаза -1. «Железный человек» (2008) -2. «Невероятный Халк» (2008) -3. «Железный человек 2» (2010) -4. «Тор» (2011) -5. «Первый мститель» (2011) -6. «Мстители» (2012) - -Вторая фаза -7. «Железный человек 3» (2013) -8. «Тор 2: Царство тьмы» (2013) -9. «Первый мститель: Другая война» (2014) -10. «Стражи Галактики» (2014) -11. «Мстители: Эра Альтрона» (2015) -12. «Человек-муравей» (2015) - -Третья фаза -13. «Первый мститель: Противостояние» (2016) -14. «Доктор Стрэндж» (2016) -15. «Стражи Галактики. Часть 2» (2017) -16. «Человек-паук: Возвращение домой» (2017) -17. «Тор: Рагнарёк» (2017) -18. «Черная Пантера» (2018) -19. «Мстители: Война бесконечности» (2018) -20. «Человек-муравей и Оса» (2018) -21. «Капитан Марвел» (2019) -22. «Мстители: Финал» (2019) -23. «Человек-паук: Вдали от дома» (2019) - -«Сага Мультивселенной» -Четвертая фаза -24. «Ванда/Вижн» (2021), сериал -25. «Сокол и Зимний Солдат» (2021), сериал -26. «Локи», 1-й сезон (2021), сериал -27. «Черная Вдова» (2021) -28. «Что, если…?», 1-й сезон (2021), мультсериал -29. «Шан-Чи и легенда десяти колец» (2021) -30. «Вечные» (2021) -31. «Соколиный Глаз» (2021), сериал -32. «Человек-паук: Нет пути домой» (2021) -33. «Лунный рыцарь» (2022), сериал -34. «Доктор Стрэндж: В мультивселенной безумия» (2022) -35. «Мисс Марвел» (2022), сериал -36. «Тор: Любовь и гром» (2022) -37. «Я есть Грут» (2022), мини-мультсериал -38. «Женщина-Халк: Адвокат» (2022), сериал -39. «Ночной оборотень» (2022), спешел -40. «Черная Пантера: Ваканда навеки» (2022) -41. «Стражи Галактики: Праздничный спецвыпуск» (2022), спешел -42. «Человек-муравей и Оса: Квантомания» (2023) \ No newline at end of file diff --git a/docs/other/prometheus-grafana.md b/docs/other/prometheus-grafana.md deleted file mode 100755 index 4b8d999..0000000 --- a/docs/other/prometheus-grafana.md +++ /dev/null @@ -1,267 +0,0 @@ -# Как запустить Prometheus и Grafana используя Docker Compose - ----------- - -Docker Compose используется для запуска нескольких контейнеров как одной службы. Если у вас есть приложение/стек, требующий разных служб, docker compose позволяет создать один файл, который запустит все контейнеры как одну службу и избавит вас от необходимости запускать их по отдельности. Также можно запускать по одной службе за раз с помощью docker compose. Сегодня мы рассмотрим, как запустить Prometheus и Grafana с помощью docker compose. - -Чтобы иметь возможность использовать Docker Compose, в вашей системе должны быть установлены как Docker, так и Docker Compose. - -Prometheus — это база данных временных рядов, использующая экспортеры для мониторинга различных серверов/сервисов, а Grafana — один из самых популярных инструментов мониторинга. В сочетании с Prometheus, Grafana предлагает мощный инструмент визуализации данных временных рядов. - -Чтобы запустить Prometheus и Grafana с помощью docker compose, нам нужно создать файл docker compose, определяющий отдельные сервисы (Prometheus и Grafana), используемые образы, запущенные порты и все остальное необходимое. - -## Использование постоянных томов с Docker Compose - -Нам нужно учитывать тот факт, что для Grafana требуется файл конфигурации и файл источника данных. Promemetheus также требует файла конфигурации. Для этого мы будем использовать смонтированные тома (постоянные тома), чтобы можно было легко вносить изменения в файлы, когда это необходимо. - -Создайте рабочий каталог с именем _prometheus-grafana_ и внутри него создайте каталоги для хранения файлов конфигурации Prometheus и Grafana. - -mkdir -p ~/prometheus-grafana/{grafana,prometheus} - -Теперь перейдите в каталог _grafana_ и создайте файлы конфигурации. Файл конфигурации **Grafana** по умолчанию предоставляется в официальном репозитории Github. Создайте файл с именем _grafana.ini,_ скопируйте и вставьте конфигурацию grafana по умолчанию в этот файл и сохраните. - -Контент для конфигурации Grafana по умолчанию можно найти по _адресу https://github.com/grafana/grafana/blob/master/conf/defaults.ini_ . Обратите внимание, что вы можете вносить изменения в файл конфигурации по умолчанию в соответствии с вашими потребностями. - -wget https://raw.githubusercontent.com/grafana/grafana/main/conf/defaults.ini -O ~/prometheus-grafana/grafana/grafana.ini vim ~/prometheus-grafana/grafana/grafana.ini - -После этого перейдите в папку Prometheus и создайте файл конфигурации prometheus, чтобы указать Prometheus, где брать метрики. Поскольку у меня нет отдельного сервера для мониторинга, отображаемые метрики относятся к самому серверу prometheus (localhost:9090) - -nano ~/prometheus-grafana/prometheus/prometheus.yml - -global: - -scrape_interval: 15s - -scrape_timeout: 10s - -evaluation_interval: 15s - -alerting: - -alertmanagers: - -- static_configs: - -- targets: [] - -scheme: http - -timeout: 10s - -api_version: v1 - -scrape_configs: - -- job_name: prometheus - -honor_timestamps: true - -scrape_interval: 15s - -scrape_timeout: 10s - -metrics_path: /metrics - -scheme: http - -static_configs: - -- targets: - -- localhost:9090 - -Вы можете открыть и изменить файл в соответствии с вашим вариантом использования. - -nano ~/prometheus-grafana/prometheus/prometheus.yml - -На данный момент Grafana не показывает, откуда брать данные. Нам нужно сказать ему, чтобы он достался от Прометея. Создайте файл с именем _datasource.yml_ в каталоге grafana. - -nano ~/prometheus-grafana/grafana/datasource.yml - -apiVersion: 1 - -datasources: - -- name: Prometheus - -type: prometheus - -url: http://localhost:9090 - -isDefault: true - -access: proxy - -editable: true - -Дальнейшая модификация может быть выполнена: - -nano ~/prometheus-grafana/grafana/datasource.yml - -К настоящему времени у нас готовы все тома. Давайте продолжим, чтобы создать файл docker-compose. - -nano ~/prometheus-grafana/docker-compose.yml - -Содержимое должно выглядеть так, как показано ниже. Убедитесь, что вы изменили путь к файлам конфигурации в соответствии с путями в вашей системе. - -version: "3.7" - -networks: - -direct_net: - -name: direct_net - -driver: bridge - -ipam: - -config: - -- subnet: 192.168.200.0/24 - -services: - -prometheus: - -user: "$PUID:$PGID" - -container_name: prometheus - -image: prom/prometheus:latest - -restart: always - -networks: - -- direct_net - -ulimits: - -nofile: - -soft: 200000 - -hard: 200000 - -command: - ---config.file=/data/prometheus.yml - ---storage.tsdb.path=/data - ---storage.tsdb.retention.time=180d - ---web.enable-admin-api - -volumes: - -- $DOCKER_APP/prometheus:/data - -- /etc/timezone:/etc/timezone:ro - -- /etc/localtime:/etc/localtime:ro - -grafana: - -user: "$PUID:$PGID" - -container_name: grafana - -image: grafana/grafana:latest - -restart: always - -networks: - -- direct_net - -security_opt: - -- no-new-privileges:true - -environment: - -GF_INSTALL_PLUGINS: "grafana-clock-panel,grafana-simple-json-datasource,grafana-worldmap-panel,grafana-piechart-panel" - -volumes: - -- ~/prometheus-grafana/grafana/data:/var/lib/grafana - -- /etc/timezone:/etc/timezone:ro - -- /etc/localtime:/etc/localtime:ro - -Если вам нужно указать конкретную версию Prometheus или Grafana, вы можете добавить номер версии, чтобы он выглядел так: - -services: - -prometheus: - -image: prom/prometheus:#get tag https://hub.docker.com/r/prom/prometheus/tags - ---- - -grafana: - -image: grafana/grafana:# Tags https://hub.docker.com/r/grafana/grafana/tags - -Также целью создания стека Prometheus/Grafana является мониторинг других сервисов, работающих, возможно, на разных серверах. Prometheus использует разные экспортеры для предоставления метрик, связанных с аппаратным обеспечением и ядром, в зависимости от отслеживаемого вами сервиса, наиболее распространенным из которых является node-exporter. Экспортеры устанавливаются на хостах, за которыми нужно следить. - -Поскольку у меня нет другого внешнего сервера, я собираюсь установить экспортер узлов на локальном компьютере. Для этого в конец файла _~/prometheus-grafana/docker-compose.yml_ добавляем: - -node-exporter: - -image: prom/node-exporter:latest - -container_name: monitoring_node_exporter - -restart: unless-stopped - -expose: - -- 9100 - -Также я должен обновить файл prometheus.yml, чтобы добавить node-exporter в качестве цели. - -static_configs: - -- targets: ['localhost:9090','node-exporter:9100'] - -Или формат: - -static_configs: - -- targets: - -- localhost:9090 - -- node-exporter:9100 - -Если у вас есть другие экспортеры из других сервисов, вы можете добавить в массив по подобию. - -### Запуск контейнеров с помощью docker-compose - -Перейдите в каталог данных: - -cd ~/prometheus-grafana - -Теперь все готово для запуска наших контейнеров. Чтобы запустить контейнеры, выполните команду, как показано ниже: - -docker compose up -d - -Проверте запуск контейнеров: - -docker compose ps - -Получите доступ к Prometheus и grafana из браузера, используя порты по умолчанию. Для Прометея мы используем _`http://serverip_or_hostname:9090`_. Если вы перейдете к **status** -> target , вы сможете увидеть статус своих целей, как показано ниже **_:_** - -![](https://techviewleo.com/wp-content/uploads/2021/03/How-to-run-prometheus-and-grafana-with-docker-compose.png?ezimgfmt=rs:640x143/rscb7/ng:webp/ngcb7) - -Для Grafana зайдите `http://serverip_or_hostname:3000`и войдите в систему, используя имя пользователя и пароль, указанные в `.ini` файле конфигурации. Учетные данные по умолчанию: _admin:admin_ - -![](https://techviewleo.com/wp-content/uploads/2021/03/How-to-run-prometheus-and-grafana-with-docker-compose-1.png?ezimgfmt=rs:640x214/rscb7/ng:webp/ngcb7) - -Теперь вы можете продолжить и создать информационную панель для мониторинга. Одна вещь, которую я отметил, заключается в том, что я не мог получить метрики для использования при создании графиков, когда «доступ» в разделе «HTTP» источников данных был установлен на «сервер». Мне пришлось установить его как «браузер», как показано ниже: - -![](https://techviewleo.com/wp-content/uploads/2021/03/How-to-run-prometheus-and-grafana-with-docker-compose-4.png?ezimgfmt=rs:640x326/rscb7/ng:webp/ngcb7) \ No newline at end of file diff --git a/docs/other/self-hosted.md b/docs/other/self-hosted.md new file mode 100755 index 0000000..7c6b5cf --- /dev/null +++ b/docs/other/self-hosted.md @@ -0,0 +1,8 @@ +## Self-Hosting + +Self-Hosting - это практика размещения и управления приложениями на собственных серверах вместо использования услуг поставщиков SaaS + +Ресурсы, с подборками сервисов и служб: + +- https://awesome-selfhosted.net/ +- https://github.com/awesome-foss/awesome-sysadmin diff --git a/docs/other/tsd/config-ce7.md b/docs/other/tsd/config-ce.md similarity index 100% rename from docs/other/tsd/config-ce7.md rename to docs/other/tsd/config-ce.md diff --git a/docs/other/tsd/index.md b/docs/other/tsd/index.md index 4bf095b..1db8b0a 100755 --- a/docs/other/tsd/index.md +++ b/docs/other/tsd/index.md @@ -1,9 +1,27 @@ -# Прошивка ТСД MC9200 на CE7.0 + TelnetCE -Весь процесс по перепрошивку ТСД можно разделить на 5 этапов: +# ТСД - Терминалы Сбора Данных - 1. Переустановка ОС - 2. Настройка ТСД - 3. Настройка Wi-Fi - 4. Настройка TelnetCE - 5. Установка TelnetCE +1. [Решение проблем с ТСД Motorola](../../other/tsd/troubleshooting.md) +2. [Компонентный ремонт](../../other/tsd/repair.md) +## Motorola MC 9090 + +1. [Переустановка ОС CE 5.0](../../other/tsd/reinstall-os/ce5.md) +2. [Переустановка ОС WM 6.1](../../other/tsd/reinstall-os/m61.md) + + +## Motorola MC 9200 + + 1. [Переустановка ОС](../../other/tsd/reinstall-os/ce7.md) + 2. [Настройка ТСД](../../other/tsd/config-ce.md) + 3. [Настройка Wi-Fi](../../other/tsd/config-wifi.md) + 4. [Настройка TelnetCE](../../other/tsd/config-telnetce.md) + 5. [Установка TelnetCE](../../other/tsd/install-telnetce.md) + +## Софт + +!!! note + + 7.0 версии не требуют лицензии + +1. [Zebra MC9000](http://www.wavelink.com/Zebra-MC9000-Emulators-downloads/) +2. [Zebra MC9100](http://www.wavelink.com/Zebra-MC9100-Emulators-downloads/) \ No newline at end of file diff --git a/docs/other/tsd/reinstall-os/ce5.md b/docs/other/tsd/reinstall-os/ce5.md new file mode 100755 index 0000000..93223b2 --- /dev/null +++ b/docs/other/tsd/reinstall-os/ce5.md @@ -0,0 +1,65 @@ +# Windows CE 5.0 + +Требуется скачать файлы: из [шары](https://disk.yandex.ru/d/YiTDTxSRqo1ddQ) по пути: `\2.Заливка ТСД\9090CE5\` + +![](../../../images/other/tsd/flashing-ce5_1.png) + +Далее устанавливаем на ПК программу [USBDownload](https://cloud.thest1tch.ru/s/gpeP3WbwqbWnKjG). Запускаем программу **USBDownload**, откроется окно: + +![](../../../images/other/tsd/flashing-ce5_2.png) + +Подключите кредл к компьютеру с помощью USB-кабеля. Переходим к ТСД. + +1. Вытаскиваем наполовину батарею +2. Зажимаем одновременно курок и кнопку питания (красная) +3. Вставляем батарею +4. Отпускаем кнопку питания, удерживая при этом курок +5. Вставляем в кредл не отпуская курок +6. После того как вставили отпускаем курок + +Если на экране появилась меню, то вход в IPL произведён удачно: + +![](../../../images/other/tsd/flashing-ce5_3.jpg) + +Прошивка терминала производится в следующей последовательности (файлы лежат по пути : `\9090CE5\hex\` + +=== "Для быстрой перезаливки" + 1. Application (909Xc50BenAP032.hex) + 2. Windows CE (909Xc50BenOS013000.hex) + +=== "Для полной перезаливки" + 1. Platform (909Xc50BenPL032.hex) + 2. Partition table (909Xc50BenPT015.hex) + 3. Application (909Xc50BenAP032.hex) + 4. Windows CE (909Xc50BenOS013000.hex) + 5. Monitor (909Xc50XenMO0152XX.hex) + +На терминале выбираем строку с необходимым модулем (например **Application**), нажимаем энтер. + +Выбираем USB – нажимаем энтер. + +![](../../../images/other/tsd/flashing-ce5_4.png) + +Выбираем USB standart – нажимаем энтер. + +![](../../../images/other/tsd/flashing-ce5_5.png) + +Выбираем Download – нажимаем энтер. + +![](../../../images/other/tsd/flashing-ce5_6.png) + +На экране видим ожидание загрузки файла. + +![](../../../images/other/tsd/flashing-ce5_7.png) + +На компьютере заходим в программу USB Download. Видим, что статус девайса -сonnected. Выбираем файл прошивки (начинаем прошивку с 909Xc50BenAP032.hex), затем жмём кнопку Load. + +![](../../../images/other/tsd/flashing-ce5_8.png) + +Начался процесс заливки в программе + +По окончании заливки появится сообщение об успешной установке. Для возврата на экран из пункта 3 нажимаем энтер. + +Для заливки второго файла, повторяем последние действия + +После заливки последнего файла, выбираем **System Reset** терминал перезагрузится и предложит откалибровать экран. После успешной калибровки экрана загрузится рабочий стол. \ No newline at end of file diff --git a/docs/other/tsd/reinstall-ce7.md b/docs/other/tsd/reinstall-os/ce7.md similarity index 51% rename from docs/other/tsd/reinstall-ce7.md rename to docs/other/tsd/reinstall-os/ce7.md index 931ff14..4bf1f73 100755 --- a/docs/other/tsd/reinstall-ce7.md +++ b/docs/other/tsd/reinstall-os/ce7.md @@ -1,14 +1,14 @@ -# Переустановка ОС +# Windows CE 7.0 -Для того, чтобы перезалить проблемный ТСД, работающий на **Windows CE 7.0**, требуется скачать файлы: из [шары](https://disk.yandex.ru/d/YiTDTxSRqo1ddQ) по пути: `\2.Заливка ТСД\9200CE7\OSUpdate` +требуется скачать файлы: из [шары](https://disk.yandex.ru/d/YiTDTxSRqo1ddQ) по пути: `\2.Заливка ТСД\9200CE7\OSUpdate` -![](../../images/other/tsd/flashing-tsd-mc9200-ce7_1.png) +![](../../../images/other/tsd/flashing-tsd-mc9200-ce7_1.png) -Папку **OSUpdate** скопировать на microSD карту, объемом не более 16 Гб и вставить в слот. Слот находится под клавиатурой. Как снять клавиатуру описано [здесь.](https://wiki.st1t.ru/ru/Hardware/TSD/Motorola/TSD-Motorola-repair-keyboard) +Папку `OSUpdate` скопировать на microSD карту, объемом не более 16 Гб и вставить в слот. Слот находится под клавиатурой. Как снять клавиатуру описано [здесь](https://wiki.st1t.ru/ru/Hardware/TSD/Motorola/TSD-Motorola-repair-keyboard). После этого, заходим в терминал, запускаем **File Explorer,** переходим на карту памяти в папку **OSUpdate** и запускаем файл `92N0c70Ben_SD`. Запустится процесс обновления файлов. -![](../../images/other/tsd/flashing-tsd-mc9200-ce7_2.png) +![](../../../images/other/tsd/flashing-tsd-mc9200-ce7_2.png) Вставляем ТСД в кредл или подключаем зарядку и ждем 3-7 минут. Столько занимает перезаливка. diff --git a/docs/other/tsd/reinstall-os/m61.md b/docs/other/tsd/reinstall-os/m61.md new file mode 100755 index 0000000..19074f4 --- /dev/null +++ b/docs/other/tsd/reinstall-os/m61.md @@ -0,0 +1,21 @@ +# Windows Mobile 6.1 + +Для того, чтобы перезалить проблемный ТСД, работающий на Windows Mobile 6.1, требуется скачать файлы: из [шары](https://cloud.st1t.ru/s/gpeP3WbwqbWnKjG) по пути: `2.Заливка ТСД/9090WM61/os` + +![](../../../images/other/tsd/flashing-m61_1.png) + +Эти файлы скопировать на SD карту, объемом не более 2 Гб и вставить в слот. Слот находится под клавиатурой(открутить 2 винта в углах клавиатуры) + +После этого, заходим в терминал, запускаем `File Explorer` переходим на карту памяти и запускаем файл `StartUpdLdr`. Вставляем ТСД в кредл и ждем 5-15 минут. Столько занимает перезаливка. + +После того, как ТСД перезалился, он попросит выполнить стартовую калибровку. + +Далее нам требуется залить все необходимые программы на ТСД и выполнить настройку Wi-Fi. Для этого снова вставляем ТСД в кредл, устанавливаем на ПК набор программ для работы кредла (папка `Soft/Lync`) ждем пока ТСД определится. + +ТСД в кредле и определился, те на него можно удаленно зайти для просмотра файлов. Копируем все файлы из папки `2.Заливка ТСД/9090WM61/2` в папку на ТСД **`Application`**, подтверждаем замену. + +На ТСД открываем File Explorer идем в папку `Application`, запускаем файл `Fusion_2.57.0.0.025B_WM61.ARM`, ставим все по умолчанию. По окончанию работы ТСД перезагрузится. После перезагрузки, удаляем файл `Fusion_2.57.0.0.025B_WM61.ARM`, чтобы очистить место. + +На ТСД открываем File Explorer идем в папку Application, запускаем файл `TelnetCE_70120.ARM`, выбираем установку в `/Application` + +Запускаем из папки **`Application`** поочередно файлы `9190_NoCalibration+RadioOn.reg` и `NoSleepCE.reg`, соглашаемся со всем. \ No newline at end of file diff --git a/docs/other/tsd/repair.md b/docs/other/tsd/repair.md new file mode 100755 index 0000000..4403173 --- /dev/null +++ b/docs/other/tsd/repair.md @@ -0,0 +1,40 @@ +# Ремонт ТСД + +## Замена бекап-батареи или курка + +Для замены бекап-батареи или курка, необходимо вынуть АКБ, открутить 2 болта за АКБ, открутить 2 болта возле сканера, снять кожух движением от себя. Сниматься будет тяжело, главное делать это аккуратно: + +![](../../images/other/tsd/repair_01.png) + +![](../../images/other/tsd/repair_02.png) + +![](../../images/other/tsd/repair_03.png) + +=== "Для бекап-батареи" + + Откручиваем болты и меняем. Если не влезает, то оборачивает батарею поролоном и вставляем в рукоять кожуха. + + ![](../../images/other/tsd/repair_07.png) + +=== "Для курка" + откручиваем болт и отколупываем курок. Отключаем на мать плате. + + ![](../../images/other/tsd/repair_04.png) + + ![](../../images/other/tsd/repair_05.png) + + ![](../../images/other/tsd/repair_06.png) + + Новый вставляем в гнездо, продевая через отверстие кабель. Закручиваем болт. Подключаем на мат плате. + +## Снятие клавиатуры + +В 90% случаем если сбоит клавиатура, то помогает ее снятие и протирка контактов изопропиловым спиртом. + +Если не помогло, то ее надо менять + +Снятие клавиатуры в случае ее поломки, производится путем откручивания 2 болтов и снятием клавиатуры на себя: + +![]../../images/other/tsd/repair_08.png) + +Последовательность снятия клавиатуры \ No newline at end of file diff --git a/docs/other/tsd/troubleshooting.md b/docs/other/tsd/troubleshooting.md new file mode 100755 index 0000000..5179dc9 --- /dev/null +++ b/docs/other/tsd/troubleshooting.md @@ -0,0 +1,50 @@ +# Решение проблем с ТСД Motorola + +## Не загружаются ТСД Motorola MC9090, висят на стартовом экране: + +Есть 2 способа по восстановлению работы: + +1. Clean Boot and Blank(позволяет скинуть вашу OS к заводским настройкам) +2. Перешить терминал через SD-карту + +### Clean Boot and Blank + +Открыть заднюю крышку, и отключить разъем резервной батареи (во многих случаях зависание ТСД, связано с тем, что терминал отложили в сторонку и забили на него на пару месяцев, резервная просела, и основная тоже) + +После делаем **Cold Boot.** + +=== "Способ 1" + + 1. Отстегнуть и немного вынуть батарею (до фиксатора). + 2. Нажать и держать курок (до конца всей процедуры). + 3. Нажать и отпустить красную кнопку включения питания. + 4. Защелкнуть батарею (вставить в терминал до упора, батарея должна зафиксироваться). + 5. Отпустить курок. Если Cold Boot был сделан правильно, должен мигнуть индикатор над клавиатурой. + +=== "Способ 2" + + 1. Для холодного рестарта достаточно вынуть наполовину батарейку (до фиксатора). + 2. Зажать красную кнопку (вкл/выкл). + 3. Вставить батарейку до упора. При этом не отпускать красную кнопку (может быть 20-30 секунд), пока не включится экран (вверху будет строка + 4. **Clean Boot and Blank** + +### Через карту SD + +Если Cold Boot выполнен и ничего не помогло, выполните перепрошивку терминала с использованием SD-карточки. Современная SD-карта не подойдет, нужна старая карта, обычно объемом 2 и менее ГБ. + +=== "Вход в режим IPL для WinCE" + + Для входа в IPL нужен Кредл. + + 1. Вынуть наполовину батарейку (до фиксатора). + 2. Зажать красную кнопку (вкл/выкл). + 3. Вставить батарейку до упора. При этом не отпуская красную кнопку зажать и держать курок (желтую кнопку), пока не включится экран. + 4. После включения экрана красную кнопку можно отпустить, желтую не отпуская вставить в кредл. + 5. Ждем 2-3 морганий индикатора (знак того что устройство правильно вставлено и есть контакт), потом отпустить курок. + 6. Режим IPL. + +=== "Прошивка при WM" + + Нужна карта памяти, с залитым Clean Boot And Blank. При помощи процедуры с красной кнопкой, зажатым курком и вставлянием батареи, запустить процесс сброса к заводским. Либо та-же операция только на флешке должна быть прошивка… + +[Больше способов сброса для разных ТСД](https://www.mobilitysolutions.cz/eng/faq/mobile-computers/factory-resets){ .md-button .md-button--primary } \ No newline at end of file diff --git a/docs/other/tsd/update-mc9090.md b/docs/other/tsd/update-mc9090.md new file mode 100755 index 0000000..d4b3f8e --- /dev/null +++ b/docs/other/tsd/update-mc9090.md @@ -0,0 +1,13 @@ +# Обновление MC9090 + +## WM5 на WM6.1 + +Нам понадобится флешка объёмом 2 Гб и прошивка с WM 6, которую можно скачать вот по этой [ссылке](https://cloud.st1t.ru/s/gpeP3WbwqbWnKjG). + +1. Распаковываем содержимое архива в корень флешки. +2. Помещаем флешку в ТСД (MC9090, если кто забыл). +3. Переходим на мобильном устройстве на флешку и запускаем там файл `StartUpdLdr_WM5.0.exe`, дожидаемся пока обновится **BootLoader**. +4. Как только обновление произошло и система вновь загрузилась запускаем `90XXw61X001Upgrade.exe`. Вставляем терминал в кредл и идём пить чай (кофе), т.к. процесс этот достаточно долгий. + +После окончания прошивки должна загрузится обновлённая **Windows Mobile 6.1**. + diff --git a/docs/overrides/main.html b/docs/overrides/main.html new file mode 100755 index 0000000..7c63bd8 --- /dev/null +++ b/docs/overrides/main.html @@ -0,0 +1,21 @@ +{% extends "base.html" %} + +{% block analytics %} + {{ super() }} + + + + +{% endblock %} \ No newline at end of file diff --git a/docs/proxmox/index.md b/docs/proxmox/index.md new file mode 100755 index 0000000..4072f53 --- /dev/null +++ b/docs/proxmox/index.md @@ -0,0 +1,26 @@ +# Proxmox VE + +## Failed to run lxc.hook.pre-start for container + +После добавления диска в систему, перестали запускаться контейнер. Гугление показало, что можно посмотреть через команду `pct start `, что мешает запуску. + +```bash +root@pve:~# pct start 101 +run_buffer: 322 Script exited with status 2 +lxc_init: 844 Failed to run lxc.hook.pre-start for container "101" +__lxc_start: 2027 Failed to initialize container "101" +startup for container '101' failed +``` + +Это тоже самое, что выводит web-gui при запуске контейнера в логах. + +Далее, попробуем смонтировать ресурсы контейнера на хосте, используя команду `pct mount ` + +```bash +root@pve:~# pct mount 101 +mounting container failed +directory '/dev/sda1 does not exist +``` +После этого надо смотреть, что не так с диском. + +В моем случае было, что из-за добавления диска, перестал работать один из портов на мат.плате. \ No newline at end of file diff --git a/docs/robots.txt b/docs/robots.txt new file mode 100755 index 0000000..528c4f7 --- /dev/null +++ b/docs/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Sitemap: https://st1t.ru/sitemap.xml \ No newline at end of file diff --git a/docs/software/chrome/download-bar.md b/docs/software/chrome/download-bar.md new file mode 100755 index 0000000..ccf7112 --- /dev/null +++ b/docs/software/chrome/download-bar.md @@ -0,0 +1,10 @@ +# Удаление кнопки загрузок + +Google изменила панель загрузки снизу окна на значек на панели инструментов. Мне такое не нравится, снизу более инофрмативно. Чтобы вернуть: + +1. Зайдите в `chrome://flags/#download-bubble`. +2. Щелкните раскрывающийся список и измените его на **«Disabled»**. + +!!! note + + Обратите внимание, что это экспериментальный флаг, и Google может удалить его в будущем. \ No newline at end of file diff --git a/docs/software/powershell/ad.md b/docs/software/powershell/ad.md new file mode 100755 index 0000000..6d5693e --- /dev/null +++ b/docs/software/powershell/ad.md @@ -0,0 +1,43 @@ +# Powershell. Active Directory + +## Список кто добавлял пользователя в домен +Чтобы узнать кто завел юзера в домен, будем использовать журналы безопасности контроллера домена Active Directory. + +При заведении нового пользователя в журнале безопасности контроллера домена (только того DC, на котором создавалась учетная запись) появляется событие с кодом EvenId 4720 (на DC должна быть включена политика аудита Audit account management в политике Default Domain Controller Policy). + +В описании этого события содержится строка A user account was created, а затем указан аккаунт, из-под которого была создана новая учетка пользователя AD. + +Скрипт для выгрузки всех событий создания аккаунтов из журнала контроллера домена за последние 24 часа может выглядеть следующим образом: + +```powershell +$time = (get-date) - (new-timespan -hour 24) +$filename = Get-Date -Format yyyy.MM.dd +$exportcsv=”c:\ps\ad_users_creators” + $filename + “.csv” +Get-WinEvent -FilterHashtable @{LogName="Security";ID=4720;StartTime=$Time}| Foreach { + $event = [xml]$_.ToXml() + if($event) + { + $Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S" + $CreatorUser = $event.Event.EventData.Data[4]."#text" + $NewUser = $event.Event.EventData.Data[0]."#text" + $dc = $event.Event.System.computer + $dc + “|” + $Time + “|” + $NewUser + “|” + $CreatorUser| out-file $exportcsv -append + } +} +``` +## Список кто последних созданных пользователей +```powershell +$lastday = ((Get-Date).AddDays(-1)) +$filename = Get-Date -Format yyyy.MM.dd +$exportcsv=”c:\ps\new_ad_users_” + $filename + “.csv” +Get-ADUser -filter {(whencreated -ge $lastday)} | Export-csv -path $exportcsv +``` +## Подсчет количества юзеров с полем +```powershell +(Get-ADUser -Filter {(L -Eq "Склад") -and (Enabled -eq $True)} -SearchBase "OU=user,DC=example,DC=com").count +``` +## Вывод юзеров в группе по логинам +```powershell +get-adgroup -filter {name -like "group"} -Properties Members | Get-ADGroupMember | select samaccountname +``` + diff --git a/docs/software/powershell/count-pages.md b/docs/software/powershell/count-pages.md new file mode 100755 index 0000000..e9f7e8c --- /dev/null +++ b/docs/software/powershell/count-pages.md @@ -0,0 +1,62 @@ +# Скрипт для отправки статистики по отпечатанным страницам принтеров на почту + +```powershell +function Send-Email { +$SMTPServer = "smtp.example.ru" +$port = 587 +$EmailFrom = "test@example.ru" +$EmailTo = "list@example.ru" +$Body = "Статистика по печати за $(get-date -f dd.MM.yyyy)" +$EmailSubject = "Статистика по печати за $(get-date -f dd.MM.yyyy)" +$EmailUser = "admin@example.ru" +$EmailPass = "password" +$Date = $(get-date -f yyyy.MM.dd) +$File = "c:\count\$Date.txt" + +$Message = New-Object System.Net.Mail.MailMessage $EmailFrom, $EmailTo +$Att = New-object Net.Mail.Attachment($File) +$Message.Subject = $EmailSubject +$Message.IsBodyHTML = $True +$Message.Body = $Body +$Message.Attachments.Add($Att) +$SMTP = New-Object Net.Mail.SmtpClient($SMTPServer) + +$SMTP.Credentials = New-Object System.Net.NetworkCredential($EmailUser, $EmailPass); +$SMTP.Send($Message) +$att.Dispose() +} + + +function Get-InfoPrintersKyocera { +$snmp = New-Object -ComObject olePrn.OleSNMP +cls +foreach ($n in 1..119) +{ + # IP можно изменить на свой + $ip = "192.168.1.$n" + if (Test-Connection $ip -Quiet -Count 2) + { + $snmp.open($ip, 'public', 1, 3000) + } + else {Continue} + + Try {$model = $snmp.Get('.1.3.6.1.2.1.25.3.2.1.3.1')} + Catch {Continue} + + New-Object PSObject -Property ([ordered]@{ + "Serial Number" = $snmp.Get('.1.3.6.1.4.1.1347.43.5.1.1.28.1') + "PrinterModel" = $model + "IP" = $ip +# "Description" = $snmp.Get('.1.3.6.1.2.1.1.1.0') + "TotalPageCount" = $snmp.Get('.1.3.6.1.4.1.1347.43.10.1.1.12.1.1') + "Date" = $(get-date -f dd.MM.yyyy) + }) + +} + +} + +Get-InfoPrintersKyocera | export-csv -NoTypeInformation -encoding UTF8 "C:\count\$(get-date -f yyyy.MM.dd)-PrinterCount.csv" + +Send-Email +``` \ No newline at end of file diff --git a/docs/software/powershell/index.md b/docs/software/powershell/index.md new file mode 100755 index 0000000..59da642 --- /dev/null +++ b/docs/software/powershell/index.md @@ -0,0 +1,164 @@ +# Небольшие заметки по использованию, чтобы не забывать.  + +## Перед выполнение скриптового файла + +```powershell +set-executionpolicy remotesigned +``` + +## Получить помощь + +```powershell +# помощь по команде Get-Process +get-help Get-Process + +# пример использования команды Get-Process +get-help Get-Process -examples + +# Получить методы возвращаемого объекта Get-Process +Get-Process| Get-Member + +# Узнать тип объекта. В данном случае переменной с каталогом пользователя +$home.GetType() +``` + +## Операции сравнения + +| **Операция** | **без учета регистра** | **с учетом регистра** | **C#** | +| --- | --- | --- | --- | +| равно(equal) | `-eq` | `-ceq` | `==` | +| не равно (not equal) | `-ne` | `-cne` | `!=` | +| больше чем (greater then) | `-gt` | `-cgt` | `>` | +| меньше чем (less than) | `-lt` | `-clt` | `<` | +| больше равно (greater or equal) | `-ge` | `-cge` | `>=` | +| меньше равно (less than or equal) | `-le` | `-cle` | `⇐` | + +## Операции со строками + +Полная аналогия с C#. Разбить строку по пробелам + +```powershell +$string = "Test string" +$string.split(" ") +``` + +Ищем в $string первый пробел + +```powershell +$string.IndexOf(" ") +``` + +## Предопределенные переменные + +- `$home` — каталог пользователя  +- `$NULL` — пусто  +- `$true` — истина  +- `$false` — ложь +- `$DebugPreference` (См. команду `Write-Debug`) + - «Continue» выводить отладку + - «SilentlyContinue» не выводить отладочную информацию.  + +## Работа с файлами + +Дописать `$string` новой строкой в файл $file + +```powershell +$string | Out-File $file -Append +``` + +Получить в `$string` содержимое файла $file + +```powershell +$string = get-content -Path $file +``` + +Проверить существование файла + +```powershell +Test-Path "C:test.txt" +``` + +Найти все файлы с определенным расширением расширением в каталоге и подкаталогах. Затем скопировать эти файлы в другой каталог. + +```powershell +$flist = get-childitem e:doc* -include *.pdf -recurse +$flist | ForEach-Object{$_.CopyTo("e:docall_pdf" + $_.PSChildName)} +``` + +Текущий каталог + +```powershell +$local = Get-Location +$local.Path # Рабочий каталог +$local.Drive.Root # Корень +$local.Drive.Name # Буква диска +$local.Drive.Used # Использовано диска +$local.Drive.Free # Свободно на диске +``` + +## Вывод текста на экран + +```powershell +# текст на который надо обратить внимание. Выделяется желтым. +Write-Warning("Текст требующий внимания") + +# Просто выводит текст +Write-Host("Просто текст") + +#включили вывод отладочной информации +$DebugPreference = "Continue" + +# вывели отладочную информацию +Write-Debug "Cannot open file." + +# отключили отладочную вывод отладочной информации +$DebugPreference = "SilentlyContinue" +``` + +## Сделать паузу на несколько секунд + +```powershell +Start-Sleep -s 15 # Пауза на 15 секунд +``` + +## Пауза в консоли, до нажатия Enter + +```powershell +Read-Host "Нажмите Enter" +``` + +## Работа с процессами + +Задача: убить все процессы с именем Notepad + +```powershell +# Способ №1 +get-process Notepad | Stop-Process + +# Способ №2 (Работает только с одним процессом) +$plist = get-process Notepad +$plist.Kill() + +# Способ №3 (то же что и 2, но все процессы) +$plist = get-process Notepad +$plist | ForEach-Object {$_.Kill()} +``` + +## Получить процессы и даты их запуска + +```powershell +Get-Process| Format-Table Name,StartTime -AutoSize +``` + +## Список сессий RDP + +```powershell +$servers = "server1", "server2" + +$ts = qwinsta /server:$server +$td = ($ts | where { $_ -notlike "*Подключено*" -and $_ -notlike "*services*" -and $_ -notlike "*Прием*"}) +foreach ($server in $servers) { + "Users: $server" + $td +} +``` \ No newline at end of file diff --git a/docs/software/powershell/send-mail.md b/docs/software/powershell/send-mail.md new file mode 100755 index 0000000..85957cf --- /dev/null +++ b/docs/software/powershell/send-mail.md @@ -0,0 +1,143 @@ +# Скрипт на powershell отправки сообщения на внешнюю почту с авторизацией smtp.yandex.ru + +```powershell +#Адрес сервера SMTP для отправки +$serverSmtp = "smtp.yandex.ru" +#Порт сервера +$port = 587 +#От кого +$From = "login@yandex.ru" +#Кому +$To = "myMail@mail.ru" +#Тема письма +$subject = "Письмо с вложением" +#Логин и пароль от ящики с которого отправляете login@yandex.ru +$user = "login" +$pass = "12345678" +#Путь до файла +$file = "C:\arhive.zip" +#Создаем два экземпляра класса +$att = New-object Net.Mail.Attachment($file) +$mes = New-Object System.Net.Mail.MailMessage +#Формируем данные для отправки +$mes.From = $from +$mes.To.Add($to) +$mes.Subject = $subject +$mes.IsBodyHTML = $true +$mes.Body = "

Тестовое письмо

" +#Добавляем файл +$mes.Attachments.Add($att) +#Создаем экземпляр класса подключения к SMTP серверу +$smtp = New-Object Net.Mail.SmtpClient($serverSmtp, $port) +#Сервер использует SSL +$smtp.EnableSSL = $true +#Создаем экземпляр класса для авторизации на сервере яндекса +$smtp.Credentials = New-Object System.Net.NetworkCredential($user, $pass); +#Отправляем письмо, освобождаем память +$smtp.Send($mes) +$att.Dispose() +``` + +## Класс System.Net.Mail.MailMessage + +### Конструкторы + +| Имя | Описание | +| --- | --- | +| MailMessage() | Инициализирует пустой экземпляр класса **MailMessage**. | +| MailMessage(MailAddress, MailAddress) | Инициализирует новый экземпляр класса **MailMessage**, используя указанные объекты класса **MailAddress**. | +| MailMessage(String, String) | Инициализирует новый экземпляр класса **MailMessage**, используя указанные объекты класса **String**. | +| MailMessage(String, String, String, String) | Инициализирует новый экземпляр класса **MailMessage** | + +### Свойства + +| Имя | Описание | +| --- | --- | +| AlternateViews | Возвращает коллекцию вложений, используемую для хранения альтернативных форм тела сообщения. | +| Attachments | Возвращает коллекцию вложений, используемую для хранения данных, вложенных в это сообщение электронной почты. | +| Bcc | Возвращает коллекцию адресов, содержащую получателей скрытой копии (BCC) данного сообщения электронной почты. | +| Body | Получает или задает основную часть сообщения. | +| BodyEncoding | Получает или задает кодировку, используемую для кодирования тела сообщения. | +| BodyTransferEncoding | Получает или задает кодирование передачи, используемое для кодирования тела сообщения. | +| CC | Возвращает коллекцию адресов, содержащую получателей копии (CC) данного сообщения электронной почты. | +| DeliveryNotificationOptions | Получает или задает уведомления о доставке данного сообщения электронной почты. | +| From | Получает или задает адрес отправителя данного сообщения электронной почты. | +| Headers | Возвращает заголовки электронной почты, передаваемые с данным сообщением. | +| HeadersEncoding | Получает или задает кодировку, используемую для пользовательских заголовков данного сообщения электронной почты. | +| IsBodyHtml | Получает или задает значение, показывающее, имеет ли основная часть почтового сообщения формат HTML. | +| Priority | Получает или задает приоритет данного сообщения электронной почты. | +| ReplyTo | Устаревшее. Получает или задает адрес ReplyTo для данного почтового сообщения. | +| ReplyToList | Получает или задает список адресов для ответа для данного сообщения электронной почты. | +| Sender | Получает или задает адрес отправителя данного сообщения электронной почты. | +| Subject | Получает или задает строку темы для данного сообщения электронной почты. | +| SubjectEncoding | Получает или задает кодировку, используемую для темы данного сообщения электронной почты. | +| To | Возвращает коллекцию адресов, содержащую получателей данного сообщения электронной почты. | + +### Методы + +| Имя | Описание | +| --- | --- | +| Dispose() | Освобождает все ресурсы, используемые объектом MailMessage. | +| Dispose(Boolean) | Освобождает неуправляемые ресурсы, используемые объектом MailMessage, а при необходимости освобождает также управляемые ресурсы. | +| Equals(Object) | Определяет, равен ли заданный объект текущему объекту. (Унаследовано от Object.)Finalize | +| Finalize | Позволяет объекту попытаться освободить ресурсы и выполнить другие операции по очистке перед тем, как объект будет утилизирован сборщиком мусора. (Унаследовано от Object.) | +| GetHashCode | Играет роль хэш-функции для определённого типа. (Унаследовано от Object.) | +| GetType | Возвращает объект класса Type для текущего экземпляра. (Унаследовано от Object.) | +| MemberwiseClone | Создает «поверхностную» копию текущего объекта. (Унаследовано от Object.) | +| ToString | Возвращает строковое представление текущего объекта. (Унаследовано от Object.) | + +## Класс Net.Mail.SmtpClient + +### Конструкторы + + +| Имя | Описание | +| --- | --- | +| SmtpClient() | Инициализирует новый экземпляр класса SmtpClient, используя параметры файла конфигурации. | +| SmtpClient(String) | Инициализирует новый экземпляр класса SmtpClient, который отправляет электронную почту с помощью указанного сервера SMTP. | +| SmtpClient(String, Int32) | Инициализирует новый экземпляр класса SmtpClient, который отправляет электронную почту с помощью указанного сервера SMTP и порта. | + +### Свойства + +| Имя | Описание | +| --- | --- | +| AlternateViews | Возвращает коллекцию вложений, используемую для хранения альтернативных форм тела сообщения. | +| ClientCertificates | Указывает, какие сертификаты следует использовать для установки SSL-подключения. | +| Credentials | Возвращает или задает учетные данные, используемые для проверки подлинности отправителя. | +| DeliveryFormat | Получает или задает формат доставки, используемый SmtpClient для отправки электронной почты. | +| DeliveryMethod | Указывает, как будут обрабатываться исходящие сообщения электронной почты. | +| EnableSsl | Указывает, использует ли SmtpClient протокол SSL для шифрования подключения. | +| Host | Возвращает или задает имя или IP-адрес хоста, используемого для SMTP-транзакций. | +| PickupDirectoryLocation | Возвращает или задает папку, в которой приложения сохраняют почтовые сообщения для обработки локальным SMTP-сервером. | +| Port | Возвращает или задает порт, используемый для SMTP-транзакций. | +| ServicePoint | Возвращает сетевое подключение, используемое для передачи сообщения электронной почты. | +| TargetName | Получает или задает имя поставщика услуг (SPN) для проверки подлинности при использовании расширенной защиты. | +| Timeout | Возвращает или задает значение, указывающее промежуток времени, после которого для синхронного вызова Send истечет время тайм-аута. | +| UseDefaultCredentials | Возвращает или задает значение Boolean, которое управляет отправкой учетных данных DefaultCredentials вместе с запросами. | + +### Методы + +| Имя | Описание | +| --- | --- | +| Dispose() | Отправляет сообщение QUIT на SMTP-сервер, правильно завершает TCP-подключение и освобождает все ресурсы, используемые текущим экземпляром класса SmtpClient. | +| Dispose(Boolean) | Отправляет сообщение QUIT на SMTP-сервер, правильно завершает TCP-подключение и освобождает все ресурсы, используемые текущим экземпляром класса SmtpClient, и при необходимости освобождает управляемые ресурсы. | +| Equals(Object) | Определяет, равен ли заданный объект текущему объекту. (Унаследовано от Object.) | +| Finalize | Позволяет объекту попытаться освободить ресурсы и выполнить другие операции по очистке перед тем, как объект будет утилизирован сборщиком мусора. (Унаследовано от Object.) | +| GetHashCode | Играет роль хэш-функции для определённого типа. (Унаследовано от Object.) | +| GetType | Возвращает объект класса Type для текущего экземпляра. (Унаследовано от Object.) | +| MemberwiseClone | Создает «поверхностную» копию текущего объекта. (Унаследовано от Object.) | +| OnSendCompleted | Создает событие SendCompleted. | +| Send(MailMessage) | Отправляет указанное сообщение на сервер SMTP для доставки. | +| Send(String, String, String, String) | Отправляет указанное сообщение электронной почты на сервер SMTP для доставки. Отправитель, получатели, тема и основная часть сообщения указываются с помощью объектов String. | +| SendAsync(MailMessage, Object) | Отправляет указанное сообщение электронной почты на сервер SMTP для доставки. Этот метод не блокирует вызывающий поток и позволяет вызывающей стороне передать объект в метод, вызванный после завершения операции. | +| SendAsync(String, String, String, String, Object) | Отправляет сообщение электронной почты на сервер SMTP для доставки. Отправитель, получатели, тема и основная часть сообщения указываются с помощью объектов String. Этот метод не блокирует вызывающий поток и позволяет вызывающей стороне передать объект в метод, вызванный после завершения операции. | +| SendAsyncCancel | Отменяет асинхронную операцию отправки сообщения электронной почты. | +| SendMailAsync(MailMessage) | Отправляет указанное сообщение SMTP-серверу для доставки в качестве асинхронной операции. | +| SendMailAsync(String, String, String, String) | Отправляет указанное сообщение SMTP-серверу для доставки в качестве асинхронной операции. . Отправитель, получатели, тема и основная часть сообщения указываются с помощью объектов String. | +| ToString | Возвращает строковое представление текущего объекта. (Унаследовано от Object.) | + +### События + +| Имя | Описание | +| --- | --- | +| SendCompleted | Происходит после завершения асинхронной операции по отправке электронной почты. | \ No newline at end of file diff --git a/docs/software/powershell/stop-process.md b/docs/software/powershell/stop-process.md new file mode 100755 index 0000000..72df60f --- /dev/null +++ b/docs/software/powershell/stop-process.md @@ -0,0 +1,25 @@ +# Остановка процесса + +Для завершения процессов в PowerShell предусмотрен отдельный командлет Stop-Process, позволяющий «убивать» один или несколько процессов сразу. Способов завершения процесса в PowerShell два — через идентификатор процесса и через его имя, используйте какой вам удобнее. + +## Через идентификатор процесса +```powershell +Stop-Process id_process +``` +Для получения списка ID активных процессов используется командлет `Get-Process`. +Допустим, вы хотите завершить зависший браузер Edge. Выполните в PowerShell команду `Get-Process` и посмотрите, какой ID имеет процесс MicrosoftEdge. + +В данном примере это 2196. Следовательно, команда завершения будет такой: +```powershell +Stop-Process 2196 +``` + +## Через имя процесса +Вместо идентификатора можно использовать имя процесса, только в этом случае потребуется указать ключ `–processname`. Вот так: +```powershell +Stop-Process -processname MicrosoftEdge +``` +Если нужно завершить работу нескольких приложений, их процессы указываются один за другим через запятую: +```powershell +Stop-Process -processname MicrosoftEdge, regedit +``` \ No newline at end of file diff --git a/docs/software/win/desk/del-hiberfil.md b/docs/software/win/desk/del-hiberfil.md new file mode 100755 index 0000000..874a51f --- /dev/null +++ b/docs/software/win/desk/del-hiberfil.md @@ -0,0 +1,17 @@ +# Удаление файла hiberfil.sys + +`hiberfil.sys` – это файл, который создается вашей операционной системой для корректной работы спящего режима. Когда операционная система переходит в спящий режим, все содержимое оперативной памяти вашего компьютера перемещается на жесткий диск именно в файл `hiberfil.sys`. Соответственно и объем данного файла будет равняться объему оперативки. + +Если у вас размер жесткого диска мал, и вам дорого каждый свободный мегабайт, или вы просто не используете режим гибернации и хотите освободить место на жестком диске, тогда эта инструкция для вас. + +Для отключения режима гибернации в Windows зайдите по адресу **Пуск – панель управления – электропитание**. И выберите пункт **Настройка плана электропитания**. + +Далее в открывшемся окне напротив пункта **Переводить компьютер в спящий режим** необходимо поставить значение **Никогда** и нажать кнопку **Сохранить изменения**. + +После этого файл hiberfil.sys по идее никуда не исчез. Удалить его можно следующим образом: + +1. Жмете **Пуск – Выполнить – Cmd** +2. Вводите в командной строке следующую команду:`powercfg -hibernate off` и жмете «Enter». + +Если у вас возникнет необходимость вернуть данный файл, то после в той же строке напишите: +`powercfg –hibernate on`. \ No newline at end of file diff --git a/docs/software/win/desk/del-mycomp.md b/docs/software/win/desk/del-mycomp.md new file mode 100755 index 0000000..808ca7a --- /dev/null +++ b/docs/software/win/desk/del-mycomp.md @@ -0,0 +1,39 @@ +# Удаление папок из Мой компьютер + +Многим с момента появления Windows 10 в 2015 не нравилось, что в **Мой компьютер** располагаются папки, такие как Видео; Загрузки; Музыка; Документы; Изображения; Рабочий стол; Объемные объекты. В этом руководстве, я напишу, как можно убрать все папки или только некоторые из них. + +## Удалить через реестр + +Для начала нужно узнать разрядность вашей операционной системы: зайдите в меню «Пуск» ⇒ параметры ⇒ система ⇒ о системе. Или нажмите на «Этот компьютер» правой клавишей мыши ⇒ выберите свойства ⇒ посмотрите напротив «Тип системы». + +Откройте реестр: в строке поиска или в меню выполнить, введите команду `regedit` и нажмите клавишу Enter. + +То есть, к примеру вы хотите удалить папку **«Видео»** из **«Этот компьютер»** - вам нужно: +- в редактор реестра перейти по пути `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\` +- Найти и удалить разделы `{A0953C92-50DC-43bf-BE83-3742FED03C9C}` и `{f86fa3ab-70d2-4fc7-9c99-fcbf05467f3a}` + +## Списки разделов + +=== "32-х разрядная" + + | Название папки | Путь | + | --- | --- | + | Объемные объекты | `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{0DB7E03F-FC29-4DC6-9020-FF41B59E513A}` | + | Рабочий стол | `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}` | + | Документы | `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {A8CDFF1C-4878-43be-B5FD-F8091C1C60D0}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{d3162b92-9365-467a-956b-92703aca08af}` | + | Загрузки | `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {374DE290-123F-4565-9164-39C4925E467B}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {088e3905-0323-4b02-9826-5d99428e115f}`| + | Музыка | `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {1CF1260C-4DD0-4ebb-811F-33C572699FDE}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {3dfdf296-dbec-4fb4-81d1-6a3438bcf4de}` | + | Изображения | `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {3ADD1653-EB32-4cb0-BBD7-DFA0ABB5ACCA}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {24ad3ad4-a569-4530-98e1-ab02f9417aa8}` | + | Видео | `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {A0953C92-50DC-43bf-BE83-3742FED03C9C}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {f86fa3ab-70d2-4fc7-9c99-fcbf05467f3a}`| + +=== "64-х разрядная" + + | Название папки | Путь | + | --- | --- | + | Объемные объекты | `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{0DB7E03F-FC29-4DC6-9020-FF41B59E513A}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {0DB7E03F-FC29-4DC6-9020-FF41B59E513A}` | + | Рабочий стол | `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}` | + | Документы | `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {A8CDFF1C-4878-43be-B5FD-F8091C1C60D0}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {d3162b92-9365-467a-956b-92703aca08af}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{A8CDFF1C-4878-43be-B5FD-F8091C1C60D0}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {d3162b92-9365-467a-956b-92703aca08af}` | + | Загрузки | `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{374DE290-123F-4565-9164-39C4925E467B}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{088e3905-0323-4b02-9826-5d99428e115f}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{374DE290-123F-4565-9164-39C4925E467B}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{088e3905-0323-4b02-9826-5d99428e115f}` | + | Музыка | `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {1CF1260C-4DD0-4ebb-811F-33C572699FDE}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {3dfdf296-dbec-4fb4-81d1-6a3438bcf4de}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {1CF1260C-4DD0-4ebb-811F-33C572699FDE}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ {3dfdf296-dbec-4fb4-81d1-6a3438bcf4de}` | + | Изображения | `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{3ADD1653-EB32-4cb0-BBD7-DFA0ABB5ACCA}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{24ad3ad4-a569-4530-98e1-ab02f9417aa8}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{3ADD1653-EB32-4cb0-BBD7-DFA0ABB5ACCA}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{24ad3ad4-a569-4530-98e1-ab02f9417aa8}` | + | Видео | `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{A0953C92-50DC-43bf-BE83-3742FED03C9C}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{f86fa3ab-70d2-4fc7-9c99-fcbf05467f3a}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{A0953C92-50DC-43bf-BE83-3742FED03C9C}`
`HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\{f86fa3ab-70d2-4fc7-9c99-fcbf05467f3a}` | \ No newline at end of file diff --git a/docs/software/win/desk/del-winapps.md b/docs/software/win/desk/del-winapps.md new file mode 100755 index 0000000..5963cec --- /dev/null +++ b/docs/software/win/desk/del-winapps.md @@ -0,0 +1,7 @@ +# Удаление папки WindowsApps + +```bash +takeown /f d:\windowsapps /r +icacls d:\windowsapps /grant administrators:F /t +rd d:\windowsapps /s /q +``` \ No newline at end of file diff --git a/docs/software/win/desk/dialux.md b/docs/software/win/desk/dialux.md new file mode 100755 index 0000000..69c7bb0 --- /dev/null +++ b/docs/software/win/desk/dialux.md @@ -0,0 +1,18 @@ +# Установка DialUX на Windows 10 + +Во время установки потребуется net.framework 3.5, который по умолчанию отключен в win10. для его установки нужно: + +``` +DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:D:\sources\sxs +``` + +где `D:\sources\sxs `\- путь к дистрибутиву верной версии Windows (работают сетевые пути) + +Пример: + +```plaintext +DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:"\\0400-97srv\distr\ISO\Windows 10 1903 x64 09.19\sources\sxs" +``` + +!!! warning + Все выполнять от админа \ No newline at end of file diff --git a/docs/software/win/desk/get-key-oem.md b/docs/software/win/desk/get-key-oem.md new file mode 100755 index 0000000..0c9b5e1 --- /dev/null +++ b/docs/software/win/desk/get-key-oem.md @@ -0,0 +1,8 @@ +# Получить ключ OEM версии + +Для того чтобы узнать ключ ОЕМ версии:  + +1. Запускаем программу [RW](https://cloud.mail.ru/public/ASkx/sFu2n11Ft) +2. В ней идем в **AСPI** таблицы +3. Вкладка **MSDM** +4. Самая нижняя строка - ключ \ No newline at end of file diff --git a/docs/software/win/desk/kms.md b/docs/software/win/desk/kms.md new file mode 100755 index 0000000..2d80117 --- /dev/null +++ b/docs/software/win/desk/kms.md @@ -0,0 +1,62 @@ +# KMS + +## Указание адреса KMS сервера + +В том случае, если в DNS вашего домена имеется корректная SRV запись, которая позволяет клиентам найти KMS сервер, этот шаг можно пропустить. + +!!! tip "Совет" + Проверить наличие такой записи в DNS можно помощью утилиты **nslookup** такой командой: `nslookup -q=SRV _VLMCS._TCP.example.com` + +Если клиент не может найти KMS сервер автоматически, можно указать адрес и порт (по умолчанию 1688) KMS сервера вручную: +``` +slmgr.vbs /skms <имя_или_IP_адрес_KMS_сервера>:1688 +``` + +![](../../../images/software/win-desk-kms1.jpg) + +## Типичные проблемы при KMS активации + +Наиболее часто пользователи Windows сталкиваются со следующими ошибками при активации операционной системы на KMS сервере: + +- `0xC004F074` – служба KMS недоступна. Это означает, что служба KMS на указанном сервере не запущена, либо доступ к нему ограничен. Рекомендуется проверить, что с клиента на сервере доступен TCP порт 1688 (по умолчанию) +- `0xC004F038` – в сети недостаточно клиентов для активации. Чтобы KMS сервер начал выдавать лицензии, необходимо, чтобы к нему за активацией обратилось как минимум 25 компьютеров с клиентскими версиями Windows или 5 клиентов с Windows Server. + +## Список KMS ключей клиентов + +Актуальные ключи доступны [тут](https://docs.microsoft.com/ru-ru/windows-server/get-started/kms-client-activation-keys#generic-volume-license-keys-gvlk) + +## Смена MAK ключа на KMS + +В первую очередь необходимо изменить ключ продукта (имеется в виду Windows) на один из общедоступных **KMS Client Setup Key**. Для каждой редакции Windows используется свой уникальный ключ. + +Откройте командную строку с правами администратора и наберите следующую команду: +``` +slmgr.vbs /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX +``` +где XXXX — KMS ключ для вашей версии и редакции Windows, который нужно взять из таблицы в конце статьи. + +Например, для активации Windows Server 2012 R2 на KMS сервере нужно задать ключ этой редакции Windows такой командой: +``` +slmgr.vbs /ipk D2N9P-3P6X9-2R39C-7RTCD-MDVJX +``` +![](../../../images/software/win-desk-kms2.png) + +## Проверка статуса KMS активации + +Если вы хотите проверить активирована ли ваша Windows, текущий статус активации системы можно получить с помощью команды: +``` +slmgr.vbs /dli +``` +![](../../../images/software/win-desk-kms3.png) + +В данном случае, видно, что система активирована на KMS сервере, а ее активация истекает через 180 дней. + +## Активация Windows на указанном KMS сервере + +Чтобы активировать Windows на указанном **KMS** сервере, выполните команду: +``` +Slmgr.vbs /ato +``` +И дождитесь появления надписи *Product activated successfully* + +![](../../../images/software/win-desk-kms4.png) \ No newline at end of file diff --git a/docs/software/win/desk/prnscr.md b/docs/software/win/desk/prnscr.md new file mode 100755 index 0000000..b73b490 --- /dev/null +++ b/docs/software/win/desk/prnscr.md @@ -0,0 +1,7 @@ +# Не работает клавиша PrnScr + +Удалить в реестре в ветке `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout` запись + +``` +"Scancode Map"=hex:00,00,00,00,00,00,00,00,04,00,00,00,2A,E0,37,E0,00,00,37,E0,00,00,54,00,00,00,00,00\ +``` \ No newline at end of file diff --git a/docs/software/win/desk/sendto.md b/docs/software/win/desk/sendto.md new file mode 100755 index 0000000..5bf8cc7 --- /dev/null +++ b/docs/software/win/desk/sendto.md @@ -0,0 +1,34 @@ +# Фишки функции Отправить (Send To) + +## «Открыть с помощью» для нескольких файлов + +Иногда необходимо открыть или отправить файлы в другую программу, отличную от той, что используется по умолчанию. Если выделить файл и нажать правой кнопкой мыши, то не в меню не окажется пункта «Открыть с помощью». В Windows 7 он доступен только для одного файла. + +Можно, конечно, открыть проигрыватель и перетащить в него файлы мышью. Но меню будет удобнее. Например, это актуально для программ, группирующих окна на панели задач. + +Данную проблему можно решить 2 путями - через реестр и то, как описано ниже. Способ через реестр страшный и его рассматривать пока не будем. + +![](../../../images/software/win-desk-sendto1.jpg) + +Это делается очень просто. + +Создайте ярлык к программе, в которой вы хотите открывать файлы. Щелкните по исполняемому файлу правой кнопкой мыши и выберите в меню пункт **Создать ярлык**. + +В **Пуск – Поиск** введите `shell:sendto` **-** откроется папка **SendTo**, содержащая несколько ярлыков. + +Скопируйте или переместите ярлык в эту папку. + +Теперь выделите несколько файлов, щелкните правой кнопкой мыши и выберите ваш ярлык в меню **Отправить**. Файлы откроются в указанной программе. + +Можно не ограничиваться ярлыками программ. Если у вас есть любимые папки, их ярлыки тоже можно поместить в папку **SendTo**, что позволит копировать и перемещать в них файлы. + +Но не спешите создавать ярлыки папок – возможно, они уже есть в меню, просто скрыты по умолчанию. + +## **Вариант для Outlook** + +создаем ярлык для **Outlook** и прописываем параметры: + +`/c ipm.note /a` где назначение ключей: + +- `/c ipm.note` - создать электронное сообщение; +- `/a `\- Создание элемента с указанным файлом в качестве вложения. \ No newline at end of file diff --git a/docs/software/win/desk/twinui.md b/docs/software/win/desk/twinui.md new file mode 100755 index 0000000..d4601c2 --- /dev/null +++ b/docs/software/win/desk/twinui.md @@ -0,0 +1,9 @@ +# TWINUI в свойствах файла + +При открытии jpg/png/bmp при помощи программы по умолчанию, пишет что не найден файл. По умолчанию в свойствах файла стоит **twinui**. + +Запускаем **powershell** с админскими правами и вставляем: + +```powershell +Repair-WindowsImage -Online –RestoreHealth +``` \ No newline at end of file diff --git a/docs/software/win/serv/cleanmgr.md b/docs/software/win/serv/cleanmgr.md new file mode 100755 index 0000000..901bae1 --- /dev/null +++ b/docs/software/win/serv/cleanmgr.md @@ -0,0 +1,23 @@ +# Очистка диска в Windows Server + +!!! note + По умолчанию утилита «Очистка диска» (Disk Cleanup) не установлена. + +Её можно получить, доустановив **Desktop Experience**. Однако, зачем на боевом сервере все эти рюшечки? Есть другой простой способ — необходимо скопировать уже имеющийся на диске **cleanmgr.exe** в `%systemroot%\System32` и **cleanmgr.exe.mui** в `%systemroot%\System32\en-US`. В различных редакциях, эти файлы лежат в разных местах. + +=== "2008 32bit" + + - `C:\Windows\winsxs\x86\_microsoft-windows-cleanmgr\_31bf3856ad364e35\_6.0.6001.18000\_none\_6d4436615d8bd133\cleanmgr.exe` + - `C:\Windows\winsxs\x86\_microsoft-windows-cleanmgr.resources\_31bf3856ad364e35\_6.0.6001.18000\_en-us\_5dd66fed98a6c5bc\cleanmgr.exe.mui` + +=== "2008 64bit" + + - `C:\Windows\winsxs\amd64\_microsoft-windows-cleanmgr.resources\_31bf3856ad364e35\_6.0.6001.18000\_en-us\_b9f50b71510436f2\cleanmgr.exe.mui` + - `C:\Windows\winsxs\amd64\_microsoft-windows-cleanmgr\_31bf3856ad364e35\_6.0.6001.18000\_none\_c962d1e515e94269\cleanmgr.exe.mui` + +==="2008 r2" + + - `C:\Windows\winsxs\amd64\_microsoft-windows-cleanmgr\_31bf3856ad364e35\_6.1.7600.16385\_none\_c9392808773cd7da\cleanmgr.exe` + - `C:\Windows\winsxs\amd64\_microsoft-windows-cleanmgr.resources\_31bf3856ad364e35\_6.1.7600.16385\_en-us\_b9cb6194b257cc63\cleanmgr.exe.mui` + +После того, как **cleanmgr.exe** оказался в `%systemroot%\System32`, а **cleanmgr.exe.mui** — в `%systemroot%\System32\en-US`, запустить «Очистку диска» можно либо из `%systemroot%\System32`, либо набрав в командной строке `cleanmgr`. Всё будет работать «как обычно». \ No newline at end of file diff --git a/docs/software/win/serv/mssql.md b/docs/software/win/serv/mssql.md new file mode 100755 index 0000000..d22434f --- /dev/null +++ b/docs/software/win/serv/mssql.md @@ -0,0 +1,51 @@ +# Microsoft SQL Server + +## Переименование сервера MS SQL + +Проверить имя: + +```sql +select @@Servername +``` + +Переименовать: + +```sql +sp_dropserver "old_name"; +GO +sp_addserver "new_name", local; +GO +``` + +## Скрипт бекапа базы + +```sql +RESTORE DATABASE [backup_base_new] +FROM DISK = 'C:\backup_base.bak' +WITH RECOVERY, +FILE=1, +MOVE 'backup_base&' TO 'C:\SQLDB\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\backup_base_new.mdf', +MOVE 'backup_base_log' TO 'C:\SQLDB\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\backup_base_new_log.ldf' +GO +``` + +## Удаление Log Shipping без второго сервера + +![Database Properties](http%3A%2F%2Flh3.googleusercontent.com%2F-8u7Gar1yO54%2FVbBhpg9uqII%2FAAAAAAAAAxk%2FscsPJqqKNRI%2Fimage_thumb%5B5%5D.png) + +![Error Deleting Log Shipping Configuration](http%3A%2F%2Flh3.googleusercontent.com%2F-0bXadZHuNDo%2FVbBhqc0arwI%2FAAAAAAAAAxw%2FiTkT7RLZsJQ%2Fimage_thumb%5B7%5D.png) + +![image](http%3A%2F%2Flh3.googleusercontent.com%2F-2JVo2aXEBAU%2FVbBhq7Ocz-I%2FAAAAAAAAAyA%2FMB1kTPPthvM%2Fimage_thumb%5B9%5D.png) + +Удаление через скрипт + +```sql +USE [master] +GO +EXEC sp_delete_log_shipping_primary_secondary @primary_database = '[Database_Name]', +@secondary_server = '[Secondary_Server_Name]', +@secondary_database = '[Database_Name]'; +GO +EXEC sp_delete_log_shipping_primary_database @database = '[Database_Name]' +GO +``` \ No newline at end of file diff --git a/docs/software/win/serv/rusus.md b/docs/software/win/serv/rusus.md new file mode 100755 index 0000000..19b1df3 --- /dev/null +++ b/docs/software/win/serv/rusus.md @@ -0,0 +1,7 @@ +# Удаление раскладки "RUS US" + +> Ситуация: подключаемся к терминальному серверу и получаем странные раскладки «RUS US» или «ENG RU», при этом их невозможно ни отключить ни удалить. + +[Решение](https://social.technet.microsoft.com/Forums/ru-RU/6231938b-44d8-4bca-8a2a-542c49d19fdd/-rus-us?forum=WS8ru) + +Добавляем в ветку реестра `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout` параметр `IgnoreRemoteKeyboardLayout` типа `DWORD` равный `00000001` \ No newline at end of file diff --git a/docs/software/win/serv/spp-hyperv.md b/docs/software/win/serv/spp-hyperv.md new file mode 100755 index 0000000..ecc5711 --- /dev/null +++ b/docs/software/win/serv/spp-hyperv.md @@ -0,0 +1,6 @@ +# Can't open Hyper-V Manager after HP SPP + +```powershell +Enable-PSRemoting +MOFCOMP %SYSTEMROOT%\System32\WindowsVirtualization.V2.mof +``` \ No newline at end of file diff --git a/docs/software/win/serv/vhd.md b/docs/software/win/serv/vhd.md new file mode 100755 index 0000000..f430a12 --- /dev/null +++ b/docs/software/win/serv/vhd.md @@ -0,0 +1,74 @@ +# VHD + +## Сжатие VHD + +Откройте командную строку с правами администратора и наберите в ней: + +```plaintext +diskpart +``` + +Выберите диск, который вы хотите сжать, указав диски и путь к vhd файлу: + +```plaintext +select vdisk file="c:\Data\DAT22GB.vhd" +``` + +Подключите диск в режиме чтения Read-only: + +```plaintext +attach vdisk readonly +``` + +И выполните команду сжатия: + +```plaintext +compact vdisk +``` + +В зависимости от размера виртуального диска, процедура сжатия может занять достаточно продолжительно время. + +Если сжатие прошло успешно, появится надпись: + +> DiskPart successfully compacted the virtual disk file + +Отмонтируйте диск VHD: + +```plaintext +detach vdisk +``` + +## Создание VHD через bat + +```bat +@Echo off +Title Creating Virtual Disk (VHD) v5& Cls +setlocal enabledelayedexpansion +CD /D %~dp0 + +:: Название будущего VHD файла и путь к нему +set vhd="D:\Win7-1.vhd" +:: Размер VHD файла +set mb=25000 +:: Задание бувы виртуальному диску +set installdisk=Y: + +:: Формирование файла сценария для diskpart +:: ------------------------------------------------------------------ +If Exist "%~dp0scene.ini" Del "%~dp0scene.ini" +Echo create vdisk file=%vhd% maximum=%mb% type=fixed >> scene.ini +Echo select vdisk file=%vhd% >> scene.ini +Echo attach vdisk >> scene.ini +Echo online disk noerr >> scene.ini +Echo attributes disk clear readonly noerr >> scene.ini +Echo create partition primary >> scene.ini +Echo online volume noerr >> scene.ini +Echo attributes volume clear readonly noerr >> scene.ini +Echo active >> scene.ini +Echo format quick fs=ntfs label="Win7 VHD" >> scene.ini +Echo assign letter=%installdisk% >> scene.ini + +diskpart /s "%~dp0%scene.ini" +timeout /t 2 > Nul +Del "%~dp0scene.ini" +``` \ No newline at end of file diff --git a/docs/software/win/serv/wim-esd.md b/docs/software/win/serv/wim-esd.md new file mode 100755 index 0000000..85aa601 --- /dev/null +++ b/docs/software/win/serv/wim-esd.md @@ -0,0 +1,50 @@ +# Конвертирование WIM в ESD + +!!! note + Как сконвертировать файл `*.WIM` в `*.ESD` с помощью программы **DISM**? + +![](../../../images/software/win-serv-wimesd_1.png) + +Для выполнения конвертирования необходимо открыть командную строку от имени администратора. Можно как обычный **CMD**, так и **PowerShell**. + +В открывшейся командой строке выполняем переход в директорию содержащую целевой WIM-архив. В моем случае это каталог `D:\WIM_to_ESD`. + +```plaintext +cd D:\WIM_to_ESD\ +``` + +![](../../../images/software/win-serv-wimesd_2.png) + +Данный каталог содержит файл **boot.wim**, который необходимо сконвертировать в формат `*.ESD`. Файл взят исключительно для примера. Выполняем команду получения информацию о архиве **boot.wim**. + +```plaintext +DISM /get-wiminfo /wimfile:boot.wim +``` + +![](../../../images/software/win-serv-wimesd_3.png) + +Данная информация необходима для выполнения команды экспорта существующих индексов (образов) архива **boot.wim**, в новый архив **boot.esd**. Выполняем поочередно команду экспорта для каждого индекса. + +```plaintext +DISM /export-image /sourceimagefile:boot.wim /sourceindex:1 /destinationimagefile:boot.esd /compress:recovery + +DISM /export-image /sourceimagefile:boot.wim /sourceindex:2 /destinationimagefile:boot.esd /compress:recovery +``` + +![](../../../images/software/win-serv-wimesd_4.png) + +Экспорт выполнен. Обратите внимание на размер полученного **boot.esd** файла. Он на 30% (~100 МБ) меньше файла **boot.wim**. + +![](../../../images/software/win-serv-wimesd_5.png) + +Все дело в том, что ESD-формат использует более эффективный алгоритм сжатия **LZMS**, вместо **LZX** у WIM. + +Выведем информацию о только что созданном архиве **boot.esd**, чтобы убедиться что все необходимые индексы образы присутствуют в нем. + +```plaintext +DISM /get-wiminfo /wimfile:boot.esd +``` + +![](../../../images/software/win-serv-wimesd_6.png) + +Конвертирование файла `*.WIM` в `*.ESD` на этом можно считать завершенным. \ No newline at end of file diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css new file mode 100755 index 0000000..47e33d0 --- /dev/null +++ b/docs/stylesheets/extra.css @@ -0,0 +1,31 @@ +th, td { + border: 1px solid var(--md-typeset-table-color); + border-spacing: 0; + border-bottom: none; + border-left: none; + border-top: none; +} + +.md-typeset__table { + line-height: 1; +} + +.md-typeset__table table:not([class]) { + font-size: .74rem; + border-right: none; +} + +.md-typeset__table table:not([class]) td, +.md-typeset__table table:not([class]) th { + padding: 9px; +} + +/* light mode alternating table bg colors */ +.md-typeset__table tr:nth-child(2n) { + background-color: #f8f8f8; +} + +/* dark mode alternating table bg colors */ +[data-md-color-scheme="slate"] .md-typeset__table tr:nth-child(2n) { + background-color: hsla(var(--md-hue),25%,25%,1) +} \ No newline at end of file diff --git a/docs/ubuntu/add-disk.md b/docs/ubuntu/add-disk.md new file mode 100755 index 0000000..601cea2 --- /dev/null +++ b/docs/ubuntu/add-disk.md @@ -0,0 +1,193 @@ +# Добавление диска + +Потребовалось добавить дополнительный диск в систему, система работает на Ubuntu 22 + +Первым делом посмотрим какие диски у нас есть в системе + +```plaintext +fdisk -l +``` + +![](../images/ubuntu/add-disk.png) + +## Создаем GPT + +Открываем наш диск утилитой parted: + +```plaintext +parted /dev/sdb +``` + +Откроется интерактивное меню утилиты — нажимаем `p` + +```plaintext +(parted) p +``` + +На экран будет выведена информация о разделах. Если они есть, удаляем командой `rm` + +```plaintext +(parted) rm 1 +``` + +- где `1` — номер раздела. Команду нужно повторить для всех разделов. Их список мы смотрели на предыдущем шаге командой `p`. +- если на разделе есть важная информация, ее нужно скопировать на другой носитель. + +Создаем разметку GPT: + +```plaintext +(parted) mklabel gpt +``` + +После выходим: + +```plaintext +(parted)quit +``` + +## Создадим таблицу разделов + +```plaintext +fdisk /dev/sdd +``` + +Выводим справку по работе с диском, нажимаем (m) + +```plaintext +Действие команды +a переключение флага загрузки +b редактирование метки диска bsd +c переключение флага dos-совместимости +d удаление раздела +l список известных типов файловых систем +m вывод этого меню +n добавление нового раздела +o создание новой пустой таблицы разделов DOS +p вывод таблицы разделов +q выход без сохранения изменений +s создание новой чистой метки диска Sun +t изменение id системы раздела +u изменение единиц измерения экрана/содержимого +v проверка таблицы разделов +w запись таблицы разделов на диск и выход +x дополнительная функциональность (только для экспертов) +``` + +Нас интересует «n добавление нового раздела», вводим `n` + +Далее указываем какой будет создаваемый раздел + +```plaintext +Действие команды +e расширенный +p основной раздел (1-4) +``` + +Указываем как основной раздел, вводим `p` + +```plaintext +Номер раздела (1-4, по умолчанию 1): +``` + +Задаем номер раздела или нажимаем Enter чтобы использовать значение по умолчанию (1), если 1 уже занят, то вводим другое значение. + +```plaintext +Первый сектор (2048-1048575999, по умолчанию 2048): +``` + +Нажимаем Enter используя значение по умолчанию, но можно и в ручную указать значение первого сектора. + +```plaintext +Last сектор, +секторы or +size{K,M,G} (2048-1048575999, по умолчанию 1048575999): +``` + +Нажимаем Enter используя значение по умолчанию, но можно и в ручную указать значение последнего сектора. + +После всех проделанных действий вводим `w` что означает сохранить настройки и выйти. + +```plaintext +Команда (m для справки): w +Таблица разделов была изменена! +Вызывается ioctl() для перечитывания таблицы разделов. +Синхронизируются диски. +``` + +Мы создали раздел на добавленном жестком диске, посмотрим что у нас получилось вводим `fdisk -l` + +Видим что раздел создан. Переходим к форматированию созданного раздела. + +## Форматирование в ext4 + +Воспользуемся командой **mkfs** + +Отформатируем наш `/dev/sdb1` в **ext4**, для этого выполним следующую команду: + +```plaintext +mkfs.ext4 /dev/sdb1 +``` + +Видим что все прошло успешно. Теперь смонтируем устройство к нашей системе. + +Выполним это с помощью команды mount + +```plaintext +mount -t ext4 /dev/sdb1 /usr/data +``` + +- `-t ext4` — указываем файловую систему подключаемого диска +- `/dev/sdb1` — Собственно, сам раздел который мы подключаем +- `/usr/data` — Точка монтирования место куда подключается наш раздел + +для размонтирования диска используем команду umount указав диск + +```plaintext +umount /dev/sdb1 +``` + +Проверили диск работает успешно, теперь сделаем автоматическую монтировку его в систему. + +```plaintext +sudo nano /etc/fstab +``` + +Переходим на новую строчку и добавляем строку такого вида: + +```plaintext +/dev/sdb1 /usr/data ext4 defaults 1 2 +``` + +Информация по строке: + +- `/dev/sdb1` — наш раздел, диск. +- `/usr/data` — точка монтирования, где будут файлы с нашего диска. +- `ext4` — файловая система, на примонтированном диске. +- `defaults `— все опции по умолчанию. +- `1 2` — Вспомогательные числа. + +Описание опций defaults и вспомогательных чисел + +- **defaults** Использовать настройки по умолчанию (rw,suid,dev,exec,auto,nouser,async) +- **rw / ro** — Разрешено чтение и запись / Разрешено только чтение +- **suid / nosuid** — Разрешение / Блокировка работы suid, и sgid бит +- **dev / nodev** — Интерпретировать / не интерпретировать блок специальных устройств на файловой системе. +- **exec / noexec** — Разрешить выполнять двоичные файлы находящиеся на этом диске / Запретить +- **auto / noauto** — Устройство будет устанавливаться автоматически при загрузке / Не будет +- **nouser / user** — Запрещение монтирование от всех кроме root (nouser) / Разрешение монтировать от лица любого пользователя +- **async / sync** — Запись и чтение на диске будут производиться асинхронно / Синхронно + +Вспомогательные числа: + +- 1 число — Возможные значения 0 или 1 — означает, включить/выключить резервное копирование файловой системы при помощи команды dump. Устаревшая опция. +- 2 число — Возможные значения 0, 1, 2, — означает порядок, в котором файловая система должна быть проверена при загрузке: +- 0 — не проверять. +- 1 — должна проверяться первой и использоваться как корневая. +- Для всех остальных систем ставится 2. + +Перезагружаемся и проверяем. + +Выставим права на папку, дабы мы могли туда записывать данные не только под рутом + +```plaintext +sudo chmod -R 777 /usr/data/ +sudo chown -R nobody:nogroup /usr/data/ +``` \ No newline at end of file diff --git a/docs/ubuntu/add-s3.md b/docs/ubuntu/add-s3.md new file mode 100755 index 0000000..b0eb2b3 --- /dev/null +++ b/docs/ubuntu/add-s3.md @@ -0,0 +1,86 @@ +# Добавление S3 хранилища + +В этой статье мы будем использовать S3FS для локального монтирования облачных сервисов хранения на Ubuntu. Их локальное монтирование позволит нам взаимодействовать с облачными провайдерами как с локальной файловой системой. + +!!! note + S3FS — это решение на основе FUSE (файловая система в пользовательском пространстве), используемое для монтирования Amazon S3 или совместимых решений для хранения данных. Как упоминалось выше, мы можем использовать системные команды с этим диском так же, как с другим жестким диском в системе. В смонтированных файловых системах s3fs мы можем просто использовать cp, mv и ls — базовые команды Unix, аналогичные выполняемым на локально подключенных дисках. + +## Обновление пакетов + +Для начала, обновим систему. Затем проверим и удалим существующие пакеты s3fs или fuse. + +```shell +sudo apt-get update +sudo apt-get remove fuse +``` + +## Установите зависимости + +Далее установим зависимости для `fuse` + +```shell +sudo apt-get install build-essential libcurl4-openssl-dev libxml2-dev mime-support +``` + +## Загрузим и скомпилируем последнюю версию S3FS + +Сейчас загрузим и скомпилируем последнию версию s3fs c GitHub. Версия в статье 1.74. После скачивания надо распаковать архив и скомпилировать исходный код в системе. + +```shell +sudo apt install s3fs +``` + +## Настройка ключа доступа + +Для настройки s3fs нам потребуется ключ доступа и секретный ключ вашей учетной записи S3. Вы можете получить доступ к этим ключам из панели управления вашей учетной записи. Получив эти ключи, создайте файл, назвав его `pwd-s3fs`. + +```shell +echo AWS_ACCESS_KEY_ID:AWS_SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs +### Примечание. Измените AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY на ваши фактические значения ключей. +``` +После создания файла паролей мы изменим права доступа к файлу из соображений безопасности. +```shell +chmod 600 ${HOME}/.passwd-s3fs +``` + +### Подключение для AWS S3 + +Наконец, мы можем смонтировать корзину s3, используя следующий набор команд. В этом примере мы используем имя корзины s3 как  `test-bucket` и точку монтирования как  `/s3mnt`. +```shell +mkdir /tmp/cache /s3mnt +chmod 777 /tmp/cache /s3mnt +s3fs -o use_cache=/tmp/cache mybucket /s3mnt -o passwd_file=${HOME}/.passwd-s3fs +``` + +Как только это будет успешно выполнено, вы сможете получить доступ ко всем файлам в тестовом сегменте, просто изменив каталоги на `/s3mnt`. + +### Подключение для других S3 + +Подключение других операторов хранилищ S3 несколько отличается от Amazon. нужно вручную указать конечную точку. Узнать её можно на странице конфигурации оператора. + +```shell +s3fs test-bucket /s3mnt -o passwd_file=/etc/pwd-s3fs -o url=https://url +``` + +## Как размонтировать + +Чтобы размонтировать папки, просто сделайте следующее:  +``` +umount -l /tmp/cache +umount -l /s3mnt +``` + +## Советы + +Если вы используете S3FS для веб-приложения, вам необходимо разрешить apache, www-data или … (пользователь который запускает веб-сервер) доступ к смонтированному S3. Добавьте параметр `allow_other`, чтобы заархивировать это, поэтому команда будет +```shell +s3fs -o allow_other,use_cache=/tmp/cache mybucket /s3mnt +``` + +В большинстве случаев вам нужно, чтобы S3 монтировался автоматически после каждой перезагрузки. Итак, добавьте строку ниже в `/etc/fstab`. Обратите внимание, что `fstab` запускается пользователем `root` , поэтому вам необходимо скопировать `.passwd-s3fs` в корневой домашний каталог, если его там нет (или вы можете использовать `/etc/passwd-s3fs` для общесистемной конфигурации) + +``` +s3fs#mybucket /s3mnt fuse allow_other,use_cache=/tmp/cache 0 0 +``` + +Если у вас есть более 1 корзины для подключения к одной и той же системе, вам нужно будет использовать сценарий запуска вместо fstab, потому что если вы используете fstab, будет смонтирована только 1 корзина. В Ubuntu использование local.rc может быть лучшим выбором для сценария запуска. \ No newline at end of file diff --git a/docs/ubuntu/backup/db.md b/docs/ubuntu/backup/db.md new file mode 100755 index 0000000..bb31f81 --- /dev/null +++ b/docs/ubuntu/backup/db.md @@ -0,0 +1,23 @@ +# Бекап баз данных + +## PostgreSQL + +Backup your databases +``` +docker exec -t your-db-container pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql` +``` +Restore your databases +``` +cat your_dump.sql | docker exec -i your-db-container psql -U postgres +``` + +## MySQL/MariaDB + +Backup your databases +``` +docker exec -t your-db-container mysqldump -u root -p | gzip > wpbackup.sql.gz +``` +Restore your databases +``` +docker exec -t your-db-container mysqldump -u root -p < wpbackup.sql +``` \ No newline at end of file diff --git a/docs/ubuntu/backup/google.md b/docs/ubuntu/backup/google.md new file mode 100755 index 0000000..25b0f1c --- /dev/null +++ b/docs/ubuntu/backup/google.md @@ -0,0 +1,40 @@ +# Резервное копирования на Google Диск + +Создаем файл скрипта: +``` +nano backup_gdrive.sh +``` +заполняем: +```bash +#!/bin/bash +#удаляем файлы которые старше 7дней с g.drive +/usr/sbin/drive list -q "modifiedDate < '$(date -d '-7 day' '+%Y-%m-%d')'" | cut -d" " -f1 - | xargs -L 1 drive delete -i +rsync -avzr --progress /var/www/html/ /var/www/tmp/backup/ >> result.txt +mysqldump joomla > /var/www/tmp/backup/backup.sql +tar -cvzf backup-$(date +%Y%m%d).tar.gz --absolute-names /var/www/tmp/backup/ >> result.txt +#закачиваем файл на g.drive +/usr/sbin/drive upload -f /root/bin/backup*.tar.gz >> result.txt +rm -rf /root/bin/backup*.tar.gz >> result.txt +echo "Посмотрите файл на наличие ошибок и исправьте их" | mail -a "/root/bin/result.txt" -s "Резервная копия создана" -- ******@gmail.com +rm -rf /root/bin/result.txt +rm -rf /var/www/tmp/backup/* +``` +Запустив скрипт, он выполнился: +``` +sh backup_gdrive.sh + +Removed file 'DSC_2151.NEF' +Removed file 'DSC_2153.NEF' +Removed file 'DSC_2159.NEF' +Removed file 'DSC_2226.NEF' +Removed file 'DSC_2225.NEF' +``` +Проверим наличие файла в Google Drive: +``` +drive list + +Id Title Size Created +1oay3-FAWBZRjHtma1cRTLrOvf3t8hRpD backup-20190904.tar.gz 9.6 MB 2019-09-04 14:43:25 +``` +С веб-интерфейса его так же видно, как и с консоли: +Таким образом мы получаем скрипт, который выполняет проверку на наличие старых бэкапов в облаке Google Диск, удаляет их если они попадают под требования, после чего создает резервную копию сайта и отправляет ее в это же облако. diff --git a/docs/ubuntu/backup/yandex.md b/docs/ubuntu/backup/yandex.md new file mode 100755 index 0000000..14e536f --- /dev/null +++ b/docs/ubuntu/backup/yandex.md @@ -0,0 +1,17 @@ +# Резервное копирования на Яндекс.Диск + +```bash +#!/bin/bash +rsync -avzr --progress /var/www/html/ /var/www/tmp/backup/ >> result.txt +mysqldump joomla > /var/www/tmp/backup/backup.sql +tar -cvzf backup-$(date +%Y%m%d).tar.gz --absolute-names /var/www/tmp/backup/ >> result.txt +find /mnt/yad/ -name "backup*.tar.gz" -mtime +7 -exec rm -f {} \; >> result.txt +rsync -avzr --progress /root/bin/backup*.tar.gz /mnt/yad/ >> result.txt +rm -rf /root/bin/backup*.tar.gz >> result.txt +echo "Посмотрите файл на наличие ошибок и исправьте их" | mail -a "/root/bin/result.txt" -s "Резервная копия создана" -- ****@gmail.com +rm -rf /root/bin/result.txt +rm -rf /var/www/tmp/backup/* +``` +Примеры заданий в кроне: +- `0 0 * * 6 /root/bin/backup.sh` — запускаем скрипт бэкапа каждую субботу в 00-00 +- `0 0 */3 * * /root/bin/backup.sh` — запускаем скрипт бэкапа каждые 3 дня в 00-00 \ No newline at end of file diff --git a/docs/other/ubuntu-bash-aliases.md b/docs/ubuntu/bash-aliases.md similarity index 100% rename from docs/other/ubuntu-bash-aliases.md rename to docs/ubuntu/bash-aliases.md diff --git a/docs/ubuntu/commands.md b/docs/ubuntu/commands.md new file mode 100755 index 0000000..a8833ba --- /dev/null +++ b/docs/ubuntu/commands.md @@ -0,0 +1,494 @@ +# Команды Ubuntu + +## Работа с файлами и директориями + +| Команда | Описание | +| --- | --- | +| `ls` | список файлов и каталогов | +| `ls -al` | форматированный список со скрытыми каталогами и файлами +| `cd dir` | сменить директорию на dir +| `cd` | сменить на домашний каталог +| `pwd` | показать текущий каталог +| `mkdir dir` | создать каталог dir +| `rm file` | удалить file +| `rm -r dir` | удалить каталог dir +| `rm -f file` | удалить форсированно file +| `rm -rf dir` | удалить форсированно каталог dir +| `cp file1 file2` | скопировать file1 в file2 +| `cp -r dir1 dir2` | скопировать dir1 в dir2; создаст каталог dir2, если он не существует +| `mv file1 file2` | переименовать или переместить file1 в file2. если file2 существующий каталог - переместить file1 в каталог file2 +| `ln -s file link` | создать символическую ссылку link к файлу file +| `touch file` | создать file +| `cat > file` | направить стандартный ввод в file +| `more file` | вывести содержимое file +| `head file` | вывести первые 10 строк file +| `tail file` | вывести последние 10 строк file +| `tail -f file` | вывести содержимое file по мере роста, начинает с последних 10 строк +| `cd /home` | перейти в директорию '/home' +| `cd ..` | перейти в директорию уровнем выше +| `cd ../..` | перейти в директорию двумя уровнями выше +| `cd ~user` | перейти в домашнюю директорию пользователя user +| `cd` | перейти в директорию, в которой находились до перехода в текущую директорию +| `pwd` | показать текущюю директорию +| `ls -F` | отобразить содержимое текущей директории с добавлением к именам символов, храктеризующих тип +| `ls -l` | показать детализированое представление файлов и директорий в текущей директории +| `ls -a` | показать скрытые файлы и директории в текущей директории +| `ls *[0-9]*` | показать файлы и директории содержащие в имени цифры +| `tree` | показать дерево файлов и директорий, начиная от корня (/) +| `lstree` - +| `mkdir dir1` | создать директорию с именем `dir1` +| `mkdir dir1 dir2` | создать две директории одновременно +| `mkdir -p /tmp/dir1/dir2` | создать дерево директорий +| `rmdir dir1` | удалить директорию с именем `dir1` +| `mv dir1 new_dir` | переименовать или переместить файл или директорию +| `cp dir/* .` | копировать все файлы директории dir в текущую директорию +| `cp -a /tmp/dir1 .` | копировать директорию dir1 со всем содержимым в текущую директорию +| `cp -a dir1 dir2` | копировать директорию dir1 в директорию dir2 +| `ln -s file1 lnk1` | создать символическую ссылку на файл или директорию +| `ln file1 lnk1` | создать "жёсткую" (физическую) ссылку на файл или директорию +| `touch -t 0712250000 fileditest` | модифицировать дату и время создания файла, при его отсутствии, создать файл с указанными датой и временем (YYMMDDhhmm) + +## Просмотр содержимого файлов + +| Команда | Описание | +| --- | --- | +| `cat file1` | вывести содержимое файла file1 на стандартное устройсво вывода +| `tac file1` | вывести содержимое файла file1 на стандартное устройсво вывода в обратном порядке (последняя строка становиться первой и т.д.) +| `more file1` | постраничный вывод содержимого файла file1 на стандартное устройство вывода +| `less file1` | постраничный вывод содержимого файла file1 на стандартное устройство вывода, но с возможностью пролистывания в обе стороны (вверх-вниз), поиска по содержимому и т.п. +| `head -2 file1` | вывести первые две строки файла file1 на стандартное устройство вывода. По-умолчанию выводится десять строк +| `tail -2 file1` | вывести последние две строки файла file1 на стандартное устройство вывода. По-умолчанию выводится десять строк +| `tail -f /var/log/messages` | выводить содержимое файла /var/log/messages на стандартное устройство вывода по мере появления в нём текста. + +## Сеть + +| Команда | Описание | +| --- | --- | +| `ping host` | пропинговать host и вывести результат +| `whois domain` | получить информацию whois для domain +| `dig domain` | получить DNS информацию domain +| `dig -x host` | реверсивно искать host +| `wget file` | скачать file +| `wget -c file` | продолжить остановленную закачку +| `ifconfig eth0` | показать конфигурацию сетевого интерфейса eth0 +| `ifup eth0` | активировать (поднять) интерфейс eth0 +| `ifdown eth0` | деактивировать (опустить) интерфейс eth0 +| `ifconfig eth0 192.168.1.1 netmask 255.255.255.0` | выставить интерфейсу eth0 ip-адрес и маску подсети +| `ifconfig eth0 promisc` | перевести интерфейс eth0 в promiscuous-режим для "отлова" пакетов (sniffing) +| `ifconfig eth0 -promisc` | отключить promiscuous-режим на интерфейсе eth0 +| `dhclient eth0` | активировать интерфейс eth0 в dhcp-режиме. +| `route -n` | вывести локальную таблицу маршрутизации +| `netstat -rn` | +| `netstat -ant \| awk '{print $6}' \| sort \| uniq -c \| sort -n` | показ количества соединений по типу +| `route add -net 0/0 gw IP_Gateway` | задать ip-адрес шлюза по умолчанию (default gateway) +| `route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1` | добавить статический маршрут в сеть 192.168.0.0/16 через шлюз с ip-адресом 192.168.1.1 +| `route del 0/0 gw IP_gateway` | удалить ip-адрес шлюза по умолчанию (default gateway) +| `echo "1" > /proc/sys/net/ipv4/ip_forward` | разрешить пересылку пакетов (forwarding) +| `hostname` | отобразить имя компьютера +| `host www.linuxguide.it` | разрешить имя www.linuxguide.it хоста в ip-адрес и наоборот +| `host 62.149.140.85` | +| `ip link show` | отобразить состояние всех интерфейсов +| `mii-tool eth0` | отобразить статус и тип соединения для интерфейса eth0 +| `ethtool eth0` | отображает статистику интерфеса eth0 с выводом такой информации, как поддерживаемые и текущие режимы соединения +| `netstat -tupn` | отображает все установленные сетевые соединения по протоколам TCP и UDP без разрешения имён в ip-адреса и PID'ы и имена процессов, обеспечивающих эти соединения +| `netstat -tupln` | отображает все сетевые соединения по протоколам TCP и UDP без разрешения имён в ip-адреса и PID'ы и имена процессов, слушающих порты +| `tcpdump tcp port 80` | отобразить весь трафик на TCP-порт 80 (обычно - HTTP) +| `iwlist scan` | просканировать эфир на предмет, доступности беспроводных точек доступа +| `iwconfig eth1` | показать конфигурацию беспроводного сетевого интерфейса eth1 + +## Microsoft Windows networks(SAMBA) + +| Команда | Описание | +| --- | --- | +| `nbtscan ip_addr` | разрешить netbios-имя nbtscan не во всех системах ставится по-умолчанию, возможно, придётся доустанавливать вручную. nmblookup включен в пакет samba. +| `nmblookup -A ip_addr` | +| `smbclient -L ip_addr/hostname` | отобразить ресурсы, предоставленные в общий доступ на windows-машине +| `smbget -Rr smb://ip_addr/share` | подобно wget может получить файлы с windows-машин через smb-протокол +| `mount -t smbfs -o username=user,password=pass //winclient/share /mnt/share` | смонтировать smb-ресурс, предоставленный на windows-машине, в локальную файловую систему + +## Управление процессами + +| Команда | Описание | +| --- | --- | +| `ps` | вывести ваши текущие активные процессы +| `top` | показать все запущенные процессы +| `kill pid` | убить процесс с id pid +| `killall proc` | убить все процессы с именем proc +| `bg` | список остановленных и фоновых задач; продолжить выполнение остановленной задачи в фоне +| `fg` | выносит на передний план последние задачи +| `fg n` | вынести задачу n на передний план + +## Права доступа на файлы + +| Команда | Описание | +| --- | --- | +| `ls -lh` | просмотр полномочий на файлы и директории в текущей директории +| `ls /tmp \| pr -T5 -W$COLUMNS` | вывести содержимое директории /tmp и разделить вывод на пять колонок +| `chmod ugo+rwx directory1` | добавить полномочия на директорию directory1 ugo(User Group Other)+rwx(Read Write eXecute) - всем полные права. Аналогичное можно сделать таким образом `chmod 777 directory1` +| `chmod go-rwx directory1` | отобрать у группы и всех остальных все полномочия на директорию directory1. +| `chown user1 file1` | назначить владельцем файла file1 пользователя user1 +| `chown -R user1 directory1` | назначить рекурсивно владельцем директории directory1 пользователя user1 +| `chgrp group1 file1` | сменить группу-владельца файла file1 на group1 +| `chown user1:group1 file1` | сменить владельца и группу владельца файла file1 +| `find / -perm -u+s` | найти, начиная от корня, все файлы с выставленным SUID +| `chmod u+s /bin/binary_file` | назначить SUID-бит файлу /bin/binary_file. Это даёт возможность любому пользователю запускать на выполнение файл с полномочиями владельца файла. +| `chmod u-s /bin/binary_file` | снять SUID-бит с файла /bin/binary_file. +| `chmod g+s /home/public` | назначить SGID-бит директории /home/public. +| `chmod g-s /home/public` | снять SGID-бит с директории /home/public. +| `chmod o+t /home/public` | назначить STIKY-бит директории /home/public. Позволяет удалять файлы только владельцам +| `chmod o-t /home/public` | снять STIKY-бит с директории /home/public + +## Специальные атрибуты файлов + +| Команда | Описание | +| ------- | -------- | +| `chattr +a file1` | позволить открывать файл на запись только в режиме добавления +| `chattr +c file1` | позволяет ядру автоматически сжимать/разжимать содержимое файла. +| `chattr +d file1` | указавет утилите dump игнорировать данный файл во время выполнения backup'а +| `chattr +i file1` | делает файл недоступным для любых изменений: редактирование, удаление, перемещение, создание линков на него. +| `chattr +s file1` | позволяет сделать удаление файла безопасным, т.е. выставленный атрибут s говорит о том, что при удалении файла, место, занимаемое файлом на диске заполняется нулями, что предотвращяет возможность восстановления данных. +| `chattr +S file1` | указывает, что, при сохранении изменений, будет произведена синхронизация, как при выполнении команды sync +| `chattr +u file1` | данный атрибут указывает, что при удалении файла содержимое его будет сохранено и при необходимости пользователь сможет его восстановить +| `lsattr` | показать атрибуты файлов + +## SSH + +| Команда | Описание | +| --- | --- | +| `ssh user@host` | подключится к host как user +| `ssh -p port user@host` | подключится к host на порт port как user +| `ssh-copy-id user@host` | добавить ваш ключ на host для user чтобы включить логин без пароля и по ключам + +## Поиск + +| Команда | Описание | +| --- | --- | +| `grep pattern files` | искать pattern в files +| `grep -r pattern dir` | искать рекурсивно pattern в dir +| `command \| grep pattern` | искать pattern в выводе command +| `locate file` | найти все файлы с именем file +| `find / -name file1` | найти файлы и директории с именем file1. Поиск начать с корня (/) +| `find / -user user1` | найти файл и директорию принадлежащие пользователю user1. Поиск начать с корня (/) +| `find /home/user1 -name "*.bin"` | Найти все файлы и директории, имена которых оканчиваются на '. bin'. Поиск начать с '/ home/user1' +| `find /usr/bin -type f -atime +100` | найти все файлы в '/usr/bin', время последнего обращения к которым более 100 дней +| `find /usr/bin -type f -mtime -10` | найти все файлы в '/usr/bin', созданные или изменённые в течении последних 10 дней +| `find / -name *.rpm -exec chmod 755 '{}' \;` | найти все фалы и директории, имена которых оканчиваются на '.rpm', и изменить права доступа к ним +| `find / -xdev -name "*.rpm"` | найти все фалы и директории, имена которых оканчиваются на '.rpm', игнорируя съёмные носители, такие как cdrom, floppy и т.п. +| `locate "*.ps"` | найти все файлы, сожержащие в имени '.ps'. Предварительно рекомендуется выполнить команду 'updatedb' +| `whereis halt` | показывает размещение бинарных файлов, исходных кодов и руководств, относящихся к файлу 'halt' +| `which halt` | отображает полный путь к файлу 'halt' + +## Системная информация + +| Команда | Описание | +| --- | --- | +| `date` | вывести текущую дату и время +| `cal` | вывести календарь на текущий месяц +| `uptime` | показать текущий аптайм +| `w` | показать пользователей онлайн +| `whoami` | имя, под которым вы залогинены +| `finger user` | показать информацию о user +| `uname -a` | показать информацию о ядре +| `cat /proc/cpuinfo` | информация ЦПУ +| `cat /proc/meminfo` | информация о памяти +| `man command` | показать мануал для command +| `df` | показать инф. о использовании дисков +| `du` | вывести “вес” текущего каталога +| `free` | использование памяти и swap +| `whereis app` | возможное расположение программы app +| `which app` | какая app будет запущена по умолчанию +| `arch` | отобразить архитектуру компьютера +| `uname -m` | +| `uname -r` | отобразить используемую версию ядра +| `dmidecode -q` | показать аппаратные системные компоненты - (SMBIOS / DMI) +| `hdparm -i /dev/hda` | вывести характеристики жесткого диска +| `hdparm -tT /dev/sda` | протестировать производительность чтения данных с жесткого диска +| `cat /proc/cpuinfo` | отобразить информацию о процессоре +| `cat /proc/interrupts` | показать прерывания +| `cat /proc/meminfo` | проверить использование памяти +| `cat /proc/swaps` | показать файл(ы) подкачки +| `cat /proc/version` | вывести версию ядра +| `cat /proc/net/dev` | показать сетевые интерфейсы и статистику по ним +| `cat /proc/mounts` | отобразить смонтированные файловые системы +| `lspci -tv` | показать в виде дерева PCI устройства +| `lsusb -tv` | показать в виде дерева USB устройства +| `date ` | вывести системную дату +| `cal 2007` | вывести таблицу-календарь 2007-го года +| `date 041217002007.00` | установить системные дату и время ММДДЧЧммГГГГ.СС (МесяцДеньЧасМинутыГод.Секунды) +| `clock -w` | сохранить системное время в BIOS + +## Остановка системы + +| Команда | Описание | +| --- | --- | +| `shutdown -h now` | Остановить систему +| `init 0` | +| `telinit 0` | +| `shutdown -h hours:minutes` | запланировать остановку системы на указанное время +| `shutdown -c` | отменить запланированную по расписанию остановку системы +| `shutdown -r now` | перегрузить систему +| `reboot` | +| `logout` | выйти из системы + +## Архивация + +| Команда | Описание | +| --- | --- | +| `tar cf file.tar files` | создать tar-архив с именем file.tar содержащий files +| `tar xf file.tar` | распаковать file.tar +| `tar czf file.tar.gz files` | создать архив tar с сжатием Gzip +| `tar xzf file.tar.gz` | распаковать tar с Gzip +| `tar cjf file.tar.bz2` | создать архив tar с сжатием Bzip2 +| `tar xjf file.tar.bz2` | распаковать tar с Bzip2 +| `gzip file` | сжать file и переименовать в file.gz +| `gzip -d file.gz` | разжать file.gz в file +| `bunzip2 file1.bz2` | разжимает файл 'file1.gz' +| `gunzip file1.gz` | +| `gzip file1` | сжимает файл 'file1' +| `bzip2 file1` | +| `gzip -9 file1` | сжать файл file1 с максимальным сжатием +| `rar a file1.rar test_file` | создать rar-архив 'file1.rar' и включить в него файл test_file +| `rar a file1.rar file1 file2 dir1` | создать rar-архив 'file1.rar' и включить в него file1, file2 и dir1 +| `rar x file1.rar` | запаковать rar-архив +| `unrar x file1.rar` | распаковать rar-архив +| `tar -cvf archive.tar file1` | создать tar-архив archive.tar, содержащий файл file1 +| `tar -cvf archive.tar file1 file2 dir1` | создать tar-архив archive.tar, содержащий файл file1, file2 и dir1 +| `tar -tf archive.tar` | показать содержимое архива +| `tar -xvf archive.tar` | распаковать архив +| `tar -xvf archive.tar -C /tmp` | распаковать архив в /tmp +| `tar -cvfj archive.tar.bz2 dir1` | создать архив и сжать его с помощью bzip2(Прим.переводчика. ключ -j работает не во всех *nix системах) +| `tar -xvfj archive.tar.bz2` | разжать архив и распаковать его(Прим.переводчика. ключ -j работает не во всех *nix системах) +| `tar -cvfz archive.tar.gz dir1` | создать архив и сжать его с помощью gzip +| `tar -xvfz archive.tar.gz` | разжать архив и распаковать его +| `zip file1.zip file1` | создать сжатый zip-архив +| `zip -r file1.zip file1 file2 dir1` | создать сжатый zip-архив и со включением в него нескольких файлов и/или директорий +| `unzip file1.zip` | разжать и распаковать zip-архив + +## Клавиатурные сочетания + +| Команда | Описание | +| --- | --- | +| `Ctrl+C` | завершить текущую команду +| `Ctrl+Z` | остановить текущую команду, продолжть с fg на переднем плане или bg в фоне +| `Ctrl+D` | разлогиниться, тоже самое, что и exit +| `Ctrl+W` | удалить одно слово в текущей строке +| `Ctrl+U` | удалить строку + +## Монтирование файловых систем + +| Команда | Описание | +| --- | --- | +| `mount /dev/hda2 /mnt/hda2` | монтирует раздел 'hda2' в точку монтирования '/mnt/hda2'. Убедитесь в наличии директории-точки монтирования '/mnt/hda2' +| `umount /dev/hda2` | размонтирует раздел 'hda2'. Перед выполнением, покиньте '/mnt/hda2' +| `fuser -km /mnt/hda2` | принудительное размонтирование раздела. Применяется в случае, когда раздел занят каким-либо пользователем +| `umount -n /mnt/hda2` | выполнить размонитрование без занесения информации в /etc/mtab. Полезно когда файл имеет атрибуты "только чтение" или недостаточно места на диске +| `mount /dev/fd0 /mnt/floppy` | монтировать флоппи-диск +| `mount /dev/cdrom /mnt/cdrom` | монтировать CD или DVD +| `mount /dev/hdc /mnt/cdrecorder` | монтировать CD-R/CD-RW или DVD-R/DVD-RW(+-) +| `mount -o loop file.iso /mnt/cdrom` | смонтировать ISO-образ +| `mount -t vfat /dev/hda5 /mnt/hda5` | монтировать файловую систему Windows FAT32 +| `mount -t smbfs -o username=user,password=pass //winclient/share /mnt/share` | монтировать сетевую файловую систему Windows (SMB/CIFS) +| `mount -o bind /home/user/prg /var/ftp/user` | "монтирует" директорию в директорию (binding). Доступна с версии ядра 2.4.0. Полезна, например, для предоставления содержимого пользовательской директории через ftp при работе ftp-сервера в "песочнице" (chroot), когда симлинки сделать невозможно. Выполнение данной команды сделает копию содержимого /home/user/prg в /var/ftp/user + +## Дисковое пространство + +| Команда | Описание | +| --- | --- | +| `df -h` | отображает информацию о смонтированных разделах с отображением общего, доступного и используемого пространства (Прим.переводчика. ключ -h работает не во всех *nix системах) +| `ls -lSr \| more` | выдаёт список файлов и директорий рекурсивно с сортировкой по возрастанию размера и позволяет осуществлять постраничный просмотр +| `du -sh dir1` | подсчитывает и выводит размер, занимаемый директорией 'dir1' (Прим.переводчика. ключ -h работает не во всех *nix системах) +| `du -sk * \| sort -rn` | отображает размер и имена файлов и директорий, с соритровкой по размеру +| `rpm -q -a --qf '%10{SIZE}t%{NAME}n' \| sort -k1,1n` | показывает размер используемого дискового пространства, занимаемое файлами rpm-пакета, с сортировкой по размеру (fedora, redhat и т.п.) + +## Пользователи и группы + +| Команда | Описание | +| --- | --- | +| `groupadd group_name` | создать новую группу с именем group_name +| `groupdel group_name` | удалить группу group_name +| `groupmod -n new_group_name old_group_name` | переименовать группу old_group_name в new_group_name +| `useradd -c "Nome Cognome" -g admin -d /home/user1 -s /bin/bash user1` | создать пользователя user1, назначить ему в качестве домашнего каталога /home/user1, в качестве shell'а /bin/bash, включить его в группу admin и добавить комментарий Nome Cognome +| `useradd user1` | создать пользователя user1 +| `userdel -r user1` | удалить пользователя user1 и его домашний каталог +| `usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1` | изменить атрибуты пользователя +| `passwd` | сменить пароль +| `passwd user1` | сменить пароль пользователя user1 (только root) +| `chage -E 2005-12-31 user1` | установить дату окончания действия учётной записи пользователя user1 +| `pwck` | проверить корректность системных файлов учётных записей. Проверяются файлы /etc/passwd и /etc/shadow +| `grpck` | проверяет корректность системных файлов учётных записей. Проверяется файл/etc/group +| `newgrp [-] group_nam` | изменяет первичную группу текущего пользователя. Если указать "-", ситуация будет идентичной той, в которой пользователь вышил из системы и снова вошёл. Если не указывать группу, первичная группа будет назначена из /etc/passwd + +## DEB пакеты (Debian, Ubuntu и тому подобное) + +| Команда | Описание | +| --- | --- | +| `dpkg -i package.deb` | установить / обновить пакет +| `dpkg -r package_name` | удалить пакет из системы +| `dpkg -l` | показать все пакеты, установленные в систему +| `dpkg -l \| grep httpd` | среди всех пакетов, установленных в системе, найти пакет содержащий в своём имени "httpd" +| `dpkg -s package_name` | отобразить инфрмацию о конкретном пакете +| `dpkg -L package_name` | вывести список файлов, входящих в пакет, установленный в систему +| `dpkg --contents package.deb` | отобразить список файлов, входящих в пакет, который ешё не установлен в систему +| `dpkg -S /bin/ping` | найти пакет, в который входит указанный файл. +| `apt` | средство управление пакетами (Debian, Ubuntu и тому подобное) +| `apt-get install package_name` | установить / обновить пакет +| `apt-cdrom install package_name` | установить / обновить пакет с cdrom'а +| `apt-get update` | получить обновлённые списки пакетов +| `apt-get upgrade` | обновить пакеты, установленные в систему +| `apt-get remove package_name` | удалить пакет, установленный в систему с сохранением файлов конфигурации +| `apt-get purge package_name` | удалить пакет, установленный в систему с удалением файлов конфигурации +| `apt-get check` | проверить целостность зависимостей +| `apt-get clean` | удалить загруженные архивные файлы пакетов +| `apt-get autoclean` | удалить старые загруженные архивные файлы пакетов + +## Манипуляции с текстом + +| Команда | Описание | +| --- | --- | +| `cat file_originale \| [operation: sed, grep, awk, grep и т.п.] > result.txt` | общий синтаксис выполнения действий по обработке содержимого файла и вывода результата в новый +| `cat file_originale \| [operazione: sed, grep, awk, grepи т.п.] >> result.txt` | общий синтаксис выполнения действий по обработке содержимого файла и вывода результата в существующий файл. Если файл не существует, он будет создан +| `grep Aug /var/log/messages` | из файла '/var/log/messages' отобрать и вывести на стандартное устройство вывода строки, содержащие "Aug" +| `grep ^Aug /var/log/messages` | из файла '/var/log/messages' отобрать и вывести на стандартное устройство вывода строки, начинающиеся на "Aug" +| `grep [0-9] /var/log/messages` | из файла '/var/log/messages' отобрать и вывести на стандартное устройство вывода строки, содержащие цифры +| `grep Aug -R /var/log/*` | отобрать и вывести на стандартное устройство вывода строки, содержащие "Aug", во всех файлах, находящихся в директории /var/log и ниже +| `sed 's/stringa1/stringa2/g' example.txt` | в файле example.txt заменить "string1" на "string2", результат вывести на стандартное устройство вывода. +| `sed '/^$/d' example.txt` | удалить пустые строки из файла example.txt +| `sed '/ *#/d; /^$/d' example.txt` | удалить пустые строки и комментарии из файла example.txt +| `echo 'esempio' \| tr '[:lower:]' '[:upper:]'` | преобразовать символы из нижнего регистра в верхний +| `sed -e '1d' result.txt` | удалить первую строку из файла example.txt +| `sed -n '/string1/p'` | отобразить только строки содержашие "string1" +| `sed -e 's/ *$//' example.txt` | удалить пустые символы в в конце каждой строки +| `sed -e 's/string1//g' example.txt` | удалить строку "string1" из текста не изменяя всего остального +| `sed -n '1,8p;5q' example.txt` | взять из файла с первой по восьмую строки и из них вывести первые пять +| `sed -n '5p;5q' example.txt` | ывести пятую строку +| `sed -e 's/0*/0/g' example.txt` | заменить последовательность из любого количества нулей одним нулём +| `cat -n file1` | пронумеровать строки при выводе содержимого файла +| `cat example.txt \| awk 'NR%2==1'` | при выводе содержимого файла, не выводить чётные строки файла +| `echo a b c \| awk '{print $1}'` | вывести первую колонку. Разделение, по-умолчанию, по проблелу/пробелам или символу/символам табуляции +| `echo a b c \| awk '{print $1,$3}'` | вывести первую и треью колонки. Разделение, по-умолчанию, по проблелу/пробелам или символу/символам табуляции +| `paste file1 file2` | объединить содержимое file1 и file2 в виде таблицы: строка 1 из file1 = строка 1 колонка 1-n, строка 1 из file2 = строка 1 колонка n+1-m +| `paste -d '+' file1 file2` | объединить содержимое file1 и file2 в виде таблицы с разделителем "+" +| `sort file1 file2` | отсортировать содержимое двух файлов +| `sort file1 file2 \| uniq` | отсортировать содержимое двух файлов, не отображая повторов +| `sort file1 file2 \| uniq -u` | отсортировать содержимое двух файлов, отображая только уникальные строки (строки, встречающиеся в обоих файлах, не выводятся на стандартное устройство вывода) +| `sort file1 file2 \| uniq -d` | отсортировать содержимое двух файлов, отображая только повторяющиеся строки +| `comm -1 file1 file2` | сравнить содержимое двух файлов, не отображая строки принадлежащие файлу 'file1' +| `comm -2 file1 file2` | сравнить содержимое двух файлов, не отображая строки принадлежащие файлу 'file2' +| `comm -3 file1 file2` | сравнить содержимое двух файлов, удаляя строки встречающиеся в обоих файлах + +## Анализ файловых систем + +| Команда | Описание | +| --- | --- | +| `badblocks -v /dev/hda1` | проверить раздел hda1 на наличие bad-блоков +| `fsck /dev/hda1` | проверить/восстановить целостность linux-файловой системы раздела hda1 +| `fsck.ext2 /dev/hda1` | проверить/восстановить целостность файловой системы ext2 раздела hda1 +| `e2fsck /dev/hda1` | проверить/восстановить целостность файловой системы +| `e2fsck -j /dev/hda1` | проверить/восстановить целостность файловой системы ext3 раздела hda1 с указанием, что журнал расположен там же +| `fsck.ext3 /dev/hda1` | проверить/восстановить целостность файловой системы ext3 раздела hda1 +| `fsck.vfat /dev/hda1` | проверить/восстановить целостность файловой системы fat раздела hda11 +| `fsck.msdos /dev/hda1` | +| `dosfsck /dev/hda1` | + +## Форматирование файловых систем + +| Команда | Описание | +| --- | --- | +| `mkfs /dev/hda1` | создать linux-файловую систему на разделе hda1 +| `mke2fs /dev/hda1` | создать файловую систему ext2 на разделе hda1 +| `mke2fs -j /dev/hda` | создать журналирующую файловую систему ext3 на разделе hda1 +| `mkfs -t vfat 32 -F /dev/hda1` | создать файловую систему FAT32 на разделе hda1 +| `fdformat -n /dev/fd0` | форматирование флоппи-диска без проверки +| `mkswap /dev/hda3` | создание swap-пространства на разделе hda3 swap-пространства +| `mkswap /dev/hda3` | создание swap-пространства на разделе hda3 +| `swapon /dev/hda3` | активировать swap-пространство, расположенное на разделе hda3 +| `swapon /dev/hda2 /dev/hdb3` | активировать swap-пространства, расположенные на разделах hda2 и hdb3 + +## Создание резервных копий (backup) + +| Команда | Описание | +| --- | --- | +| `dump -0aj -f /tmp/home0.bak /home` | создать полную резервную копию директории /home в файл /tmp/home0.bak +| `dump -1aj -f /tmp/home0.bak /home` | создать инкрементальную резервную копию директории /home в файл /tmp/home0.bak +| `restore -if /tmp/home0.bak` | восстановить из резервной копии /tmp/home0.bak +| `rsync -rogpav --delete /home /tm` | синхронизировать /tmp с /home +| `rsync -rogpav -e ssh --delete /home ip_address:/tmp` | синхронизировать через SSH-туннель +| `rsync -az -e ssh --delete ip_addr:/home/public /home/local` | синхронизировать локальную директорию с удалённой директорией через ssh-туннель со сжатием +| `rsync -az -e ssh --delete /home/local ip_addr:/home/public` | синхронизировать удалённую директорию с локальной директорией через ssh-туннель со сжатием +| `dd bs=1M if=/dev/hda \| gzip \| ssh user@ip_addr 'dd of=hda.gz'` | сделать "слепок" локального диска в файл на удалённом компьютере через ssh-туннель +| `tar -Puf backup.tar /home/user` | создать инкрементальную резервную копию директории '/home/user' в файл backup.tar с сохранением полномочий +| `(cd /tmp/local/ && tar c . ) \| ssh -C user@ip_addr 'cd /home/share/ && tar x -p'` | копирование содержимого /tmp/local на удалённый компьютер через ssh-туннель в /home/share/ +| `(tar c /home ) \| ssh -C user@ip_addr 'cd /home/backup-home && tar x -p'` | копирование содержимого /home на удалённый компьютер через ssh-туннель в /home/backup-home +| `tar cf - . \| (cd /tmp/backup ; tar xf - )` | копирование одной директории в другую с сохранением полномочий и линков +| `find /home/user1 -name '*.txt' \| xargs cp -av --target-directory=/home/backup/ --parents` | поиск в /home/user1 всех файлов, имена которых оканчиваются на '.txt', и копирование их в другую директорию +| `find /var/log -name '*.log' \| tar cv --files-from=- \| bzip2 > log.tar.bz2` | поиск в /var/log всех файлов, имена которых оканчиваются на '.log', и создание bzip-архива из них + +## IPTABLES (firewall) + +| Команда | Описание | +| --- | --- | +| `iptables -t filter -nL` | отобразить все цепочки правил +| `iptables -nL` | +| `iptables -t nat -L` | отобразить все цепочки правил в NAT-таблице +| `iptables -t filter -F` | очистить все цепочки правил в filter-таблице +| `iptables -F` | +| `iptables -t nat -F` | очистить все цепочки правил в NAT-таблице +| `iptables -t filter -X` | удалить все пользовательские цепочки правил в filter-таблице +| `iptables -t filter -A INPUT -p tcp --dport telnet -j ACCEPT` | позволить входящее подключение telnet'ом +| `iptables -t filter -A OUTPUT -p tcp --dport http -j DROP` | блокировать исходящие HTTP-соединения +| `iptables -t filter -A FORWARD -p tcp --dport pop3 -j ACCEPT` | позволить "прокидывать" (forward) POP3-соединения +| `iptables -t filter -A INPUT -j LOG --log-prefix "DROP INPUT"` | включить журналирование ядром пакетов, проходящих через цепочку INPUT, и добавлением к сообщению префикса "DROP INPUT" +| `iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE` | включить NAT (Network Address Translate) исходящих пакетов на интерфейс eth0. Допустимо при использовании с динамически выделяемыми ip-адресами. +| `iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp -m tcp --dport 22 -j DNAT --to-destination 10.0.0.2:22` | перенаправление пакетов, адресованных одному хосту, на другой хост + +## Мониторинг и отладка + +| Команда | Описание | +| --- | --- | +| `top` | отобразить запущенные процессы, используемые ими ресурсы и другую полезную информацию (с автоматическим обновлением данных) +| `ps -eafw` | отобразить запущенные процессы, используемые ими ресурсы и другую полезную информацию (единожды) +| `ps -e -o pid,args --forest` | вывести PID'ы и процессы в виде дерева +| `pstree` | отобразить дерево процессов +| `kill -9 98989` | "убить" процесс с PID 98989 "на смерть" (без соблюдения целостности данных) +| `kill -KILL 98989` | +| `kill -TERM 98989` | Корректно завершить процесс с PID 98989 +| `kill -1 98989` | заставить процесс с PID 98989 перепрочитать файл конфигурации +| `kill -HUP 98989` | +| `lsof -p 98989` | отобразить список файлов, открытых процессом с PID 98989 +| `lsof /home/user1` | отобразить список открытых файлов из директории /home/user1 +| `strace -c ls >/dev/null` | вывести список системных вызовов, созданных и полученных процессом ls +| `strace -f -e open ls >/dev/null` | вывести вызовы бибилотек +| `watch -n1 'cat /proc/interrupts'` | отображать прерывания в режиме реального времени +| `last reboot` | отобразить историю перезагрузок системы +| `last user1` | отобразить историю регистрации пользователя user1 в системе и время его нахождения в ней +| `lsmod` | вывести загруженные модули ядра +| `free -m` | показать состояние оперативной памяти в мегабайтах +| `smartctl -A /dev/hda` | контроль состояния жёсткого диска /dev/hda через SMART +| `smartctl -i /dev/hda` | проверить доступность SMART на жёстком диске /dev/hda +| `tail /var/log/dmesg` | вывести десять последних записей из журнала загрузки ядра +| `tail /var/log/messages` | вывести десять последних записей из системного журнала + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/ubuntu/ctop.md b/docs/ubuntu/ctop.md new file mode 100755 index 0000000..f95012e --- /dev/null +++ b/docs/ubuntu/ctop.md @@ -0,0 +1,104 @@ +# Ctop - это `top` или `htop` для контейнеров + +![](https://github.com/bcicen/ctop/raw/master/_docs/img/logo.png){ align=center width="300" } + +# +[![](https://img.shields.io/github/release/bcicen/ctop.svg)](https://github.com/bcicen/ctop/releases) +![homebrew][homebrew] ![macports][macports] ![scoop][scoop] + +Удобный интерфейс для метрик контейнеров + +`ctop` предоставляет краткий и сжатый обзор метрик в реальном времени для нескольких контейнеров: + +![](https://github.com/bcicen/ctop/raw/master/_docs/img/grid.gif) + +`ctop` поставляется со встроенной поддержкой Docker и runC + +## Установка + +Загрузите [последний релиз](https://github.com/bcicen/ctop/releases) для вашей платформы: + +#### Debian/Ubuntu + +Поддерживается [сторонним разработчиком](https://packages.azlux.fr/) +```bash +sudo apt-get install ca-certificates curl gnupg lsb-release +curl -fsSL https://azlux.fr/repo.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/azlux-archive-keyring.gpg +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian \ + $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/azlux.list >/dev/null +sudo apt-get update +sudo apt-get install docker-ctop +``` + +#### Arch + +```bash +sudo pacman -S ctop +``` + +_`ctop` is also available for Arch in the [AUR](https://aur.archlinux.org/packages/ctop-bin/)_ + + +#### Linux (Generic) + +```bash +sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 -O /usr/local/bin/ctop +sudo chmod +x /usr/local/bin/ctop +``` + +#### OS X + +```bash +brew install ctop +``` +or +```bash +sudo port install ctop +``` +or +```bash +sudo curl -Lo /usr/local/bin/ctop https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-darwin-amd64 +sudo chmod +x /usr/local/bin/ctop +``` + +#### Windows + +`ctop` is available in [scoop](https://scoop.sh/): + +```powershell +scoop install ctop +``` + +#### Docker + +```bash +docker run --rm -ti \ + --name=ctop \ + --volume /var/run/docker.sock:/var/run/docker.sock:ro \ + quay.io/vektorlab/ctop:latest +``` + +### Опции запуска + +Option | Description +--- | --- +`-a` | show active containers only +`-f ` | set an initial filter string +`-h` | display help dialog +`-i` | invert default colors +`-r` | reverse container sort order +`-s` | select initial container sort field +`-v` | output version information and exit + +[build]: _docs/build.md +[connectors]: _docs/connectors.md +[single_view]: _docs/single.md +[release]: https://img.shields.io/github/release/bcicen/ctop.svg "ctop" +[homebrew]: https://img.shields.io/homebrew/v/ctop.svg "ctop" +[macports]: https://repology.org/badge/version-for-repo/macports/ctop.svg?header=macports "ctop" +[scoop]: https://img.shields.io/scoop/v/ctop?bucket=main "ctop" + +## Альтернативы + +См. [Awesome Docker список](https://github.com/veggiemonk/awesome-docker/blob/master/README.md#terminal) для получения информации об аналогичных инструментах для работы с Docker. \ No newline at end of file diff --git a/docs/ubuntu/docker-ufw.md b/docs/ubuntu/docker-ufw.md index 57d6ed9..f713171 100755 --- a/docs/ubuntu/docker-ufw.md +++ b/docs/ubuntu/docker-ufw.md @@ -1,9 +1,13 @@ -# Как использовать Docker с UFW одновременно +# Использование Docker с UFW одновременно ![](../images/ubuntu/docker-and-ufw.jpg) -Удивительно, но Docker не работает из коробки с “Universal Firewall” Linux, или UFW. +[![chaifeng/ufw-docker-agent](https://img.shields.io/docker/pulls/chaifeng/ufw-docker-agent)](https://hub.docker.com/r/chaifeng/ufw-docker-agent) + +Удивительно, но Docker не работает из коробки с `Universal Firewall` Linux, или `UFW`. + ## Почему Docker не работает с UFW? + UFW задуман как очень простой брандмауэр. Проблема в том, что UFW и Docker пытаются изменить одни и те же базовые правила брандмауэра. И этот конфликт требует дополнительной настройки, если вы хотите запустить UFW и Docker вместе. @@ -19,11 +23,13 @@ UFW задуман как очень простой брандмауэр. Например: при запуске дашборда администратора на порту 8000 и добавлении правила только на доступ с определенных ip адресов (белый список). В обычных условиях все будет хорошо, особенно если дашборд имеет собственную аутентификацию. UFW покажет правило брандмауэра, как внесенное в белый список. Дашборд будет доступен вам с тех адресов, которые вы указали в правиле. **НО, если запущено через Docker, то по умолчанию оно будет видно на порту 8000 из любого места**. ## Исправление конфигурации Docker + Есть решение, которое предлагает Docker: отредактируйте _/etc/default/docker_ или _/etc/docker/daemon.json_ и просто отключите функциональность iptables в Docker: ``` DOCKER_OPTS="--iptables=false" ``` + Это работает, однако это лишь половинчатое решение. Это лишает Docker возможности управлять собственными сетями и может привести к тому, что контейнеры вообще не смогут получить доступ в интернет из коробки. diff --git a/docs/ubuntu/errors.md b/docs/ubuntu/errors.md new file mode 100755 index 0000000..5c4f554 --- /dev/null +++ b/docs/ubuntu/errors.md @@ -0,0 +1,7 @@ +# Ошибки консоли Unix + +| Текст Ошибки | Решение | +| --- | --- | +| `leapsecond file ('/var/db/ntpd.leap-seconds.list'): expired less than` | `service ntpd onefetch` | +| Ошибки при загрузке ОС, ругается на сегменты | Single mode
`fsck -t ufs -y /dev/da0p2`
Если говорит что используется журнал
`tunefs -j disable /dev/da0p2` | +| | | \ No newline at end of file diff --git a/docs/ubuntu/index.md b/docs/ubuntu/index.md new file mode 100755 index 0000000..5ff11e3 --- /dev/null +++ b/docs/ubuntu/index.md @@ -0,0 +1,46 @@ +# Полезные команды + +## Диски + +**Дата и температура дисков** + +```plaintext +date && hddtemp /dev/sda /dev/sdb /dev/sdd /dev/sde +``` + +где `/dev/sda /dev/sdb /dev/sdd /dev/sde` - список дисков + +**Просмотр SMART диска** + +```plaintext +smartctl -a /dev/sda +``` + +## Plex + +**Добавление сертификата LetsEncrypt в Plex** + +Для тех случаев, если Plex работает не через обратный прокси + +```plaintext +openssl pkcs12 -export -out ~/certificate.pfx -inkey /etc/letsencrypt/live/example.com/privkey.pem -in /etc/letsencrypt/live/example.com/cert.pem -certfile /etc/letsencrypt/live/example.com/chain.pem +``` + +вводим пароль для импорта, после перемещаем в каталог с установленным Plex + +```plaintext +mv ~/certificate.pfx /var/lib/plexmediaserver +``` + +Задаем права + +```plaintext +chown plex:plex /var/lib/plexmediaserver/certificate.pfx +``` + +Рестартим Apache и Plex + +```plaintext +service apache2 restart +service plexmediaserver restart +``` \ No newline at end of file diff --git a/docs/ubuntu/lvm.md b/docs/ubuntu/lvm.md new file mode 100755 index 0000000..a8a4a79 --- /dev/null +++ b/docs/ubuntu/lvm.md @@ -0,0 +1,293 @@ +# LVM - Logical Volume Manager + +Logical Volume Manager (LVM) - это очень мощная система управления томами с данными для Linux. Она позволяет создавать поверх физических разделов (или даже неразбитых винчестеров) логические тома, которые в самой системе будут видны как обычные блочные устройства с данными (т.е. как обычные разделы). + +Основные преимущества LVM в том, что во-первых одну группу логических томов можно создавать поверх любого количества физических разделов, а во-вторых размер логических томов можно легко менять прямо во время работы. Кроме того, LVM поддерживает механизм снапшотов, копирование разделов «на лету» и зеркалирование, подобное RAID-1. + +Если планируются большие работы с LVM, то можно запустить специальную оболочку командой `sudo lvm`. Команда `help` покажет список команд. + +## Создание и удаление + +Большинство команд требуют [прав суперпользователя](https://help.ubuntu.ru/wiki/%D1%81%D1%83%D0%BF%D0%B5%D1%80%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_%D0%B2_ubuntu). + +Как уже отмечалось, LVM строится на основе разделов жёсткого диска и/или целых жёстких дисков. На каждом из дисков/разделов должен быть создан **физический том** (physical volume). К примеру, мы используем для LVM диск *sda* и раздел *sdb2*: +``` +pvcreate /dev/sda +pvcreate /dev/sdb2 +``` +На этих физических томах создаём **группу томов**, которая будет называться, скажем, `vg1`: +``` +vgcreate -s 32M vg1 /dev/sda /dev/sdb2 +``` +Посмотрим информацию о нашей группе томов: +``` +vgdisplay vg1 +``` +Групп можно создать несколько, каждая со своим набором томов. Но обычно это не требуется. + +Теперь в группе томов можно создать **логические тома** `lv1` и `lv2` размером 20 Гбайт и 30 Гбайт соответственно: +``` +lvcreate -n lv1 -L 20G vg1 +lvcreate -n lv2 -L 30G vg1 +``` +Теперь у нас есть блочные устройства `/dev/vg1/lv1` и `/dev/vg1/lv2`. + +Осталось создать на них файловую систему. Тут различий с обычными разделами нет: +``` +mkfs.ext4 /dev/vg1/lv1 +mkfs.reiserfs /dev/vg1/lv2 +``` +Удаление LVM (или отдельных его частей, например, логических томов или групп томов) происходит в обратном порядке - сначала нужно отмонтировать разделы, затем удалить логические тома (`lvremove`), после этого можно удалить группы томов (`vgremove`) и ненужные физические тома (`pvremove`). + +## Добавление физических томов + +Чтобы добавить новый винчестер `sdc` в группу томов, создадим физический том: +``` +pvcreate /dev/sdc +``` +И добавим его в нашу группу: +``` +vgextend vg1 /dev/sdc +``` +Теперь можно создать ещё один логический диск (`lvcreate`) или увеличить размер существующего (`lvresize`). + +## Удаление физических томов + +Чтобы убрать из работающей группы томов винчестер `sda` сначала перенесём все данные с него на другие диски: +``` +pvmove /dev/sda +``` +Затем удалим его из группы томов: +``` +vgreduce vg1 /dev/sda +``` +И, наконец, удалим физический том: +``` +pvremove /dev/sda +``` +Вообще-то, последняя команда просто убирает отметку о том, что диск является членом lvm, и особой пользы не приносит. После удаления из LVM для дальнейшего использования диск придётся переразбивать/переформатировать. + +## Изменение размеров + +LVM позволяет легко изменять размер логических томов. Для этого нужно сначала изменить сам логический том: +``` +lvresize -L 40G vg1/lv2 +``` +а затем файловую систему на нём: +``` +resize2fs /dev/vg1/lv2 +resize_reiserfs /dev/vg1/lv2 +``` +Изменение размеров физического тома - задача весьма сложная и обычно не применяется. Целесообразнее и безопаснее удалить физический том, изменить размер раздела и создать том заново. + +## Как просто попробовать + +Если LVM устанавливается не для дальнейшего использования, а «напосмотреть», то диски и разделы можно заменить файлами. Не понадобятся ни дополнительные диски, ни виртуальные машины. Мы создадим виртуальные накопители и будем с ними работать. Например, можно создать 4 диска по 1 Гбайт, но можно создать другое количество большего или меньшего размера как вам хочется. Создаем сами файлы, имитирующие устройства: +``` +mkdir /mnt/sdc1/lvm +cd /mnt/sdc1/lvm +dd if=/dev/zero of=./d01 count=1 bs=1G +dd if=/dev/zero of=./d02 count=1 bs=1G +dd if=/dev/zero of=./d03 count=1 bs=1G +dd if=/dev/zero of=./d04 count=1 bs=1G +``` +Создаем loopback устройства из файлов: +``` +losetup -f --show ./d01 +losetup -f --show ./d02 +losetup -f --show ./d03 +losetup -f --show ./d04 +``` +Дальше поступаем так же, как если бы ми создавали LVM на реальных дисках. Обратите внимание на названия loop-устройств — они могут отличаться от приведённых здесь. +``` +pvcreate /dev/loop0 +pvcreate /dev/loop1 +pvcreate /dev/loop2 +pvcreate /dev/loop3 +vgcreate -s 32M vg /dev/loop0 /dev/loop1 /dev/loop2 /dev/loop3 +lvcreate -n first -L 2G vg +lvcreate -n second -L 400M vg +... +``` +## Смена имени LVM группы + +### Измените имя группы томов + +Утилита [**vgrename**](http://man.cx/vgrename(8)) будет использоваться для изменения имени тома LVM с `nst_localhost` на `nst20`: + +```plaintext +vgrename -v nst_localhost nst20 +``` + +### Обновите файл конфигурации файловой системы: /etc/fstab + +Используйте редактор (например, **nano** ), чтобы изменить имя устройства отображения группы томов LVM в файле конфигурации файловой системы: `/etc/fstab` на новое имя **nst20** для **root** и **swap** логических томов. + +**До:** + +```plaintext +[root@localhost ~]# cat /etc/fstab + +/dev/mapper/nst_localhost-root / ext4 defaults 1 1 +UUID=8c72887d-d7db-4a3d-9b09-0d619fc11d9c /boot ext4 defaults 1 2 +/dev/mapper/nst_localhost-swap swap swap defaults 0 0 +``` + +**После:** + +```plaintext +[root@localhost ~]# cat /etc/fstab + +/dev/mapper/nst20-root / ext4 defaults 1 1 +UUID=8c72887d-d7db-4a3d-9b09-0d619fc11d9c /boot ext4 defaults 1 2 +/dev/mapper/nst20-swap swap swap defaults 0 0 +``` + +### Обновите файл конфигурации Grub2: /boot/grub2/grub.cfg + +Используйте редактор (например, **nano** ), чтобы изменить имя устройства отображения группы томов LVM в файле конфигурации файловой системы: `/boot/grub2/grub.cfg` на новое имя **nst20** для **root** и **swap** . Логические тома для всех соответствующих записей. + +**До** + +!!! note "Примечание" + Для примера показан только один пункт меню Grub2. Необходимо изменить все соответствующие записи. + +??? info + ```plaintext + . + . + . + menuentry " ---------------------NST 20 (64 Bit) Boot Choices---------------------" { + true + } + + menuentry 'Console, Kernel: 3.12.5-302.fc20.x86_64' --class nst --class gnu-linux --class gnu --class os { + savedefault + load_video + set gfxpayload=keep + insmod gzio + insmod part_msdos + insmod ext2 + set root='hd0,msdos1' + if [ x$feature_platform_search_hint = xy ]; then + search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 8c72887d-d7db-4a3d-9b09-0d619fc11d9c + else + search --no-floppy --fs-uuid --set=root 8c72887d-d7db-4a3d-9b09-0d619fc11d9c + fi + echo 'Loading Linux 3.12.5-302.fc20.x86_64 ...' + linux /vmlinuz-3.12.5-302.fc20.x86_64 root=/dev/mapper/nst_localhost-root ro rd.lvm.lv=nst_localhost/swap rd.lvm.lv=nst_localhost/root vconsole.font=latarcyrheb-sun16 crashkernel=auto systemd.unit=multi-user.target + echo 'Loading initial ramdisk ...' + initrd /initramfs-3.12.5-302.fc20.x86_64.img + } + . + . + . + ``` + +**После:** + +??? info + + ```plaintext + . + . + . + menuentry " ---------------------NST 20 (64 Bit) Boot Choices---------------------" { + true + } + + menuentry 'Console, Kernel: 3.12.5-302.fc20.x86_64' --class nst --class gnu-linux --class gnu --class os { + savedefault + load_video + set gfxpayload=keep + insmod gzio + insmod part_msdos + insmod ext2 + set root='hd0,msdos1' + if [ x$feature_platform_search_hint = xy ]; then + search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 8c72887d-d7db-4a3d-9b09-0d619fc11d9c + else + search --no-floppy --fs-uuid --set=root 8c72887d-d7db-4a3d-9b09-0d619fc11d9c + fi + echo 'Loading Linux 3.12.5-302.fc20.x86_64 ...' + linux /vmlinuz-3.12.5-302.fc20.x86_64 root=/dev/mapper/nst20-root ro rd.lvm.lv=nst20/swap rd.lvm.lv=nst20/root vconsole.font=latarcyrheb-sun16 crashkernel=auto systemd.unit=multi-user.target + echo 'Loading initial ramdisk ...' + initrd /initramfs-3.12.5-302.fc20.x86_64.img + } + . + . + . + ``` + +### Пересоберите файл initramfs ядра + +Образ ядра [**initramfs**](http://en.wikipedia.org/wiki/Initramfs) необходимо перестроить, чтобы отразить изменение имени группы томов LVM. Для выполнения этой задачи будет использоваться [**mkinitrd**](http://man7.org/linux/man-pages/man8/mkinitrd.8.html), использующий инструмент [**dracut**](https://dracut.wiki.kernel.org/index.php/Main_Page). + +**Пример для ядра: 3.12.5-302.fc20.x86\_64** + +```plaintext +[root@localhost ~]# ls -al /boot/initramfs-3.12.5-302.fc20.x86_64.img +-rw------- 1 root root 11435288 Jan 1 11:07 /boot/initramfs-3.12.5-302.fc20.x86_64.img +``` + +```plaintext +[root@localhost ~]# uname -r +3.12.5-302.fc20.x86_64 +``` + +```plaintext +[root@localhost ~]# mkinitrd -f -v /boot/initramfs-$(uname -r).img $(uname -r) +Creating: target|kernel|dracut args|basicmodules +Executing: /usr/sbin/dracut -v -f /boot/initramfs-3.12.5-302.fc20.x86_64.img 3.12.5-302.fc20.x86_64 +*** Including module: bash *** +*** Including module: i18n *** +*** Including module: ifcfg *** +*** Including module: drm *** +*** Including module: plymouth *** +*** Including module: dm *** +Skipping udev rule: 64-device-mapper.rules +Skipping udev rule: 60-persistent-storage-dm.rules +Skipping udev rule: 55-dm.rules +*** Including module: kernel-modules *** +*** Including module: lvm *** +Skipping udev rule: 64-device-mapper.rules +Skipping udev rule: 56-lvm.rules +Skipping udev rule: 60-persistent-storage-lvm.rules +*** Including module: resume *** +*** Including module: rootfs-block *** +*** Including module: terminfo *** +*** Including module: udev-rules *** +Skipping udev rule: 91-permissions.rules +*** Including module: biosdevname *** +*** Including module: systemd *** +*** Including module: usrmount *** +*** Including module: base *** +*** Including module: fs-lib *** +*** Including module: shutdown *** +*** Including modules done *** +*** Installing kernel module dependencies and firmware *** +*** Installing kernel module dependencies and firmware done *** +*** Resolving executable dependencies *** +*** Resolving executable dependencies done*** +*** Pre-linking files *** +*** Pre-linking files done *** +*** Hardlinking files *** +*** Hardlinking files done *** +*** Stripping files *** +*** Stripping files done *** +*** Creating image file *** +*** Creating image file done *** +``` + +```plaintext +[root@localhost ~]# ls -al /boot/initramfs-3.12.5-302.fc20.x86_64.img +-rw------- 1 root root 11435512 Jan 1 14:20 /boot/initramfs-3.12.5-302.fc20.x86_64.img +``` + +## Перезагрузите систему + +После внесения всех вышеперечисленных изменений используйте утилиту [**systemctl**](https://wiki.archlinux.org/index.php/systemd) для перезагрузки системы: + +```plaintext +[root@localhost ~]# systemctl reboot +``` \ No newline at end of file diff --git a/docs/ubuntu/mariadb.md b/docs/ubuntu/mariadb.md index ca9da3c..1e4c7ea 100755 --- a/docs/ubuntu/mariadb.md +++ b/docs/ubuntu/mariadb.md @@ -16,7 +16,7 @@ sudo mysql_secure_installation Далее я распишу подробнее все шаги и как проверить, что база работает и имеет безопасную конфигурацию. -## Шаг 1 — Установка MariaDB +## Установка MariaDB На момент написания этой статьи репозитории APT по умолчанию в Ubuntu 22.04 включают версию MariaDB 10.11.4 @@ -34,7 +34,7 @@ sudo apt install mariadb-server Эти команды установят MariaDB, но не предложат установить пароль или внести какие-либо другие изменения в конфигурацию. Поскольку конфигурация по умолчанию оставляет вашу установку MariaDB небезопасной, вы будете использовать сценарий, предоставляемый пакетом, `mariadb-server`для ограничения доступа к серверу и удаления неиспользуемых учетных записей. -## Шаг 2 — Настройка MariaDB +## Настройка MariaDB Далее запускаем предлагаемый сценарий настройки безопасности. Этот сценарий изменяет некоторые из менее безопасных параметров по умолчанию для таких вещей, как удаленный вход в систему **root** и пользователей. @@ -93,7 +93,7 @@ Set root password? [Y/n] n На этом мы завершили первоначальную настройку безопасности MariaDB. Далее я распишу, что нужно сделать, чтобы аутентифицироваться на своем сервере MariaDB с помощью пароля. -## Шаг 3 — (Необязательно) Создание пользователя-администратора, использующего аутентификацию по паролю +## Создание пользователя-администратора, использующего аутентификацию по паролю Теперь создадим отдельную учетную запись с правами **root** для доступа на основе пароля. Открываем командную строку MariaDB с вашего терминала: @@ -122,7 +122,7 @@ exit Теперь протестируем установку MariaDB. -## Шаг 4 — Тестирование MariaDB +## Тестирование MariaDB При установке из репозиториев по умолчанию MariaDB запустится автоматически. Чтобы проверить это, проверим статус. @@ -170,4 +170,6 @@ UNIX socket /run/mysqld/mysqld.sock Uptime: 14 hours 17 min 25 sec Threads: 1 Questions: 76 Slow queries: 0 Opens: 33 Open tables: 26 Queries per second avg: 0.001 -``` \ No newline at end of file +``` + +## diff --git a/docs/ubuntu/ncdu.md b/docs/ubuntu/ncdu.md new file mode 100755 index 0000000..69dd3d5 --- /dev/null +++ b/docs/ubuntu/ncdu.md @@ -0,0 +1,41 @@ +# NCDU + +Утилита ncdu: эффективный инструмент для борьбы с переполнением дискового пространства + +![](../images/ubuntu/ncdu.png) + +Установить можно через apt: + +``` +sudo apt install ncdu +``` + +## Список команд и ключей +Список команд и действий, которые можно выполнить при работе с утилитой: + +- up (стрелочка вверх на клавиатуре), k — перемещение вверх; +- down (стрелочка вниз на клавиатуре), j — перемещение по списку вниз; +- enter — открытие нужной директории (папки); +- left (стрелочка влево (<) на клавиатуре), h — возвращение в предыдущую директорию. + +Утилиту ncdu можно запускать со следующими ключами: + +- -h Вспомогательное сообщение; +- -q Тихий режим, интервал обновления 2 сек; +- -v Отобразить версию утилиты; +- -x Та же самая файловая система; +- -r Режим чтения; +- --exclude PATTERN Исключает файлы, содержащие ОБРАЗЕЦ; +- -X, --exclude-from FILE Исключает файлы которые содержат какой-либо ОБРАЗЕЦ в ИМЕНИ_ФАЙЛА. + +Ввод следующих букв в латинской раскладке клавиатуры в момент использования утилиты позволит достичь следующего результата: + +- a — режим отображения (размер файла, занятое место на жестком диске); +- d — возможность удаления выбранного файла или директории; +- e — включение и отключение отображения скрытых файлов; +- g — режим отображения занятого места (в процентах/графически/оба варианта); +- i — показывает информацию выделенного объекта; +- n — сортирует по имени; +- q — выход из интерфейса; +- r — повторный расчет занимаемой дисковой квоты; +- s — сортировка по объему. \ No newline at end of file diff --git a/docs/ubuntu/proxy-system.md b/docs/ubuntu/proxy-system.md new file mode 100755 index 0000000..29d1b22 --- /dev/null +++ b/docs/ubuntu/proxy-system.md @@ -0,0 +1,86 @@ +# Настройка прокси на системном уровне + +Настроить прокси на системном уровне можно и через конфигурационные файлы (True UNIX-way). Для этого нужно открыть на редактирования с правами root файл */etc/environment* (например `sudo nano /etc/environment`). В конец файла добавим строки: + +```plaintext +https_proxy="https://user:pass@proxy:port/" +http_proxy="http://user:pass@proxy:port/" +ftp_proxy="ftp://user:pass@proxy:port/" +socks_proxy="socks://user:pass@proxy:port/" +``` + +Если прокси без авторизации, то строки должны быть вида: + +```plaintext +<бла-бла>_proxy="https://proxy:port/" +``` + +Для применения настроек придется пере-загрузиться, изменения в файле /etc/environment вступили в силу при запуске процесса init - родителя всех процессов в системе и именно от него все дочерние процессы унаследуют настройки прокси в переменных окружения. + +## Chromium-browser + +Также может использовать глобальные настройки и имеет свои. Для того чтобы назначить ему прокси персонально, откройте файл /etc/chromium-browser/default и допишите следующие строки: + +```plaintext +CHROMIUM_FLAGS="-proxy-server=адрес:порт" +``` + +И перезапустите браузер + +## APT + +В новых версиях умеет работать с глобальными настройками, но в более старых мог работать только с персональными настройками. Сообщенные настройки: в файле `/etc/apt/apt.conf `нужно указать: + +```plaintext +Acquire::http::proxy "http://логин:пароль@ip_прокси:порт_прокси/"; +Acquire::https::proxy "http://логин:пароль@ip_прокси:порт_прокси/"; +Acquire::ftp::proxy "http://логин:пароль@ip_прокси:порт_прокси/"; +Acquire::socks::proxy "http://логин:пароль@ip_прокси:порт_прокси/"; +Acquire::::Proxy "true"; +Если сервер без авторизации, то логин:пароль@ нужно убрать. +``` + +## Bash + +Само собой настройка через `/etc/environment` (описано выше в разделе глобальных настроек) будет работать для всех программ запущенных из терминала. Если вы хотите указать настройки персонально для запускаемой программы, то перед ее запуском нужно выполнить: + +```plaintext +export http_proxy='http://логин:пароль@ip_прокси:порт_прокси/' +export ftp_proxy='http://логин:пароль@ip_прокси:порт_прокси/' +``` + +## wget + +Дописываем в файл `/etc/wgetrc` : + +```plaintext +proxy-user = username +proxy-password = password +http_proxy = http://xxx.xxx.xxx.xxx:8080/ +ftp_proxy = http://xxx.xxx.xxx.xxx:8080/ +use_proxy = on +``` + +Если прокси без авторизации, то `proxy-user` и `proxy-password` нужно убрать + +## apt-add-repository + +Многие компании и университеты блокируют все неизвестные порты наружу. Обычно блокируется и порт 11371, используемый утилитой apt-add-repository для добавления репозиториев. Есть простое решение, как получать ключи репозиториев через 80-ый порт, который используется для доступа к web-страницам и чаще всего не блокируется. + +Редактируем файл `/usr/lib/python2.6/dist-packages/softwareproperties/ppa.py` (нужны привилегии root, вместо */usr/lib/python2.6* может быть версия *2.7*). Ищем фразу `keyserver.ubuntu.com`, заменяем + +```plaintext +hkp://keyserver.ubuntu.com +``` + +на + +```plaintext +hkp://keyserver.ubuntu.com:80 +``` + +В версии 16.04 достаточно иметь настроенной переменную окружения + +```plaintext +https_proxy="https://user:pass@proxy:port/" +``` \ No newline at end of file diff --git a/docs/ubuntu/redis.md b/docs/ubuntu/redis.md new file mode 100755 index 0000000..d0dccc3 --- /dev/null +++ b/docs/ubuntu/redis.md @@ -0,0 +1,163 @@ +[Redis](https://redis.io/) — это быстрое хранилище данных типа «ключ‑значение», известное своей гибкостью, производительностью и широким выбором поддерживаемых языков. В этом руководстве описывается установка, настройка и обеспечение безопасности Redis на сервере Ubuntu 22. + +Будем устанавливать Redis на Ubuntu Server 22. Нам нужен пользователь без root прав, но с привилегиями `sudo`. + + +## Установка Redis + +1. Обновите списки репозиториев: + + ``` + sudo apt-get update + ``` + +2. Для установки актуальной версии Redis, добавьте репозиторий с новой версией: + + ``` + sudo apt install lsb-release curl gpg + curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg + + echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list + ``` + +3. Далее установите Redis новой версии: + + ``` + sudo apt-get update + sudo apt-get install redis-server + ``` + +4. После установки убедитесь, что сервер запущен: + + ``` + ps ax | grep redis + 335 ? Ssl 0:00 /usr/bin/redis-server 127.0.0.1:6379 + ``` + +5. Проверьте подключение к базе. По умолчанию для доступа к базе пароль не требуется: + + ``` + redis-cli + 127.0.0.1:6379> PING + PONG + 127.0.0.1:6379> + ``` + +6. Добавьте сервис в список приложений, запускаемых автоматически: + + ``` + sudo systemctl enable redis-server + ``` + +Установка завершена. + +## Настройка безопасности + +### Установка пароля + +По умолчанию для доступа к Redis не требуется пароль. Для настройки прав доступа отредактируйте конфигурационный файл `/etc/redis/redis.conf`. Из-за того, что Redis - высокопроизводительная база данных, позволяющая злоумышленнику проверять до 150 000 паролей в секунд, рекомендуется использовать надежный пароль. + +Сгенерируем пароль из 60 символов + +``` +openssl rand 60 | openssl base64 -A +KBXBWCd1Kynbkdbo6IxEwx5fMBhutjj3YTT1J29rKoUjCnRcvo4uxYcptydQpqAjintegDhkYyCJHvx2 +``` + +Укажите этот пароль в файле `/etc/redis/redis.conf` в разделе `SECURITY` в команде `requirepass`: + +``` +################################## SECURITY ################################### + +# Require clients to issue AUTH before processing any other +# commands. This might be useful in environments in which you do not trust +# others with access to the host running redis-server. +# +# This should stay commented out for backward compatibility and because most +# people do not need auth (e.g. they run their own servers). +# +# Warning: since Redis is pretty fast an outside user can try up to +# 150k passwords per second against a good box. This means that you should +# use a very strong password otherwise it will be very easy to break. +# +# requirepass foobared + +requirepass KBXBWCd1Kynbkdbo6IxEwx5fMBhutjj3YTT1J29rKoUjCnRcvo4uxYcptydQpqAjintegDhkYyCJHvx2 +``` + +### Переименование команд + +Для повышения уровня безопасности можно использовать переименование команд либо запрет выполнения команд для работы с базой данных. + +Чтобы переименовать команду, дайте ей другое имя, как показано в приведенных ниже примерах. Переименованные команды должно быть трудно подобрать, но легко запомнить: + +``` +. . . +# rename-command CONFIG "" +rename-command SHUTDOWN SHUTDOWN_MENOT +rename-command CONFIG ASC12_CONFIG +. . . +``` +Чтобы отключить команду, просто укажите пустую строку в качестве имени (обозначается парой кавычек без символов между ними), как показано ниже: +``` +. . . +# It is also possible to completely kill a command by renaming it into +# an empty string: +# +rename-command FLUSHDB "" +rename-command FLUSHALL "" +rename-command DEBUG "" +. . . +``` +После изменения файла конфигурации, выполните проверку доступности базы данных: + +``` +sudo systemctl restart redis-server +``` + +## Сетевой доступ + +По умолчанию Redis слушает только 127.0.0.1. Изменим настройки, чтобы можно было подключаться с других хостов. + +Отредактируем файл `/etc/redis/redis.conf`. Найдем в нем строчку `bind 127.0.0.1 ::1` и закомментируем её: + +``` +# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES +# JUST COMMENT THE FOLLOWING LINE. +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#bind 127.0.0.1 ::1 +``` + +Перезапустим Redis для применения настроек: + +``` +sudo systemctl restart redis-server +``` +Проверим, что Redis слушает сеть: +``` +sudo netstat -tulpn | grep redis +tcp 0 0 0.0.0.0:6379 0.0.0.0:\* LISTEN 1562/redis-server \* +tcp6 0 0 :::6379 :::\* LISTEN 1562/redis-server \* +``` + +## Установка лимита на память RAM + +Теперь установим лимит на использование оперативной памяти и изменим механизм вытеснения ключей при заполнении этого объема памяти. + +Это делается в секции **MEMORY MANAGEMENT** файла `/etc/redis/redis.conf`: + +``` +# maxmemory +# maxmemory-policy noeviction +``` + +- **maxmemory** - указывает на максимальный объем памяти, что можно задействовать. Указывается в байтах, но можно указывать и краткие форматы (kb, mb, gb). Например `maxmemory 4gb` +- **maxmemory-policy** - определяет политику вытеснения ключей, при заполнении памяти.Могут быть разные значения: + - noeviction — не вытеснять данные, то есть если память закончилась, при попытке записи в базу данных выдавать ошибку (по умолчанию); + - volatile-lru — удалить наименее используемые в последнее время ключи с настройкой expire; + - allkeys-lru — удалить наименее используемые в последнее время ключи вне зависимости от настройки expire; + - volatile-lfu — удалить наименее часто используемые ключи с настройкой expire; + - allkeys-lfu — удалить наименее часто используемые ключи вне зависимости от настройки expire; + - volatile-random — удалить случайные ключи с настройкой expire; + - allkeys-random — удалить случайные ключи вне зависимости от настройки expire; + - volatile-ttl — удалить ключи, срок действия которых истекает быстрее остальных (то есть время жизни которых приближается к expire). \ No newline at end of file diff --git a/docs/ubuntu/watchdog.md b/docs/ubuntu/watchdog.md new file mode 100755 index 0000000..c45d388 --- /dev/null +++ b/docs/ubuntu/watchdog.md @@ -0,0 +1,43 @@ +# Watchdog для сервера + +Если вам надо перезапускать сервер при сбоях, обратите свое внимание на watchdog. Watchdog в переводе с английского звучит так - «сторожевой пес». То есть это такой «пес», который следит за состоянием ОС (программ) и если вдруг система перестала отвечать, сторожевой пес, инициирует процедуру перезагрузки ПК. + +Есть программные (softdog) и аппаратные реализации watсhdog. Я покажу простой пример программного мониторинга (softdog) сетевой карты, если пинг через эту карту пропадет, сервер будет перезапущен с помощью watchdog. Обычно под аппаратным wathdog'ом понимается специальный USB адаптер, встроенная в мат. плату микросхема или одно-платный ПК типа MX233-OLinuXino. Если внешний USB адаптер, то он соединяется с контактами RESET на материнской плате. Далее демон watchdog через драйвер периодически посылает сигналы USB адаптеру, тем самым говоря ему, что компьютер работает нормально. Как только сигналы перестают поступать на USB контроллер, происходит замыкание контактов RESET и компьютер начинает перезагружаться. + +## Устанавливаем watchdog + +```plaintext +# apt install watchdog -y +``` + +Теперь сделаем простую задачу, будем пинговать сервер 8.8.8.8 (google DNS). Если пинг пропадет, сервер будет перезагружен. + +Откроем файл `/etc/watchdog.conf` и впишем в него настройки: + +```plaintext +PING = 8.8.8.8 +INTERFACE = ENP0S3 +INTERVAL = 20 +``` + +В этом файле я вписал что мы будем проверять командой пинг сервер 8.8.8.8 по сетевому интерфейсу `enp0s3` + +Теперь запустим службу watchdog: + +```plaintext +# systemctl start watchdog +``` + +И поставим на автозапуск во время загрузки: + +```plaintext +# systemctl enable watchdog +``` + +Проверим автоматическую перезагрузку если пропадет пинг на хост 8.8.8.8, отключим адаптер `enp0s3`: + +```plaintext +# ifdown enp0s3 +``` + +После 3-5 секунд видим как перезагружается сервер \ No newline at end of file diff --git a/docs/ubuntu/webdav/google.md b/docs/ubuntu/webdav/google.md new file mode 100755 index 0000000..75a8771 --- /dev/null +++ b/docs/ubuntu/webdav/google.md @@ -0,0 +1,46 @@ +# Google Диск (Google Drive) + +Загружаем клиент Google Drive: +``` +wget -O drive https://drive.google.com/uc?id=0B3X9GlR6EmbnMHBMVWtKaEZXdDg +``` +Перемещаем файл директорию /usr/sbin командой: +``` +mv drive /usr/sbin/drive +``` +Даем права на файл: +``` +chmod +x /usr/sbin/drive +``` +На этом установка клиента Google Drive завершена, нам остается лишь запустить его и пройти авторизацию: +``` +drive +mv drive /usr/sbin/drive chmod +x /usr/sbin/drive drive + + Go to the following link in your browser: +https://accounts.google.com/o/oauth2/auth?client_id=367116221053-7n0vf5akeru7on6o2fjinrecpdoe99eg.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=state +Enter verification code: +``` +Нужно скопировать ссылку и открыть ее в браузере на ПК, после чего разрешить доступ к аккаунту. После этого, вам будет предоставлена ссылка, которую нужно будет ввести в консоли Linux: Google Drive подключен, однако он подключен не через WebDav (не поддерживается) , и вы не видите его как отдельную файловую систему и локальный каталог. Все обращения к хранилищу Google выполняются через клиент drive + +Можно проверить какие файлы присутствуют на хранилище Google Диск командой drive list: +``` +drive list + + Id Title Size Created +1hG1VSNM67IOXlYCVQp9YqhJlFYU2g1qw test.txt 5.0 B 2019-09-02 17:01:13 +1ih29E4B4piOho3oupLu2YXWfHZtIA330 DE30EF56-523D-4F90-…EE62DD392E89-1.mov 351.0 MB 2019-08-22 10:41:56 +15qbRDBAZztBkN2rWCBhnYidMArTbaqW3 CALLU_8-7-2019_15-35-28_Private.mp3 83.2 KB 2019-07-08 15:35:40 +1A4BUo_PTVH460SAAkbJKmgDlY1567Hno CALLU_8-7-2019_15-31-7_Private.mp3 1.3 MB 2019-07-08 15:34:10 +``` +Файлы выводятся в виде таблицы с четырьмя столбцами: Id – уникальный код файла Title – название файла Size – размер Created – дата создания + +Для теста можем создать файл и передать его на g.drive: +``` +touch drive.txt && drive upload –file drive.txt +``` +Файл создался, и виден в консоли: +``` +1KbdgtW3jJz46_zZ0Wv-ceBcUSSvEp5n- drive.txt 0.0 B 2019-09-02 17:49:30 +``` +По-умолчанию Google предлагает бесплатные 15 Гб на своем Google Диск. \ No newline at end of file diff --git a/docs/ubuntu/webdav/yandex.md b/docs/ubuntu/webdav/yandex.md new file mode 100755 index 0000000..9ceb7cb --- /dev/null +++ b/docs/ubuntu/webdav/yandex.md @@ -0,0 +1,104 @@ +# Яндекс.Диск через WebDAV + +WebDAV — набор расширений и дополнений к протоколу HTTP , поддерживающих совместную работу над редактированием файлов и управление файлами на удаленных серверах. + +Пакет `davfs2` уже должен быть установлен в системе, но если нет, установим. Нужно подключить репозиторий Epel и установить сам пакет через yum: + +``` +apt install epel-release -y +apt install davfs2 -y +``` +Проверяем, что модуль **fuse** на машине присутствует: +``` +ls -l /dev/fuse +``` +Вывод должен быть примерно таким: +``` +ls -l /dev/fuse +crw-rw-rw- 1 root root 10, 229 Sep 2 09:54 /dev/fuse +``` +Создаем отдельную директорию для нашего облачного хранилища: +``` + +mkdir /mnt/yad/ +``` +Монтируем Яндекс.Диск к созданной ранее директории: +``` +mount -t davfs https://webdav.yandex.ru /mnt/yad/ +``` +После ввода команды, в консоли выйдут поля, где нужно будет указать ваш почтовый ящик на Яндексе и пароль от него +``` +Username: +Password: +``` +У меня диск подключился без проблем: +``` +$ df -h + +Filesystem Size Used Avail Use% +Mounted on +/dev/vda2 80G 1.2G 79G 2% +/ devtmpfs 1.9G 0 1.9G 0% +/dev tmpfs 1.9G 0 1.9G 0% +/dev/shm tmpfs 1.9G 8.5M 1.9G 1% +/run tmpfs 1.9G 0 1.9G 0% +/sys/fs/cgroup +/dev/vda1 240M 109M 115M 49% +/boot tmpfs 379M 0 379M 0% +/run/user/0 +https://webdav.yandex.ru 10G 39M 10G 1% /mnt/yad +``` +По-умолчанию Яндекс предлагает всем своим пользователям бесплатно 10 Гб на облачном Яндекс.Диске. + +И сразу можно убедиться, что содержимое Яндекс.Диска теперь доступно в Linux: +``` +$ ls -la +/mnt/yad/ + +total 39867 +drwxr-xr-x 3 root root 392 Apr 5 2012 . +drwx—— 2 root root 0 Sep 2 11:56 lost+found +-rw-r–r– 1 root root 1762478 Sep 2 11:54 Горы.jpg +-rw-r–r– 1 root root 1394575 Sep 2 11:54 Зима.jpg +-rw-r–r– 1 root root 1555830 Sep 2 11:54 Мишки.jpg +-rw-r–r– 1 root root 1080301 Sep 2 11:54 Море.jpg +-rw-r–r– 1 root root 1454228 Sep 2 11:54 Москва.jpg +-rw-r–r– 1 root root 2573704 Sep 2 11:54 Санкт-Петербург.jpg +-rw-r–r– 1 root root 31000079 Sep 2 11:54 Хлебные крошки.mp4 +``` +Создадим файл в подключеном WebDav каталоге файлы и проверим, что он появился в веб-версии Яндекс.Диска: +``` +$ touch /mnt/yad/test.txt +$ls -la +/mnt/yad/ + + total 39867 +drwxr-xr-x 3 root root 424 Apr 5 2012 . +drwx—— 2 root root 0 Sep 2 11:56 lost+found +-rw-r–r– 1 root root 0 Sep 2 12:08 test.txt +``` +Файл появился, наше подключение к облачному хранилищу Яндекс.Диск работает нормально, локальный файл автоматически синхронизируется с облаком. + +Для упрощения монтирования, добавим его в `rc.local`, чтобы после рестарта сервера, хранилище Яндекс.Диск монтировалось автоматически. + +Для этого, создаем файл `/etc/davfs2/secrets`: +``` +touch /etc/davfs2/secrets +``` +и добавляем туда путь до директории, в которую монтируем Яндекс.Диск и логин/пароль пользователя Яндекс: +``` +/mnt/yad user password +``` +В `rc.local` добавляем следующую строку: +``` +mount -t davfs https://webdav.yandex.ru /mnt/yad/ +``` +Делаем рестарт Linux и проверяем доступность облачного диска: +``` +mount -t davfs _https://webdav.yandex.ru /mnt/yad/ +``` +Если файл `rc.local` не читается при запуске сервера, в таком случае для автозапуска сервиса rc-local выполните следующие команды: +``` +chmod +x /etc/rc.d/rc.local +systemctl enable rc-local +``` diff --git a/docs/ubuntu/xrdp.md b/docs/ubuntu/xrdp.md new file mode 100755 index 0000000..81933d4 --- /dev/null +++ b/docs/ubuntu/xrdp.md @@ -0,0 +1,48 @@ +# Установка xRDP + +Выполняем обновление пакетов + +```bash +apt-get -y update +``` + +Устанавливаем графическое окружение, сервис xRDP: + +```bash +apt-get -y install xfce4 xrdp +``` + +Настраиваем использование сервером установленной графической оболочки по умолчанию: + +```bash +echo xfce4-session >~/.xsession +``` + +Редактируем файл запуска xRDP с помощью любого редактора, например, nano: + +```bash +nano /etc/xrdp/startwm.sh +``` + +Итоговое содержимое файла должно быть таким: + +```sh +#!/bin/sh + if [ -r /etc/default/locale ]; then + . /etc/default/locale + export LANG LANGUAGE + fi + startxfce4 +``` +!!! note + В конце файла необходимо добавить пустую строку. Сохраните результаты редактирования сочетанием клавиш `Ctrl+O` и выйдите из редактора через `Ctrl +X`. Делаем перезапуск xRDP сервера: + +```bash +service xrdp restart +``` + +Перезапускаем виртуальный сервер выполнив команду: + +```bash +reboot +``` \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index f01395b..ebf9771 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,5 @@ site_name: St1t.ru -site_url: https://st1t.ru +site_url: https://st1t.ru/ repo_url: https://git.st1t.ru/thest1tch/docs repo_name: thest1tch/docs edit_uri: edit/main/docs/ @@ -11,43 +11,127 @@ nav: - Установка: docker.md - Безопасность: docker/security.md - В начале: - - Traefik: docker/traefik.md + - Traefik: + - docker/traefik.md + - TCP Route: docker/traefik/tcp-routes.md + - Error Pages: docker/traefik/errorpages.md - Traefik Forward Auth: docker/traefik-forward-auth.md + - Docker Compose: + - Profile: docker/compose/profile.md + - Healthcheck: docker/compose/healthcheck.md - Сервисы: - - Linx Server: docker/linx-server.md - Samba: docker/samba.md - Redis: docker/redis.md - MotionEye: docker/motioneye.md - - Media Server: - - Plex: docker/plex.md + - Plex: + - docker/plex.md - Plex Meta Manager: docker/plex-mm.md - Plex Trakt Sync: docker/plextraktsync.md + - Homarr: docker/homarr.md - Nextcloud: - docker/nextcloud/index.md - During Scan: docker/nextcloud/during-scan.md - PHP imagick: docker/nextcloud/php-imagick.md + - Cron: docker/nextcloud/cron.md + - Проблемы с data: docker/nextcloud/problems-after-moving-data-folder.md + - Gitea: docker/gitea.md + - Drone CI: docker/drone.md - Игровые сервера: - Valheim: docker/games/valheim.md - - Ubuntu 22: - - HPE: - - Management Component Pack: ubuntu/hpe/hpe-mcp.md + - WikiJS: docker/wikijs.md + - HandBrake: docker/handbrake.md + - Pictshare: docker/pictshare.md + - Устарело: + - Linx Server: docker/linx-server.md + - Ubuntu Server: + - ubuntu/index.md + - Команды: ubuntu/commands.md + - Ошибки консоли: ubuntu/errors.md + - Добавление диска: ubuntu/add-disk.md + - Добавление S3: ubuntu/add-s3.md + - LVM: ubuntu/lvm.md + - Docker+UFW: ubuntu/docker-ufw.md + - Монтирование CIFS: ubuntu/mount-cifs.md + - Ubuntu bash aliases: ubuntu/bash-aliases.md + - Установка xRDP: ubuntu/xrdp.md + - Использование Proxy: ubuntu/proxy-system.md + - Watchdog: ubuntu/watchdog.md + - Backup: + - Google Диск: ubuntu/backup/google.md + - Yandex: ubuntu/backup/yandex.md + - Базы данных: ubuntu/backup/db.md + - WebDAV: + - Google Диск: ubuntu/webdav/google.md + - Yandex: ubuntu/webdav/yandex.md + - Софт: - MariaDB: ubuntu/mariadb.md - Telegraf: ubuntu/telegraf.md - - Docker+UFW: ubuntu/docker-ufw.md - - Монтирование CIFS: ubuntu/mount-cifs.md + - Redis: ubuntu/redis.md + - HPE: + - Management Component Pack: ubuntu/hpe/hpe-mcp.md + - NCDU: ubuntu/ncdu.md + - ctop: ubuntu/ctop.md + - Software: + - Powershell: + - software/powershell/index.md + - Active Directiry: software/powershell/ad.md + - Stop-Process: software/powershell/stop-process.md + - Count-Pages: software/powershell/count-pages.md + - Send-Mail: software/powershell/send-mail.md + - Chrome: + - Download bar: software/chrome/download-bar.md + - Windows: + - Servers: + - Удаление RUS US: software/win/serv/rusus.md + - CleanMGR: software/win/serv/cleanmgr.md + - SPP + Hyper-V: software/win/serv/spp-hyperv.md + - VHD: software/win/serv/vhd.md + - WIM в ESD: software/win/serv/wim-esd.md + - SQL Server: software/win/serv/mssql.md + - Desktop: + - Send To: software/win/desk/sendto.md + - Удаление hiberfil.sys: software/win/desk/del-hiberfil.md + - Удаление папок в МойКомп: software/win/desk/del-mycomp.md + - Удаление папки WindowsApps: software/win/desk/del-winapps.md + - Получить код OEM: software/win/desk/get-key-oem.md + - Не работает клавиша PrnScr: software/win/desk/prnscr.md + - TWINUI в свойствах файла: software/win/desk/twinui.md + - KMS: software/win/desk/kms.md + - Установка DialUX: software/win/desk/dialux.md - Proxmox: + - Proxmox VE: + - proxmox/index.md - CT Template: proxmox/ct-template.md + - Home Assistant: + - Addons: + - Zigbee2mqtt: hass/zigbee2mqtt.md + - Package: + - hass/package/index.md + - Будильник: hass/package/budilnik.md + - Device: + - Xiaomi Airpurifier: hass/device/xiaomi-airpurifier.md + - Автоматизации: + - Триггеры: + - Время: hass/automation/trigger/time.md - Другое: + - Закрыть фишинговый сайт: other/close-phishing-site.md - SSL для сайта: other/ssl-for-site.md - - Ubuntu bash aliases: other/ubuntu-bash-aliases.md + - Self Hosted: other/self-hosted.md + - Hardware: + - HPE iLo: other/hardware/hpe-ilo.md + - Принтеры: + - Kyocera: other/hardware/printers/kyocera.md - ТСД: - - Прошивка MC9090 на CE7.0: - - other/tsd/index.md - - Переустановка ОС: other/tsd/reinstall-ce7.md - - Настройка ТСД: other/tsd/config-ce7.md - - Настройка Wi-Fi: other/tsd/config-wifi.md - - Настройка TelnetCE: other/tsd/config-telnetce.md - - Установка TelnetCE: other/tsd/install-telnetce.md + - other/tsd/index.md + - Переустановка ОС: + - CE 5.0: other/tsd/reinstall-os/ce5.md + - CE 7.0: other/tsd/reinstall-os/ce7.md + - WM 6.1: other/tsd/reinstall-os/m61.md + - Настройка ТСД: other/tsd/config-ce.md + - Настройка Wi-Fi: other/tsd/config-wifi.md + - Настройка TelnetCE: other/tsd/config-telnetce.md + - Установка TelnetCE: other/tsd/install-telnetce.md + - Траблшутинг: other/tsd/troubleshooting.md - Synology: - HPE Microserver Gen10: other/synology/install-hpe-ms-gen10.md - Office: @@ -60,7 +144,7 @@ nav: - VBA Отправка почты: other/office/excel/vba-send-email.md - VBA Прогресс бар: other/office/excel/vba-progress-bar.md - VBA Удаление пароля: other/office/excel/vba-remove-pass.md - - Телефоны: + - IP Телефоны: - Grandstream: - Provisioning через TFTP: other/phone/grandstream/provisioning.md - Пример конфигурации: other/phone/grandstream/example-config.md @@ -69,19 +153,35 @@ nav: - Книги: other/phone/ipecs-mg/books.md - Голосовые приветствия: other/phone/ipecs-mg/voice.md - Сеть: + - Утилиты: + - Wtraf: network/tools/wtraf.md + - Nmap: network/tools/nmap.md - Mikrotik: + - network/mikrotik/index.md - Wireguard: network/mikrotik/wireguard.md + - 4G Модем: network/mikrotik/4g.md + - Cloud Hosted Router: network/mikrotik/chr.md + - DHCP: network/mikrotik/dhcp.md + - Split-DNS: network/mikrotik/split-dns.md + - Hairpin NAT: network/mikrotik/hairpin-nat.md + - UPnP: network/mikrotik/upnp.md + - Обход блокировок: network/mikrotik/unblock-site.md - Ubiquiti: - Добавление новой точки: network/ubi/add-new-ap.md - Ошибка обновления: network/ubi/failed-update.md + - Игры: + - ARK Survival Evolved: + - Админские команды: games/ark/admin-commands.md + - Factorio: + - games/factorio/index.md + - Payday 2: + - VanillaHUD Plus: games/payday2/hud.md - Блог: - - Начальная: blog/index.md - - Traefik FA: blog/posts/traefik-fa.md - + - Blog: blog/index.md theme: name: material - #custom_dir: overrides + theme_dir: overrides language: ru logo: images/st1t_white.png favicon: images/st1t_blue.png @@ -118,10 +218,9 @@ theme: code: Jet Brains Mono features: - #- navigation.instant - navigation.sections # prevents collapsible sections - navigation.indexes # section index pages - - navigation.expand #expands sections by default + #- navigation.expand #expands sections by default - navigation.tabs - navigation.tabs.sticky - navigation.top @@ -134,18 +233,16 @@ theme: - header.autohide - announce.dismiss - toc.follow - # insiders only - # - search.suggest plugins: + #- meta - search: lang: - ru - en - glightbox - - blogging: - dirs: # The directories to be included - - blog + - blog: + post_url_format: "{date}/{slug}" - git-revision-date-localized: type: custom custom_format: "%d.%m.%Y" @@ -181,4 +278,10 @@ extra: deprecated: Deprecated social: - icon: fontawesome/brands/discord - link: https://discord.gg/xtsgTBf \ No newline at end of file + link: https://discord.gg/xtsgTBf + analytics: + provider: google + property: G-E6GYT2D13K + +extra_css: + - stylesheets/extra.css \ No newline at end of file