Алкошоколад
Раньше нужна бутылка и шоколадка.. теперь все гораздо проще — достаточно шоколадки :)
Заметки и замечания, рассказы и пересказы
Раньше нужна бутылка и шоколадка.. теперь все гораздо проще — достаточно шоколадки :)
В последнее время начал замечать, некоторые люди общаются в электронной почте, будто это какой-то чат. Раньше тоже бывало по некоторому количеству писем, где мысль писателя коротко растекалась среди этих писем. Сейчас же «мода» пошла дальше. Не долго думая, пишут свою короткую мысль сразу в теме письма и могут добавить еще несколько аналогичных писем. При этом тело письма не трогают совсем.
Получается что-то такое:
тема письма:
Добрый день. А почему вот так, а не так где там было и что-то еще
или
тема письма:
Вот я тут попробовала, а ничего не получилось. Как же так, ведь так же никак нельзя
Можно порассуждать, мол, мы разучились и перестали писать письма. Именно в том классическом понимании, как это было раньше. Ускорение жизни, попытки краткого изложения, минимизации — в итоге и привело нас к тому, что сейчас имеем.
Пришлось столкнуться с переносом разного с одного гитлаба на другой. По ходу пьесы выяснилось, что не все так радужно в этом самом опенсорсе, но API и тот же самый опенсорс не плохо выручает.
Самая большая и прекрасная примочка — rvojcik/gitlab-project-export. Прекрасный инструмент для экспорта и импорта данных. Его также можно использовать для бэкапирования данных. Автоматизировать с его помощью работу с API довольно таки удобно. Есть правда и минусы — нужно увеличивать лимиты в настройках Gitlab, а также готовить конфиг файлы для скрипта (при экспорте и импорте, а при импорте еще и создать руками новые репо).
А вот чтобы создать конфиги... право же, не руками же их делать! Нужно будет немного поработать с API Gitlab. Если коротко, то вот такая подсказка:
#!/bin/bash
GL_DOMAIN=""
GL_TOKEN=""
echo "" > gitlab_projects_urls.txt
for ((i=1; ; i+=1)); do
contents=$(curl "$GL_DOMAIN/api/v4/projects?private_token=$GL_TOKEN&per_page=100&page=$i")
if jq -e '. | length == 0' >/dev/null; then
break
fi <<< "$contents"
echo "$contents" | jq -r '.[].ssh_url_to_repo' >> gitlab_projects_urls.txt
done
Кому подсказки недостаточно для полноценной жизни, то добро пожаловать на github, где размещены скрипты целиком. Для работы с gitlab-project-export понадобится установить или скачать саму утилиту (ставится при наличии третьего питона как обычно — pip install gitlab-project-export). Краткое содержание по файликам выглядит следующим образом:
* start2.sh - запускает вереницу событий: на выходе список и сразу экспорт файлов
* start.sh - при наличии готового списка запускается экспорт
* config-creation.sh - обрабатывает config-template.yaml, дописывает в него репо и делает config.yaml
* config-template.yaml - шаблон для gitlab-project-export.py (нужно указать URL и токен от Gitlab, а также директорию, где будут лежать файлы экспорта)
* config.yaml - готовый конфиг, делается из шаблона config-template.yaml
* get-all-projects.sh - скрипт для получения списка проектов по API (нужно указать URL и токен от Gitlab)
* gitlab_path_with_namespace.txt - текстовый файл с проектами
Ссылка на гитхаб со скриптами:
https://github.com/skurudo/usefulbash/blob/main/gitlab-export-import/readme.md
Неожиданное для меня открытие — довольно необычное (пока что) поздравление. Экзотика, одним словом :-)
Tearmoon Empire Story / Tearmoon Teikoku Monogatari
Иногда возникают странные желания, касающиеся домашних и не очень хранилищ, они же NAS, от известной компании Synology. Хранилища DSM (Synology DiskStation Manager) — программное сердце хранилищ, а создатели продукта позволили при должной настройке подключаться по ssh. Однако не все так хорошо, как могло бы показаться. Используя кастрированный линукс и оболочку, все будет не совсем так ласково и привычно, как в полюбившихся debian-like системах.
Например, нам нужно передать некую команду для выполнения от root. Предположим, мы хотим сделать такой маневр из под Windows (хотя это не самый принципиальный момент). Как бы нам это сделать без ввода паролей?
Наверное классическим маневром было бы использовать пароли или ключи, изображая что-то такое:
plink -ssh admin@192.168.0.222 -pw password -batch -t "echo password | sudo some-command-with-root-permission.sh"
Т. е. мы подключились по паролю и передали команду с вводом пароля... но в случае с Synology DSM 6+ у нас такой номер не пройдет. А для того, чтобы все получилось, нужно провести небольшую подготовку, а именно немного пошалить с sudoers (visudo у нас нет, редактировать /etc/sudoers напрямую тоже толку мало)...
Буквально по шагам, делаем нижеприведённую магию. Не забываем сначала зайти по ssh и сделать sudo su
# переходим в каталог
cd /etc/sudoers.d
# создаем файл с именем пользователя
# предположим, что у нас admin
vi admin
# включаем редактирование в vi
i
# добавляем разрешения
admin ALL=(root) NOPASSWD: /path/to/script.sh
# или на все без пароля
admin ALL=(root) NOPASSWD: ALL
# выходим из vi
<esc>
:wq!
# ставим права на файл
chmod 0400 admin
Теперь команда вроде той, что привожу ниже, отработает без каких либо проблем или ввода пароля.
plink -ssh admin@192.168.0.222 -pw password -batch -t "sudo /var/packages/HyperBackup/target/bin/img_backup -B -w -k 12"
Правда меня терзают смутные сомнения. Даже при вкусовых приятностях 3,5 литров на двоих-троих получается довольно много за один-то вечерок :-)