Архив метки: Linux

Как использовать Vagrant с Libvirt в Linux

В этом руководстве мы рассмотрим, как использовать Vagrant с Libvirt в Linux. Vagrant — это программное обеспечение с открытым исходным кодом, написанное на Ruby, чтобы помочь вам создавать и поддерживать портативные виртуальные среды разработки программного обеспечения, например для VirtualBox, Hyper-V, контейнеров Docker, VMware, Libvirt и AWS. Vagrant упрощает создание, остановку и уничтожение виртуальных машин.

Самым популярным вариантом использования на локальных машинах является использование провайдера VirtualBox. Если вы являетесь пользователем KVM и QEMU, эта статья для вас. KVM, как известно, имеет лучшую производительность и меньшее использование ресурсов по сравнению с Virtualbox. Читать

Как использовать приложение Kali Linux в Windows 10

Операционная система Linux становится все более популярной на нескольких предприятиях. Доступно множество дистрибутивов, включая Mint, Ubuntu и Kali. Kali — один из самых известных дистрибутивов Linux, и он обычно используется тестировщиками на проникновение. Kali Linux поставляется с множеством бесплатного программного обеспечения с открытым исходным кодом, которое идеально подходит для тестирования на проникновение. Kali Linux в настоящее время доступен в Microsoft App Store для Windows 10 для экспертов по безопасности и тестировщиков на проникновение. Несмотря на очевидные недостатки, Kali Linux представляет множество новых инструментов командной строки, которые окажутся неоценимыми для настоящего профессионала. Microsoft включила в Windows 10 функцию под названием «Подсистема Windows для Linux» (WSL), которая позволяет пользователям запускать программы Linux прямо в операционной системе. Благодаря этой программе мы можем использовать практически все инструменты Kali на нашей машине с Windows. Поверх Windows 10 мы можем запустить Kali Linux. Установить Kali Linux в подсистему Windows 10 действительно просто. В этой статье вы найдете подходящий способ установки Kali Linux в вашей операционной системе Windows 10.

 

Системные Требования

Kali действительно проста в настройке. Теперь вам нужно дважды проверить, что у вас есть подходящее оборудование. Минимальные требования к оборудованию указаны ниже. Однако лучшее снаряжение приведет к лучшей производительности.

  • Для установки Kali Linux вам потребуется не менее 20 ГБ дискового пространства.
  • Рекомендуемый объем оперативной памяти — 1 ГБ; Рекомендуется 2 ГБ или более.

 

Установка Kali Linux на Windows 10

Чтобы установить WSL, щелкните правой кнопкой мыши кнопку «Пуск» в операционной системе Windows 10 и выберите Windows PowerShell из раскрывающегося меню. Откройте его с правами администратора. Для запуска напишите следующую прикрепленную команду и нажмите клавишу Enter, как показано на прикрепленном изображении:

Как использовать приложение Kali Linux в Windows 10

 

Во время выполнения система запросит перезагрузку. Итак, не забудьте перезагрузить систему, прежде чем продолжить. Магазин приложений Microsoft рекомендован в официальном руководстве по запуску Kali в подсистеме Windows. Чтобы выполнить задачу, следуйте приведенным ниже инструкциям:

Сначала введите «Microsoft Store» в кнопку меню. В меню вы увидите App Store. Затем нажмите клавишу Enter. В поле поиска в верхней части экрана введите «Kali Linux» и нажмите клавишу Enter. Kali Linux будет доступен через Microsoft App Store, как показано на прикрепленном скриншоте.

Затем вам нужно щелкнуть приложение Kali Linux. Просто нажмите кнопку «Получить» и дождитесь завершения установки. Весь процесс займет несколько минут, в зависимости от интернет-соединения вашей системы.

После завершения установки. успешно, закройте окно.

Введите слово «Kali» в область поиска. Теперь, когда Kali Linux работает, нам нужно ввести имя пользователя и пароль. Для начала вам нужно использовать командную строку. Для начала может потребоваться немного времени.

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

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

$ cat /etc/issue

Среда будет проверена выполнением предыдущей команды. Теперь нам нужно обновить систему с помощью приведенной ниже команды:

$ sudo apt update

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

$ sudo apt-get dist-upgrade

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

Заключение

В заключение, Kali Linux — фантастическая операционная система, которую использует широкий круг профессионалов. Это операционная система, о которой должен знать каждый в ИТ-секторе и любители компьютеров из-за ее комплексных утилит, надежности и простоты использования. Это программное обеспечение является прекрасным дополнением к Магазину Windows для пользователей с оптимальным знанием Linux и твердым пониманием возможностей многочисленных инструментов тестирования на проникновение в Kali Linux и того, как загружать эти инструменты. Это сделало Kali Linux более доступным для пользователей Windows, упростив процесс установки. Теперь мы надеемся, что вы сможете быстро и эффективно установить Kali Linux в операционную систему Windows 10.



2021-08-28T12:34:54
Kali Linux

Подключение Kali Linux к беспроводной сети

Сегодня беспроводные сети более распространены на открытых площадках и в крупных корпорациях, где требуется усиление безопасности для управления аутентичностью и конфиденциальностью. Беспроводная сеть позволяет участникам оставаться на связи в роуминге без проводов. Поскольку точки доступа усиливают сигналы Wi-Fi, машина может находиться далеко от маршрутизатора и при этом оставаться подключенной к сети. Вы подключаетесь к беспроводной сети этого учреждения, когда подключаетесь к точке доступа Wi-Fi в кафе или другом общественном месте. Радиочастотная (RF) технология управляет беспроводными сетями, частота, связанная с передачей радиоволн в электромагнитном спектре. Всякий раз, когда RF-ток направляется в антенну, он создает электромагнитное поле, которое может перемещаться по космосу. Большинству людей знаком значок беспроводной связи на ноутбуке или телефоне, обозначающий исправное беспроводное подключение к локальной сети, но немногие знакомы с древностью технологии Wi-Fi. Удивительно, но Wi-Fi был создан как маркетинговый термин для продвижения и облегчения взаимодействия между различными системами беспроводных локальных сетей, а не самой технологии. Wi-Fi никогда не задумывался как более короткая версия беспроводной связи; это была просто игра на фразе hi-fi (высокое качество воспроизведения), дань уважения большим аудиотехнологиям. Поскольку беспроводные сети передают данные по воздуху, утечка данных всегда возможна. По сравнению с медным кабелем беспроводные сети имеют больший риск утечки и взлома данных. В результате в беспроводных сетях повышенная концентрация шифрования данных является обязательной. Емкость устройства беспроводной сети может быть увеличена без необходимости прокладки дополнительных кабелей. В кабельных сетях LAN необходима дополнительная медная проводка для увеличения числа рабочих. Мы можем запустить Kali Linux по беспроводной сети после настройки нашей беспроводной сети. Мы можем получить все свободы типичного ПК в законном этическом тесте на проникновение, потому что нам не нужен провод Ethernet.

 

Способ подключения Kali Linux к беспроводной сети

Цель этой статьи — показать, как разрешить и остановить Wi-Fi в Kali Linux. Это можно сделать через графический интерфейс или командную строку, и в этом руководстве мы научим вас, как это сделать.

Это пригодится, если у вас возникли проблемы с доступом к беспроводному маршрутизатору или вы собираетесь использовать Aircrack-ng для мониторинга и взлома WiFi.

Способ 1

Первый способ связан с реализацией терминала Kali Linux. Запустите терминал и введите IP-адрес, чтобы увидеть метку вашего WiFi-адаптера и сведения о подключении, а также предположим, что вы уже подключены к сети Wi-Fi.

$ IP a

Идентификатор нашего WiFi-соединения в этом примере — eth0. Введите следующую прикрепленную команду, чтобы отключить соединение WiFi.

$ sudo ifconfig eth0 down

Введите следующую команду, чтобы перезагрузить устройство и активировать Wi-Fi. Затем мы также запускаем команду «IP a», чтобы увидеть, работает ли ссылка.

$ sudo ifconfig eth0 up

 

Способ 2

Программа Network Manager Text User Interface (nmtui) предоставляет вам текстовый интерфейс для работы с Network Manager и настройки вашей сети Kali Linux. Поскольку инструмент nmtui управляет Network Manager, мы должны сначала убедиться, что служба NetworkManager присутствует в нашей системе Kali Linux.

Выполните указанную ниже инструкцию на терминале Kali Linux.

$ nmtui

Как только выполнение вышеперечисленной команды завершится, в вашем окне kali Linux появится графический пользовательский интерфейс, который покажет эти три параметра:

  • Редактировать соединение
  • Активировать соединение
  • Установить имя хоста системы

Нажмите «ОК» после выбора «Активировать соединение».

Подключение Kali Linux к беспроводной сети

Как только вы выберете опцию «Активировать соединение», вы увидите другой экран. Отсюда вы можете построить беспроводную сеть.

Подключение Kali Linux к беспроводной сети

 

Заключение

Эта статья научила нас, как разрешать и ограничивать Wi-Fi в Kali Linux с помощью графического интерфейса и командной строки. Если ваш компьютер не подключается к сети Wi-Fi или не имеет доступа к Интернету, используйте это как средство устранения неполадок. Я надеюсь, что вам будет легко следовать этой статье в вашей системе Kali Linux.



2021-08-27T19:43:51
Kali Linux

Bash-скрипты

Сегодня поговорим о bash-скриптах. Это — сценарии командной строки, написанные для оболочки bash. Существуют и другие оболочки, например — zsh, tcsh, ksh, но мы сосредоточимся на bash. Этот материал предназначен для всех желающих, единственное условие — умение работать в командной строке Linux.

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

Читать

Как мне получить root-права в Kali Linux?

Имя или учетная запись пользователя root имеет по умолчанию права доступа ко всем доступным командам и файлам в Linux или любой другой Unix-подобной операционной системе. Он также известен как суперпользователь, учетная запись root и пользователь root. Имя пользователя: «kali» — стандартные учетные данные для входа в новую систему Kali. Это устанавливает сеанс в качестве пользователя «kali». Вы должны использовать этот пароль пользователя после «Sudo», чтобы получить root-доступ. Kali Linux до недавнего времени по умолчанию использовала учетную запись root. Вход в систему с правами root ограничен в текущих версиях Kali, что позволяет вам использовать свою обычную учетную запись для доступа к графическому интерфейсу. Причины этой модификации должны быть ясны, но если вы пользователь Kali, вы, вероятно, уже знакомы с системой Linux; таким образом, есть небольшой риск, если вы позволите вам войти в систему с учетной записью root. Мы создадим пользователя без полномочий root с административными возможностями во время установки Kali Linux. В других дистрибутивах Linux применяется аналогичная процедура. В старых версиях Kali по умолчанию используется root. Но сначала мы должны создать обычную учетную запись перед установкой Kali Linux. Чтобы установить любую программу или пакет под Kali, мы должны сначала войти в систему, а затем использовать команду Sudo. Итак, чтобы получить root-доступ к Kali Linux, мы должны следовать прилагаемым методам:

 

Способ 1:

Если к системе подключено много пользователей, некоторые из них могут пожелать служить администраторами и управлять системой в целом. Чтобы не оказывать прямого влияния на работу системы и облегчить совместное использование пользователями, подходящим пользователям могут быть предоставлены права администратора и другим пользователям без полномочий root. Злоумышленнику будет сложно взломать систему, если есть пользователь root. Использование sudo и отключение учетной записи root может ввести злоумышленников в заблуждение, поскольку они не будут знать, какая учетная запись имеет права администратора. Политики Sudo могут быть созданы и развернуты в корпоративной сети, а также в дистрибутивах Kali Linux. Наличие пароля root улучшает возможности мониторинга, поскольку позволяет вам видеть, что другие пользователи делали в системе, и происходят ли какие-либо вторжения.

Шаг 1. Для начала загрузите пакет kali-root-login с помощью диспетчера пакетов apt.

$ sudo apt install kali-root-login

Шаг 2: Затем используйте следующую команду из списка для настройки только что загруженной программы.

$ sudo dpkg-reconfigure kali-grant-root

Шаг 3: После выполнения вышеуказанной команды появится следующий экран.

 

Шаг 4. Убедитесь, что выбрано “enable password-less privilege escalation”, прежде чем нажимать клавишу «ENTER» для продолжения.

 

Шаг 5: После раздела пользователь будет добавлен в группу “kali-trusted”, как вы можете убедиться на прилагаемом снимке экрана.

 

Шаг 6: Это так просто. Вы даже можете использовать команду Sudo для выполнения всех последующих команд от имени пользователя root, но вам никогда не потребуется пароль. Попробуйте выйти, а затем войти, затем выполните команду, для которой обычно требуется root-доступ, чтобы проверить, работает ли она.

$ sudo apt update

 

Способ 2

Мы подключаемся как пользователи без полномочий root по умолчанию в Kali Linux 2021, и мы должны сами установить пароль root. Мы даже не знаем пароль root в первом сеансе, поэтому мы не можем войти в систему косвенно. Вместо этого мы должны войти в систему как не пользователь, что устанавливается при установке Kali Linux.

Шаг 1. Для начала вы должны сначала открыть терминал, а затем использовать эту команду, чтобы определить текущего пользователя, вошедшего в систему.

$ whoami

Вы можете проверить, что имя пользователя также является kalsoom в нашей системе.

Шаг 2: Чтобы изменить стандартную учетную запись пользователя на учетную запись root, выполните следующую команду в терминале.

$ sudo -i

 

Шаг 3: Теперь вы можете проверить, что вы находитесь в корне, используя добавленную команду.

 

На выходе отображается имя пользователя как «root».

 

Заключение

В этой статье мы узнали, как предоставить root-права обычному пользователю в Kali Linux. Вы можете использовать инструкции в этом руководстве, чтобы добавить к любой команде префикс sudo и никогда больше не вводить пароль. Когда разработчики Kali ограничили вход в систему с правами root в последних выпусках, они, должно быть, ожидали, что некоторые пользователи будут раздражены; поэтому они предоставили множество вариантов восстановления работоспособности. Одно слово мудрым при использовании пароля root: держите его в безопасности под вашим контролем; в противном случае система может быть скомпрометирована. Надеюсь, статья будет для вас полезной при работе над Kali Linux. Вы можете использовать любой из этих двух методов для получения доступа к root-правам в вашей системе.



2021-08-22T09:24:44
Kali Linux

Создание Jenkins backup/restore в Unix/Linux

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




Полезное чтиво:




Установка Jenkins в Unix/Linux




Работа с Jenkins-CLI в Unix/Linux




Установка Jenkins и Jenkins-slave в Unix/Linux




Настройка языка в Jenkins




Создание Jenkins backup/restore в Unix/Linux




И так, нам понадобится установить плагин(ы) (можно и один на выбор, я использовал несколько для сравнения):




  • Thin backup
  • Backup Plugin
  • Periodic Backup
  • SCM Sync configuration




Можно заюзать и другие решения:




  • Использовать Git и взять «$JENKINS_HOME» под него.
  • Написать BASH скрипт и создать джобу на ее выполнение.




Перейдем к решениям!




Использование Thin backup плагина для backup/restore Jenkins-а в Unix/Linux




Переходим «Manage Jenkins» -> «Manage Plugins» и устанавливаем «Thin backup». Я обычно всегда перезапускаю дженкинс для того, чтобы применились все настройки и все работало.




PS: Для перезагрузки дженкинс-сервера, я использую «Restart Safely» плагин.




Настройки бекапа, переходим в «Manage Jenkins» -> «ThinBackup»:




Плагин ThinBackup для Jenkins-а




В данном плагине имеются:




  • Backup Now — Кнопка чтобы сделать бекап сейчас.
  • Restore — Служит для рестора данных.
  • Settings — Настройка для бэкапа.




Начнем с настройки, нажимаем по нему:




Настройка thinBackup плагина для бэкапа дженкинса




Я отметил нужные мне поля и нажал на кнопку «Save». Т. е у меня будут выполнятся бэкапы по заданному расписанию и складыватся в «/backups» папку. Теперь можно запустить «Backup now» чтобы выполнился бэкап.




Вот и все. Можно юзать данный плагин для бэкаа и рестора.




Использование Backup Plugin плагина для backup/restore Jenkins-а в Unix/Linux




Переходим «Manage Jenkins» -> «Manage Plugins» и устанавливаем «Backup plugin». Я обычно всегда перезапускаю дженкинс для того, чтобы применились все настройки и все работало.




Настройки бекапа, переходим в «Manage Jenkins» -> «Backup manager»:







В данном плагине имеются:




  • Setup — Служит для настройки бэкапов.
  • Backup Hudson configuration — Чтобы создать бэкап.
  • Restore Hudson configuration — Для рестора бэкапа.




Я привел настройку к такому виду:







После настроек нажимаем на «Save». Нажимаем на «Backup Hudson configuration» для создания бэкапа.




Использование Periodic Backup плагина для backup/restore Jenkins-а в Unix/Linux




Переходим «Manage Jenkins» -> «Manage Plugins» и устанавливаем «Periodic Backup». Я обычно всегда перезапускаю дженкинс для того, чтобы применились все настройки и все работало.




Настройки бекапа, переходим в «Manage Jenkins» -> «Periodic Backup Manager»:




Меню Periodic Backup plugin




Плагин не сконфигурирован и его нужно отконфигурить. Что я и сделаю сейчас, нажимаем на «Configure»:




Настройка Periodic Backup plugin




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




Использование SCM Sync configuration плагина для backup/restore Jenkins-а в Unix/Linux




Переходим «Manage Jenkins» -> «Manage Plugins» и устанавливаем «SCM Sync configuration». Я обычно всегда перезапускаю дженкинс для того, чтобы применились все настройки и все работало.




Создам проект в гитлабе, например «configurations/jenkins».В данной проекте я буду хранить все настройки.




Переходим в «Manage Jenkins» -> «Configure System» и находим поле «SCM» и заполняем поля. У меня не получилось подружится с этим плагином вообще. Снес его!




Использование bash-скрипта для backup/restore Jenkins-а в Unix/Linux




Можно написать скрипты на любой вкус, используя bash. Есть плагин для запуска скриптов через джобу. Сейчас поставим данный плагин.




Переходим «Manage Jenkins» -> «Manage Plugins» и устанавливаем «Exclusive Execution». Я обычно всегда перезапускаю дженкинс для того, чтобы применились все настройки и все работало. Создам структуру: Projects->Configurations. Т.е папка Projects в ней будут проекты, в данном случае «Configurations» — конфиги (Для создания папки, нажмите «New item» и выбирете «folder»).




Переходим в проект и нажимаем на «New item» и кликаем по «Freestyle project». Вводим имя для проекта, у меня — «jenkins-backup» и нажимаем на «OK»:




Freestyle project для Jenkins бекапа




Потом переходим в созданный проект и нажимаем на «Configure» и находим поле «Source Code Management» и прописываем УРЛ где будет лежать скрипт для бэкапа у меня это готовое решение какого-то чела, например:




настройка SCM




Идем дальше и переходим во «Build Triggers» вкладку и заполним:







Т.е заполним переодичность с которой будет запускаться скрипт.sh1 lines




H 3 * * *




После этого переходим во «Build» вкладку и затем, из списка выбираем «Execute shell». и прописываем параметры для запуска:




Настройка запуска скрипта с параметрами через Build-execute shell




Добавляем в поле следующий текст:sh1 lines




./jenkins-backup.sh $JENKINS_HOME /backups/backup_`date +"%Y_%m_%d_%H:%M:%S"`.tar.gz




И на этом все, нажимаем на «Save». После этого, будет выполнятся бекап по заданному времени. Если есть необходимость, то можно запустить джобу маннуалли (Нажав на «Build Now»).




PS: Можно сделать бэкап-ротейт чтобы все старые бэкапы удалялись автоматом, например, можно добавить еще один «Execute shell» команду:sh1 lines




find /backups/backup_* -mtime +7 -delete




Т.е бэкапы будут хранится 7 дней, остальные будут удалены.




Вот еще один пример скрипта, который можно использовать:sh42 lines




#!/bin/bash

# Setup
#
# - Create a new Jenkins Job
# - Mark "None" for Source Control Management
# - Select the "Build Periodically" build trigger
#   - configure to run as frequently as you like
# - Add a new "Execute Shell" build step
#   - Paste the contents of this file as the command
# - Save
#  
# NOTE: before this job will work, you'll need to manually navigate to the $JENKINS_HOME directory 
# and do the initial set up of the git repository.  
# Make sure the appropriate remote is added and the default remote/branch set up.
#  

# Jenkins Configuraitons Directory
cd $JENKINS_HOME

# Add general configurations, job configurations, and user content
git add -- *.xml jobs/*/*.xml userContent/*

# only add user configurations if they exist
if [ -d users ]; then
    user_configs=`ls users/*/config.xml`

    if [ -n "$user_configs" ]; then
        git add $user_configs
    fi
fi

# mark as deleted anything that's been, well, deleted
to_remove=`git status | grep "deleted" | awk '{print $3}'`

if [ -n "$to_remove" ]; then
    git rm --ignore-unmatch $to_remove
fi

git commit -m "Automated Jenkins commit"

git push -q -u origin master




Как по мне, все тут логично и понятно что он делаеет… Аналогичным способом можно сделать джобу и запускать переодически. Тем самым, все конфиг-файлы, будут попадать в гит.




Вывод: Я протестировал несколько плагинов и выбрал — использовать скрипты или Thin backup, Periodic Backup плагины. Но если есть другие решения, — пишите, дополню материал.




Я для клиента писал вот такой скрипт:sh38 lines




#!/usr/bin/env bash


# JENKINS_HOME
#  +- config.xml     (jenkins root configuration)
#  +- *.xml          (other site-wide configuration files)
#  +- userContent    (files in this directory will be served under your http://server/userContent/)
#  +- fingerprints   (stores fingerprint records)
#  +- nodes          (slave configurations)
#  +- plugins        (stores plugins)
#  +- secrets        (secretes needed when migrating credentials to other servers)
#  +- workspace (working directory for the version control system)
#      +- [JOBNAME] (sub directory for each job)
#  +- jobs
#      +- [JOBNAME]      (sub directory for each job)
#          +- config.xml     (job configuration file)
#          +- latest         (symbolic link to the last successful build)
#          +- builds
#              +- [BUILD_ID]     (for each build)
#                  +- build.xml      (build result summary)
#                  +- log            (log file)
#                  +- changelog.xml  (change log)

echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
echo "==================== Jenkins backup ====================";
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";

JENKINS_DIR="/mnt/data/jenkins"
JENKINS_BACKUP_DIR="/mnt/data/jenkins_backup"

cp -r ${JENKINS_DIR}/*.xml ${JENKINS_BACKUP_DIR}
cp -r ${JENKINS_DIR}/userContent ${JENKINS_BACKUP_DIR}
cp -r ${JENKINS_DIR}/fingerprints ${JENKINS_BACKUP_DIR}
cp -r ${JENKINS_DIR}/nodes ${JENKINS_BACKUP_DIR}
cp -r ${JENKINS_DIR}/plugins ${JENKINS_BACKUP_DIR}
cp -r ${JENKINS_DIR}/secrets ${JENKINS_BACKUP_DIR}
cp -r ${JENKINS_DIR}/workspace ${JENKINS_BACKUP_DIR}
cp -r ${JENKINS_DIR}/jobs ${JENKINS_BACKUP_DIR}




Проверялось, — работает!











Резервное копирование для Jenkins




Все, кто занимается задачами CI/CD, так или иначе знают про Jenkins, даже если им посчастливилось не иметь с ним дела.




Этот непотопляемый кадавр продолжает жить и процветать по следующим причинам:




  • гибкость настроек (от настраиваемых диалоговых окон до встроенного Groovy);
  • архитектура с поддержкой плагинов и обширный набор готовых плагинов на все случаи жизни;
  • и самое главное — большой накопленный объём пользовательских проектов, которые проще продолжать развивать и поддерживать в среде Дженкинса, чем пытаться мигрировать на более современные и приятные платформы.




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




Однако здесь возникают два небольших препятствия:




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




Поэтому, взяв за основу один из таких костылей, мы написали свой собственный.




Список предварительных пожеланий к нему был примерно таким:




  • резервная копия должна иметь минимальный размер и максимальную скорость создания (например, дамп виртуальной машины или снимок ZFS с сотнями гигабайт проектов не годится);
  • после восстановления нам достаточно иметь полностью настроенный сервер без предыдущего состояния — который знает, как выполнять новые job’ы, но ничего не помнящий про старые;
  • поскольку настройки имеют текстовый вид, пусть они сохраняются в Git-репозиторий;
  • если Jenkins предназначен для автоматического выполнения заданий, пусть самостоятельно выполняет всю работу по своему обслуживанию.




Общая схема:




  • в $JENKINS_HOME создаётся Git-репозиторий;
  • на Git-сервере для него создаётся origin (далее приводятся настройки для Gitlab);
  • в Дженкинсе создаётся периодическое задание, которое сохраняет в Git ключевые файлы;
  • для уменьшения размера от плагинов сохраняются только манифесты, при восстановлении плагины скачиваются заново.




Сначала создайте пользователя и репозиторий в Gitlab’e:




  • пользователь = jenkins-backup-robot;
  • репозиторий = jenkins-configs;
  • URL репозитория скопируйте в буфер обмена;
  • откройте Repository => Settings => Members;
  • назначьте jenkins-backup-robot мантейнером (иначе Gitlab не даст сделать ему первый push в пустой репозиторий).




Теперь идите в командную строку сервера, на котором работает Jenkins:




  • нам требуется создать SSH-ключ и Git-репозиторий:




sudo -Hiu jenkins

cd ~

git init

git config --global user.name Jenkins

git config --global user.email "jenkins@$(hostname -f)"

git remote add origin ВСТАВЬТЕ_ЗДЕСЬ_URL_GIT_РЕПОЗИТОРИЯ

test -s ~/.ssh/id_rsa.pub || ssh-keygen

cat ~/.ssh/id_rsa.pub




Созданный SSH-ключ надо импортировать в Gitlab:




  • Это делается в разделе Admin => Users => jenkins-backup-robot => Impersonate => Personal Settings => SSH keys.




Создайте в Дженкинсе новое задание:




  • Name: Backup Jenkins configs to Git
  • Type: Free job
  • Label: master
  • SCM: None
  • Build: Build Periodically
  • Schedule: 20 04 * * *
  • Build step: Execute Shell
  • Command:




#!/bin/sh -e



cd "$JENKINS_HOME"



# Add general configurations, secrets, job configurations, nodes, user content, users and plugins info:

ls -1d *.xml secrets/ jobs/*/*.xml nodes/*/*.xml userContent/* users/*/config.xml 

    plugins/*/META-INF/MANIFEST.MF 2>/dev/null | grep -v '^queue.xml$' | xargs -r -d 'n' git add --



# Track deleted files:

LANG=C git status | awk '$1 == "deleted:" { print $2; }' | xargs -r git rm --ignore-unmatch



LANG=C git status | grep -q '^nothing to commit' || {

    git commit -m "Automated Jenkins commit at $(date '+%Y-%m-%d %H:%M')"

    git push -q -u origin master

}




  • SAVE




Пояснения:




  • Метка “master” нужна, если у Дженкинса есть slave-узлы. Если их нет, метку в задании можете не указывать. Если они есть, то в списке узлов отредактируйте свойства мастера и в поле “Labels” добавьте “master”. Если вы этого не сделаете, Дженкинс попытается выполнять задание через агентов на всех узлах, а это явно не то, что нам требуется.
  • Если для подключения к Git-серверу используется SSH, перед выполнением задания не забудьте подключиться к нему вручную, чтобы git push не завершался с ошибкой из-за StrictHostKeyChecking.




Заключительный шаг в Gitlab’e после успешного git push:




  • в свойствах репозитория откройте раздел Members и понизьте уровень доступа для Дженкинса с Maintainer до Developer;
  • в Settings => Repository => Protected branches поменяйте для ветки “master” разрешение “Allow to push” с Maintainers на Maintainers+Developers.




Восстановление плагинов:




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




sudo -Hiu jenkins

cd ~/plugins/

gawk 'BEGIN     { RS = "rn" }

      BEGINFILE { n = v = "" }

      ENDFILE   { printf "curl -sS -L -O http://updates.jenkins-ci.org/download/plugins/%s/%s/%s.hpin", n, v, n }

      $1 == "Short-Name:"     { n = $2 }

      $1 == "Plugin-Version:" { v = $2 }

    ' ./*/META-INF/MANIFEST.MF > ./download_all_plugins.sh




  • Обратите внимание, что вместо awk используется gawk (GNU awk), т.к. классический awk не понимает BEGINFILE и ENDFILE. В некоторых дистрибутивах gawk устанавливается по умолчанию, в некоторых его потребуется установить вручную.
  • Если gawk отработает без ошибок, запустите сгенерированный им файл:




sudo -Hiu jenkins

cd ~/plugins/

gawk 'BEGIN     { RS = "rn" }

      BEGINFILE { n = v = "" }

      ENDFILE   { printf "curl -sS -L -O http://updates.jenkins-ci.org/download/plugins/%s/%s/%s.hpin", n, v, n }

      $1 == "Short-Name:"     { n = $2 }

      $1 == "Plugin-Version:" { v = $2 }

    ' ./*/META-INF/MANIFEST.MF > ./download_all_plugins.sh




  • Самостоятельно распаковывать и устанавливать скачанные hpi-файлы не требуется — перезапустите Дженкинс и он сделает это сам.




Источники: https://linux-notes.org/sozdanie-jenkins-backup-restore-v-unix-linux/ и https://cdnnow.ru/blog/jenkins-backup/



2021-08-19T10:17:29
Software