110600
This commit is contained in:
209
src/content/blog/02-KMS-service.md
Normal file
209
src/content/blog/02-KMS-service.md
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
---
|
||||||
|
title: "Активация Windows в организации через KMS server"
|
||||||
|
summary: "Небольшой гайд об активации операционной windows 7/8/10/11 server без установки crack и отключения антивируса."
|
||||||
|
date: "June 11 2024"
|
||||||
|
draft: false
|
||||||
|
tags:
|
||||||
|
- Windows 11
|
||||||
|
- Windows 10
|
||||||
|
- Windows server
|
||||||
|
- KMS
|
||||||
|
- Активация windows
|
||||||
|
---
|
||||||
|
> Дисклаймер. Данная статья предоставляется в образовательных целях и не предполагает использование рассмотренного продукта для незаконной активации Windows или Office. Мы не поддерживает использование нелицензионного ПО ни в каком виде.
|
||||||
|
|
||||||
|
В данной статье будет описан процесс настройки сервера активации продуктов Microsoft в небольшой корпоративной сети с использованием дистрибутива от @Wind4, доступного на GitHub по ссылке <https://github.com/Wind4/vlmcsd>. Для этого потребуется операционная система Debian/Ubuntu, CentOS/Fedora или любая другая по вашему усмотрению, включая даже BusyBox, если вы имеете достаточные навыки для работы с ним.
|
||||||
|
# Установка
|
||||||
|
### Система требований
|
||||||
|
| | |
|
||||||
|
| --------- | ----------------- |
|
||||||
|
| Процессор | 1 ядро / > 2 Ггц |
|
||||||
|
| Озу | > 1Гб |
|
||||||
|
|
||||||
|
Этого достаточно для создания только KMS-сервера, но ничто не мешает использовать этот сервер для размещения ботов и других полезных инструментов, не забудьте увеличить мощность по потребности.
|
||||||
|
|
||||||
|
- Далее все делаем из под **root** прав.
|
||||||
|
|
||||||
|
## Шаг первый, подготовка
|
||||||
|
### CentOS\Fedora\RHEL
|
||||||
|
``` sh
|
||||||
|
dnf update
|
||||||
|
dnf install git gcc make netstat
|
||||||
|
```
|
||||||
|
### debian\Ubuntu
|
||||||
|
``` sh
|
||||||
|
apt update
|
||||||
|
apt install git gcc make netstat
|
||||||
|
```
|
||||||
|
#### Установки сетевого экрана (firewall)
|
||||||
|
``` sh
|
||||||
|
apt install iptables
|
||||||
|
```
|
||||||
|
|
||||||
|
или
|
||||||
|
|
||||||
|
``` sh
|
||||||
|
apt install firewalld
|
||||||
|
```
|
||||||
|
|
||||||
|
смотря кому что нравиться, **можно и без него**.
|
||||||
|
|
||||||
|
## Шаг второй
|
||||||
|
``` sh
|
||||||
|
git clone https://github.com/Wind4/vlmcsd
|
||||||
|
cd vlmcsd
|
||||||
|
make
|
||||||
|
cd bin
|
||||||
|
./vlmcsd
|
||||||
|
```
|
||||||
|
Далее наблюдаем ответ сервера
|
||||||
|
>Connecting to 127.0.0.1:1688 ... successful
|
||||||
|
>Sending activation request (KMS V6) 1 of 1 -> 55041-00206-559-475403-03-1076-6002.0000-1482020 (3A1C049600B60076)
|
||||||
|
|
||||||
|
По умолчанию vlmcsd слушает на стандартном порту KMS — TCP/1688.
|
||||||
|
|
||||||
|
## Шаг третий firewall
|
||||||
|
|
||||||
|
Если вы не хотите затруднять себя настройкой firewalld\iptables, можно пропустить этот шаг. Однако, если вам необходимо разрешить подключения клиентов к серверу через firewalld\iptables, вам нужно выполнить следующие команды:
|
||||||
|
|
||||||
|
**firewall-cmd**
|
||||||
|
``` sh
|
||||||
|
firewall-cmd --list-port
|
||||||
|
firewall-cmd --zone=public --add-port=1688/tcp
|
||||||
|
firewall-cmd --reload
|
||||||
|
netstat -ntlp | grep LISTEN
|
||||||
|
```
|
||||||
|
**iptables**
|
||||||
|
``` sh
|
||||||
|
iptables -A INPUT -p tcp --dport 1688 -j ACCEPT
|
||||||
|
service iptables save
|
||||||
|
service iptables restart
|
||||||
|
netstat -ntlp | grep LISTEN
|
||||||
|
```
|
||||||
|
|
||||||
|
## Шаг четвертый Автозапуск демона
|
||||||
|
|
||||||
|
Делаем автоматический старт при запуске сервера
|
||||||
|
``` sh
|
||||||
|
cp vlmcsd /usr/bin
|
||||||
|
cp vlmcs /usr/bin
|
||||||
|
touch /etc/systemd/system/kms-autostart.service
|
||||||
|
chmod 664 /etc/systemd/system/kms-autostart.service
|
||||||
|
nano /etc/systemd/system/kms-autostart.service
|
||||||
|
```
|
||||||
|
|
||||||
|
Добавляем в файл следущие параметры
|
||||||
|
``` sh
|
||||||
|
[Unit]
|
||||||
|
Description=Microsoft KMS Server
|
||||||
|
After=network.target
|
||||||
|
After=network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/usr/bin/vlmcsd
|
||||||
|
RemainAfterExit=yes
|
||||||
|
LimitNOFILE=65536
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
Выпускаем демона
|
||||||
|
``` sh
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl start kms-autostart.service
|
||||||
|
systemctl status kms-autostart.service
|
||||||
|
systemctl enable kms-autostart.service
|
||||||
|
```
|
||||||
|
## Шаг пятый, запись на DNS сервер в доменной сети
|
||||||
|
|
||||||
|
Команада для **PowerShell**
|
||||||
|
``` ps1
|
||||||
|
Add-DnsServerResourceRecord -Srv -Name "_VLMCS._tcp" -ZoneName "fipi.pro" -DomainName "192.168.0.2" -Priority 0 -Weight 0 -Port 1688
|
||||||
|
```
|
||||||
|
Редактируйте под себя.
|
||||||
|
- ZoneName "fipi.pro" – Зона в вашей доменной сети.
|
||||||
|
- 192.168.0.2 – IP адрес вашего Linux сервера со службой KMS.
|
||||||
|
|
||||||
|
Теперь все хосты Windows (и Office) в домене будут автоматически активироваться на KMS сервере, если на них установлен публичный ключ корпоративной активации (GVLK).
|
||||||
|
|
||||||
|
### Вот краткий список часто исполбзуюмых ключей.
|
||||||
|
| Operating system edition | KMS Client Product Key |
|
||||||
|
| ------------------------------- | ----------------------------- |
|
||||||
|
| Windows Server 2022 Standard | VDYBN-27WPP-V4HQT-9VMD4-VMK7H |
|
||||||
|
| Windows Server 2022 Datacenter | WX4NM-KYWYW-QJJR4-XV3QB-6VM33 |
|
||||||
|
| Windows 11 \ 10 Pro | W269N-WFGWX-YVC9B-4J6C9-T83GX |
|
||||||
|
| Windows 8.1 Pro | GCRJD-8NW9H-F2CDX-CCM8D-9D6T9 |
|
||||||
|
| Windows 7 Professional | FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4 |
|
||||||
|
|
||||||
|
В для остальных версий ключи подбирайте здесь:
|
||||||
|
> <https://docs.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys>
|
||||||
|
## Шаг активации клинтов
|
||||||
|
|
||||||
|
Для ручной активации Windows нужно задать GVLK ключ для вашей версии Windows, адрес сервера KMS активации и выполнить команду активации. Используются следующие команды (например, для Windows Server 2022 Std):
|
||||||
|
|
||||||
|
Команада для **PowerShell** от ***прав Администратора***
|
||||||
|
``` ps1
|
||||||
|
slmgr.vbs -ipk VDYBN-27WPP-V4HQT-9VMD4-VMK7H
|
||||||
|
slmgr.vbs -skms 192.168.0.2
|
||||||
|
slmgr.vbs -ato
|
||||||
|
```
|
||||||
|
Для Активации Microsoft Office 2021/2019
|
||||||
|
|
||||||
|
``` ps1
|
||||||
|
cd C:\Program Files\Microsoft Office\Office16
|
||||||
|
cscript ospp.vbs /sethst: 192.168.0.2
|
||||||
|
cscript ospp.vbs /act
|
||||||
|
```
|
||||||
|
|
||||||
|
В некоторых версия windows команда будет такая
|
||||||
|
|
||||||
|
``` ps1
|
||||||
|
cd 'C:\Program Files\Microsoft Office\Office16\'
|
||||||
|
cscript ospp.vbs /sethst: 192.168.0.2
|
||||||
|
cscript ospp.vbs /act
|
||||||
|
```
|
||||||
|
|
||||||
|
Для Активации Microsoft Office 2016
|
||||||
|
|
||||||
|
``` ps1
|
||||||
|
cd C:\Program Files\Microsoft Office\Office15
|
||||||
|
cscript ospp.vbs /sethst: 192.168.0.2
|
||||||
|
cscript ospp.vbs /act
|
||||||
|
```
|
||||||
|
|
||||||
|
## Шаг активации Windows server 2022
|
||||||
|
|
||||||
|
Качаем оригинальную версию Winodws Server 2022
|
||||||
|
> <https://www.microsoft.com/ru-ru/evalcenter/evaluate-windows-server-2022>
|
||||||
|
|
||||||
|
И до ввода ключа активации получаем ServerStandardEval
|
||||||
|
|
||||||
|
Проверяем возможные версии для обновления:
|
||||||
|
``` ps1
|
||||||
|
DISM /online /Get-TargetEditions
|
||||||
|
```
|
||||||
|
В данном случае мы хотим выполнить апгрейд Eval редакции до Retail версии Windows Server 2022 Standard. Найдите и скопируйте GVLK ключ для этой версии и редакции Windows Server из таблицы и выполните команду:
|
||||||
|
``` ps1
|
||||||
|
dism /online /set-edition:ServerStandard /productkey:xxxxx-xxxxx-xxxxx-xxxxx-xxxxx /accepteula
|
||||||
|
```
|
||||||
|
Перезагружаемся и деалем активацию как было описанно выше.
|
||||||
|
``` ps1
|
||||||
|
slmgr /skms 192.168.0.2:1688
|
||||||
|
slmgr /ato
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Вдруг пригодиться
|
||||||
|
|
||||||
|
Удалите текущий GVLK ключ:
|
||||||
|
``` ps1
|
||||||
|
slmgr.vbs /upk
|
||||||
|
slmgr.vbs /cpky
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверьте, что Windows активирована:
|
||||||
|
``` ps1
|
||||||
|
Get-CimInstance SoftwareLicensingProduct -Filter "Name like 'Windows%'" | where { $_.PartialProductKey } | select Description, LicenseStatus
|
||||||
|
```
|
||||||
243
src/content/blog/03-BOT-Support.md
Normal file
243
src/content/blog/03-BOT-Support.md
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
---
|
||||||
|
title: "Хватит терять заявки пользователей"
|
||||||
|
summary: "Пора сделать бота для принятия заявок от пользователей всем IT отделом."
|
||||||
|
date: "June 12 2024"
|
||||||
|
draft: false
|
||||||
|
tags:
|
||||||
|
- Python
|
||||||
|
- Telegram
|
||||||
|
- BOT
|
||||||
|
---
|
||||||
|
# Бот техподдержки пользователя
|
||||||
|
|
||||||
|
Пользователи пишут свои вопросы боту компании, бот пересылает эти сообщения в чат поддержки, сотрудники поддержки отвечают на эти сообщения через reply. Основной плюс - анонимизация сотрудников поддержки.
|
||||||
|
|
||||||
|
Бот работает в режиме webhook, но может работать и в режиме polling.
|
||||||
|
|
||||||
|
Для обхода запрета на пересылку сообщений у пользователя, бот копирует содержимое и уже затем отправляет его в чат поддержки.
|
||||||
|
|
||||||
|
По умолчанию бот отправляет сообщения в один чат поддержки с id, указанным в переменных окружения .env.
|
||||||
|
|
||||||
|
## Бот умеет
|
||||||
|
|
||||||
|
- Пересылать сообщения, документы, аудио и видео от пользователя в группу к администраторам и обратно
|
||||||
|
- Выдавать информацию о пользователе из Telegram
|
||||||
|
- Выдавать месячный отчет и отчет за указанный интервал дат по количеству обращений и общему числу сообщений и ответов
|
||||||
|
- Банить и разбанивать пользователей
|
||||||
|
|
||||||
|
## Типы контента, которые может пересылать бот
|
||||||
|
|
||||||
|
- Текстовые сообщения
|
||||||
|
- Фотографии
|
||||||
|
- Группы фотографий (пересылаются по одной)
|
||||||
|
- Видео
|
||||||
|
- Аудиозаписи
|
||||||
|
- Файлы
|
||||||
|
|
||||||
|
## Разворачивание образа на личном или vps сервере
|
||||||
|
|
||||||
|
### Настройка Nignx
|
||||||
|
|
||||||
|
Предполагается, что у вас есть готовый настроенный VPS сервер с установленным nginx.
|
||||||
|
|
||||||
|
1. Перейти в каталог nginx `sites-available`:
|
||||||
|
|
||||||
|
``` sh
|
||||||
|
cd /etc/nginx/sites-available/
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Создайте файл с именем вашего домена:
|
||||||
|
|
||||||
|
``` sh
|
||||||
|
nano domain.example.com
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Внутри файла напишите:
|
||||||
|
|
||||||
|
``` sh
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
|
||||||
|
server_name domain.example.com;
|
||||||
|
|
||||||
|
location /telegram/ {
|
||||||
|
proxy_set_header Host $http_host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_pass http://127.0.0.1:7772;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`server_name` - ваш домен с подключенным SSL сертификатом (например, Let's Encrypt). Вместо `/telegram/` можно написать любой путь, на который должны приниматься данные. Этот же путь нужно указать в `.env` файле.
|
||||||
|
|
||||||
|
4. Создайте символическую ссылку в каталоге `sites-enabled`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo ln -s /etc/nginx/sites-available/domain.example.com /etc/nginx/sites-enabled/
|
||||||
|
```
|
||||||
|
5. Проверьте конфигурацию nginx на ошибки:
|
||||||
|
```sh
|
||||||
|
sudo nginx -t
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Перезапустить службу nginx:
|
||||||
|
```sh
|
||||||
|
sudo systemctl restart nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
7. Установить certbot:
|
||||||
|
``` sh
|
||||||
|
sudo apt install -y certbot python3-certbot-nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
8. Установите HTTPS соединение, выпустив SSL сертификат с помощью certbot для вашего домена:
|
||||||
|
```sh
|
||||||
|
sudo certbot --nginx
|
||||||
|
```
|
||||||
|
9. Добавить автоматическое обновление сертификата:
|
||||||
|
```sh
|
||||||
|
sudo certbot renew --dry-run
|
||||||
|
```
|
||||||
|
|
||||||
|
Можно на всякий случай еще раз перезапустить nginx.
|
||||||
|
|
||||||
|
### Запуск бота
|
||||||
|
|
||||||
|
1. Создайте бота через BotFather (см. ниже), добавьте бота в группу с сотрудниками поддержки, дайте боту права администратора, узнайте id группы (см. ниже).
|
||||||
|
2. Скопируйте этот репозиторий на сервер любым удобным способом.
|
||||||
|
3. Создайте .env файл в корне со следующим содержанием:
|
||||||
|
```sh
|
||||||
|
TELEGRAM_TOKEN=<телеграм_токен_вашего_бота>
|
||||||
|
GROUP_ID=<id_группы_или_супергруппы_в_телеграме>
|
||||||
|
WEBHOOK_DOMAIN=domain.example.com
|
||||||
|
WEBHOOK_PATH=/telegram/
|
||||||
|
APP_HOST=0.0.0.0
|
||||||
|
APP_PORT=7772
|
||||||
|
DATABASE_URL=postgresql+asyncpg://<postgres_user>:<postgres_password>@<postgres_container_name>:5432/support_bot_db
|
||||||
|
DB_HOST=<имя_контейнера_с_БД>
|
||||||
|
DB_PORT=5432
|
||||||
|
POSTGRES_USER=<postgres_user>
|
||||||
|
POSTGRES_PASSWORD=<postgres_password>
|
||||||
|
START_MESSAGE=<Приветственное сообщение бота, когда клиент нажимает кнопку start>
|
||||||
|
```
|
||||||
|
В качестве теста логин пользователя БД, пароль и название БД можно указать postgres. Только для теста, не для продакшена!
|
||||||
|
|
||||||
|
4. Запустить сборку docker-образа и его запуск из файла `docker-compose`:
|
||||||
|
```sh
|
||||||
|
sudo docker-compose up -d --build
|
||||||
|
```
|
||||||
|
Ключ `-d` для того чтобы контейнер запустился в фоне.
|
||||||
|
|
||||||
|
5. Зайдите в контейнер с базой данных, создайте базу данных, выдайте права на нее пользователю (в данном случае postgres):
|
||||||
|
```sh
|
||||||
|
docker exec -it support-bot-db psql -U postgres
|
||||||
|
\l #убеждаемся, что базы данных нет
|
||||||
|
create database support_bot_db;
|
||||||
|
grant all privileges on database support_bot_db to postgres;
|
||||||
|
\q #выходим из psql
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Применить миграции:
|
||||||
|
```sh
|
||||||
|
docker exec -it support-bot alembic upgrade head
|
||||||
|
```
|
||||||
|
|
||||||
|
### Где что брать
|
||||||
|
1. `WEBHOOK_DOMAIN` - домен с подключенным ssl сертификатом
|
||||||
|
2. `WEBHOOK_PATH` - URL путь после домена. В данном случае `WEBHOOK_DOMAIN` + `WEBHOOK_PATH` будет `domain.example.com/telegram/`.
|
||||||
|
3. Token получаем при создании бота через BotFather [BotFather](https://t.me/BotFather).
|
||||||
|
4. Свой личный id или id группы можно узнать через бота [myidbot](https://t.me/myidbot). Узнать свой id - написать боту в личку, узнать id группы - добавить бота в чат группы (например группы поддержки), затем ввести команду `/getgroupid`.
|
||||||
|
5. `APP_HOST` - IP, на котором будет работать приложение (по умолчанию на хосте `127.0.0.1`, `localhost` или можно указать `0.0.0.0`).
|
||||||
|
6. `APP_PORT` - порт, который приложение будет использовать. Порт должен быть уникальным и не дублировать порты других приложений, работающих на сервере или в Docker.
|
||||||
|
|
||||||
|
## Запуск в режиме polling (на локальном компьютере)
|
||||||
|
1. Скопируйте репозиторий на локальный компьютер.
|
||||||
|
2. Создайте файл `.env` (см. выше).
|
||||||
|
3. В файле `.env` удалить (закомментировать) `WEBHOOK_DOMAIN`. Пропишите свои переменные окружения. Так же пропишите переменные окружения в файле `docker-compose-postgres-localhost.yaml`
|
||||||
|
4. Установить виртуальное окружение, активировать его,
|
||||||
|
установить зависимости из `requirements.txt`:
|
||||||
|
```sh
|
||||||
|
python -m venv venv
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
5. В докере запустить контейнер с базой данных из файла `docker-compose-postgres-localhost.yaml`:
|
||||||
|
```sh
|
||||||
|
docker-compose -f docker-compose-postgres-localhost up -d
|
||||||
|
```
|
||||||
|
6. Применить миграцию.
|
||||||
|
```sh
|
||||||
|
alembic upgrade head
|
||||||
|
```
|
||||||
|
7. Если alembic ругается, что базы данных не существует, создайте ее вручную и выйдите из psql. Затем попробуйте выполнить миграцию повторно:
|
||||||
|
```sh
|
||||||
|
docker exec -it postgres psql -U postgres
|
||||||
|
# далее в psql
|
||||||
|
create database support_bot_db;
|
||||||
|
grant all privileges on database support_bot_db to postgres;
|
||||||
|
```
|
||||||
|
8. Запустить `main.py`:
|
||||||
|
```sh
|
||||||
|
python main.py
|
||||||
|
```
|
||||||
|
Для запуска необходим python 3.9 или выше.
|
||||||
|
|
||||||
|
## Команды бота
|
||||||
|
В **чате поддержки** доступны следующие команды:
|
||||||
|
|
||||||
|
`/info` - Команда вводится через reply на вопрос пользователя и выдает информацию о нем (имя, фамилия, id, никнейм, а также количество сообщений от пользователя и ответов пользователю. Последние два берутся из созданной базы данных).
|
||||||
|
|
||||||
|
`/report` - Отчет по количеству клиентов за месяц, сообщений от них и количество ответов администраторов.
|
||||||
|
|
||||||
|
`/report 01.01.2020 15.06.2024` - Отчет за выбранный период. Две любые даты через пробел, по шаблону.
|
||||||
|
|
||||||
|
`/ban` - Команда вводится через reply на вопрос пользователя. Банит пользователя. Сообщения от него будут игнорироваться ботом.
|
||||||
|
`/unban` - Команда вводится через reply на вопрос пользователя. Разбанивает пользователя.
|
||||||
|
|
||||||
|
`/banlist` - Список забаненных пользователей. Выводит список пользователей в формате `id - имя_фамилия`.
|
||||||
|
|
||||||
|
`/registeradmin` - Регистрирует нового администратора в чате поддержки. Также администратор регистрируется автоматически, если ответит на сообщение клиента через reply. Это сделано на случай, если забыли зарегистрировать администратора, а он уже отвечает на сообщения.
|
||||||
|
|
||||||
|
`/deleteadmin` - Удаляет права администратора у пользователя в чате поддержки. После удаления прав администратора нужно вручную удалить пользователя из группы Telegram.
|
||||||
|
|
||||||
|
## Автозапуск бота
|
||||||
|
1. Создание службы:
|
||||||
|
Создайте файл службы для вашего бота, например `my_bot.service`:
|
||||||
|
```sh
|
||||||
|
sudo nano /etc/systemd/system/my_bot.service
|
||||||
|
```
|
||||||
|
2. Редактирование службы:
|
||||||
|
Внесите следующие настройки в файл службы:
|
||||||
|
```sh
|
||||||
|
[Unit]
|
||||||
|
Description=My Python Telegram Bot
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=your_username
|
||||||
|
Group=your_groupname
|
||||||
|
WorkingDirectory=/path/to/your/bot
|
||||||
|
ExecStart=/path/to/your/python /path/to/your/bot/main.py
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
Замените `your_username`, `your_groupname`, `/path/to/your/bot`, и `/path/to/your/python` на соответствующие значения для вашей среды. Убедитесь, что `ExecStart` указывает на правильный путь к вашему скрипту Python бота.
|
||||||
|
|
||||||
|
3. Перезагрузка systemd:
|
||||||
|
После того как вы сохранили изменения, перезагрузите systemd для применения новой службы:
|
||||||
|
```sh
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
```
|
||||||
|
4. Управление службой:
|
||||||
|
Теперь вы можете управлять вашим ботом как службой. Например, чтобы запустить его и настроить автозапуск при загрузке системы, выполните следующие команды:
|
||||||
|
```sh
|
||||||
|
sudo systemctl start my_bot
|
||||||
|
sudo systemctl enable my_bot
|
||||||
|
```
|
||||||
|
Чтобы проверить статус вашей службы, выполните:
|
||||||
|
```sh
|
||||||
|
sudo systemctl status my_bot
|
||||||
|
```
|
||||||
82
src/content/blog/04-office-2021.md
Normal file
82
src/content/blog/04-office-2021.md
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
---
|
||||||
|
title: "Установливаем последний Microsoft Office с официального сайта."
|
||||||
|
summary: "Инструкция по установке последней версии Microsoft Office с официального сайта. В статье описаны шаги загрузки установочного файла, процесс установки и активации Office, а также советы по устранению возможных проблем."
|
||||||
|
date: "June 13 2024"
|
||||||
|
draft: false
|
||||||
|
tags:
|
||||||
|
- Microsoft Office
|
||||||
|
---
|
||||||
|
> Дисклаймер. Данная статья предоставляется в образовательных целях и не предполагает использование рассмотренного продукта для незаконной активации Windows или Office. Мы не поддерживает использование нелицензионного ПО ни в каком виде.
|
||||||
|
|
||||||
|
# Качаем
|
||||||
|
|
||||||
|
Скачайте Microsoft Office Deployment Tool
|
||||||
|
|
||||||
|
> <https://www.microsoft.com/en-us/download/details.aspx?id=49117>
|
||||||
|
|
||||||
|
Запускаем файл **officedeploymenttool_17531-20046.exe** и распакуйте содержимое Office Click-to-Run Administrator Tool в локальный каталог на компьютере.
|
||||||
|
|
||||||
|
В каталоге установки находятся четыре XML файла с образцами конфигурации: __configuration-Office365-x64.xml__, __configuration-Office365-x86.xml__, __configuration-Office2021Enterprise.xml__ и __configuration-Office2021Enterprise.xml__. Программа setup.exe используется для загрузки дистрибутива и установки пакета Office на клиенте.
|
||||||
|
|
||||||
|
Пример конфигурационного файла *.xml:
|
||||||
|
``` xml
|
||||||
|
<Configuration>
|
||||||
|
<Add OfficeClientEdition="64" Channel="PerpetualVL2021">
|
||||||
|
<Product ID="ProPlus2021Volume">
|
||||||
|
<Language ID="en-us" />
|
||||||
|
</Product>
|
||||||
|
<Product ID="VisioPro2021Volume">
|
||||||
|
<Language ID="en-us" />
|
||||||
|
</Product>
|
||||||
|
<Product ID="ProjectPro2021Volume">
|
||||||
|
<Language ID="en-us" />
|
||||||
|
</Product>
|
||||||
|
</Add>
|
||||||
|
<!-- <RemoveMSI All="True" /> -->
|
||||||
|
<!-- <Display Level="None" AcceptEULA="TRUE" /> -->
|
||||||
|
<!-- <Property Name="AUTOACTIVATE" Value="1" /> -->
|
||||||
|
</Configuration>
|
||||||
|
```
|
||||||
|
|
||||||
|
Рассмотрим основные параметры:
|
||||||
|
|
||||||
|
- `OfficeClientEdition="64"` – установка 64-битной версии Office 2021;;
|
||||||
|
- `Channel="PerpetualVL2021"` – установка Office 2021 по системе корпоративного лицензирования (Volume License);
|
||||||
|
- `<Language ID="en-us" />` — установка английской версии Office. Для русской версии укажите ru-ru;
|
||||||
|
- `<!-- <RemoveMSI All="True" /> -->` — удаление старых версий Office, установленных через Windows MSI. Этот параметр закомментирован, но его нужно включить перед установкой Office 2021, чтобы избежать ошибок;
|
||||||
|
- `<Product ID="ProPlus2021Volume" PIDKEY="" >` — указание компонентов пакета Office (например, ProPlus2021Volume, ProjectPro2021Volume, VisioPro2021Volume), которые нужно установить. В параметре `PIDKEY=""` можно указать ваш корпоративный ключ (обычно это MAK ключ);
|
||||||
|
- Используя директиву `<ExcludeApp ID="PowerPoint" />`, можно установить только выбранные приложения Office (по умолчанию установщик C2R устанавливает все приложения пакета Office).
|
||||||
|
|
||||||
|
Подробное описание всех параметров:
|
||||||
|
|
||||||
|
> <https://learn.microsoft.com/en-us/deployoffice/office2019/deploy#create-the-configurationxml>
|
||||||
|
|
||||||
|
Создание файла конфигурации под ваши конкретные параметры:
|
||||||
|
|
||||||
|
> <https://config.office.com/>
|
||||||
|
|
||||||
|
После создания XML файла, скачайте дистрибутив для установки Office 2021. Выполните команду:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
Setup.exe /download configuration-Office2021Enterprise.xml
|
||||||
|
```
|
||||||
|
- В случае неудачи скачивания, запустите VPN, можете воспользоваться нашим сервисом.
|
||||||
|
|
||||||
|
> <https://t.me/Dig_for_bot>
|
||||||
|
|
||||||
|
После завершения загрузки в каталоге Microsoft Office Deployment Tool появится папка Office (содержит cab и dat файлы для установки Office 2021) размером около 2 Гб.
|
||||||
|
|
||||||
|
## Локальная установка
|
||||||
|
Для начала установки Office 2021 выполните команду:
|
||||||
|
``` bash
|
||||||
|
Setup.exe /configure configuration-Office2021Enterprise.xml
|
||||||
|
```
|
||||||
|
После завершения установки Office 2021 Enterprise или любого другого пакета, вы можете активировать продукт.
|
||||||
|
|
||||||
|
## Сетевая установка
|
||||||
|
Полученный пакет можно использовать для установки Office 2021 на компьютеры пользователей. Чтобы каждый компьютер не загружал установочные файлы Office 2021 из сети CDN, а использовал локальную копию, укажите путь к каталогу с файлами установки Office в XML файле. Например:
|
||||||
|
|
||||||
|
``` xml
|
||||||
|
<Add SourcePath="\\FS1\Distr\Office2021" OfficeClientEdition="64" Channel="PerpetualVL2021">
|
||||||
|
```
|
||||||
|
Теперь вы можете скопировать каталог Microsoft Office Deployment Tool с XML файлами и дистрибутивом Office 2021 в сетевой каталог или на сервер SCCM.
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
import type { CollectionEntry } from "astro:content"
|
|
||||||
import { formatDate, readingTime } from "@lib/utils"
|
import { formatDate, readingTime } from "@lib/utils"
|
||||||
|
import type { CollectionEntry } from "astro:content"
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
entry: CollectionEntry<"projects"> | CollectionEntry<"blog">
|
entry: CollectionEntry<"projects"> | CollectionEntry<"blog">
|
||||||
@@ -21,7 +21,7 @@ const repoUrl = collection === "projects" ? data.repoUrl : null
|
|||||||
<polyline points="12 19 5 12 12 5" class="translate-x-1 group-hover:translate-x-0 transition-all duration-300 ease-in-out" />
|
<polyline points="12 19 5 12 12 5" class="translate-x-1 group-hover:translate-x-0 transition-all duration-300 ease-in-out" />
|
||||||
</svg>
|
</svg>
|
||||||
<div class="w-full group-hover:text-black group-hover:dark:text-white transition-colors duration-300 ease-in-out">
|
<div class="w-full group-hover:text-black group-hover:dark:text-white transition-colors duration-300 ease-in-out">
|
||||||
Back to {collection}
|
Вернуться в {collection}
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
<div class="flex flex-wrap text-sm uppercase mt-12 gap-3 opacity-75">
|
<div class="flex flex-wrap text-sm uppercase mt-12 gap-3 opacity-75">
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ export function cn(...inputs: ClassValue[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function formatDate(date: Date) {
|
export function formatDate(date: Date) {
|
||||||
return Intl.DateTimeFormat("en-US", {
|
return Intl.DateTimeFormat("ru-RU", {
|
||||||
month: "short",
|
month: "short",
|
||||||
day: "2-digit",
|
day: "2-digit",
|
||||||
year: "numeric"
|
year: "numeric"
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
---
|
---
|
||||||
import { getCollection } from "astro:content"
|
import { WORK } from "@consts"
|
||||||
|
import BottomLayout from "@layouts/BottomLayout.astro"
|
||||||
import PageLayout from "@layouts/PageLayout.astro"
|
import PageLayout from "@layouts/PageLayout.astro"
|
||||||
import TopLayout from "@layouts/TopLayout.astro"
|
import TopLayout from "@layouts/TopLayout.astro"
|
||||||
import BottomLayout from "@layouts/BottomLayout.astro"
|
import { getCollection } from "astro:content"
|
||||||
import { WORK } from "@consts"
|
|
||||||
|
|
||||||
const collection = await getCollection("work")
|
const collection = await getCollection("work")
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ const work = await Promise.all(
|
|||||||
function formatWorkDate(input: Date | string) {
|
function formatWorkDate(input: Date | string) {
|
||||||
if (typeof input === "string") return input
|
if (typeof input === "string") return input
|
||||||
|
|
||||||
const month = input.toLocaleDateString("en-US", {
|
const month = input.toLocaleDateString("ru-RU", {
|
||||||
month: "short",
|
month: "short",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user