Как автоматизировать свой linux

Покоряй и Властвуй: Автоматизация действий

Автор: Лукас Вестерман (Lucas Westermann)

В этой статье мы рассмотрим автоматизацию ежедневных рутинных действий и создадим рабочее решение для резервного копирования. Во-первых, «сценарий bash» — это сценарий, состоящий из обычных команд bash и некоторых операторов, которые нечасто используются в командной строке (условия if-then-else, циклы while и т.д.), а cron — это демон (фоновая служба), который выполняет команды, перечисленные в пользовательском файле crontab (поэтому если вам нужно запустить задачу, требующую прав суперпользователя, то редактировать следует файл crontab, принадлежащий пользователю root). Мы будем использовать простой сценарий (всего в одну строчку), который объединяет в один текстовый файл все файлы .java из одного каталога. Вы можете изменить сценарий, например, для объединения файлов журналов. Я объясню, как он работает, а затем расскажу, как настроить cron, чтобы сценарий запускался каждые 6 часов. Я предпочитаю создавать сценарии в редакторе nano, но если вам удобнее пользоваться текстовым редактором с графическим интерфейсом, просто замените «nano» на «gedit» (без кавычек). Введите команду:

В терминале откроется редактор nano с совершенно пустым файлом. Введите следующие строки (скоро я их поясню):

Чтобы сохранить файл, нажмите Ctrl + X и Enter . Чтобы сделать его исполняемым, выполните следующую команду:

Теперь сценарий можно запустить (строчка #!/bin/bash в начале сценария указывает на программу, которую Ubuntu должна вызвать для его обработки), выполнив в терминале:

или создав символьную ссылку в /usr/bin (тогда сценарий можно будет запускать, как любую другую программу):

Замените на полный (как того требуют символьные ссылки) путь к свежесозданному сценарию.

Основа сценария — команда find, которая находит в каталоге eclipse все файлы, оканчивающиеся на .java. Затем вывод команды find передаётся циклу while, который в свою очередь построчно считывает найденные файлы и последовательно выводит строки, до тех пор, пока они не закончатся.

Как я уже говорил, можно изменить путь в сценарии, например, на /var/log/:

Этот вариант сценария сольёт воедино все файлы .log из каталога /var/log/ (и подкаталогов) и отобразит результат в терминале. Или же можно перенаправить вывод в файл.

Чтобы теперь добавить сценарий в файл crontab, я предложил бы создать символьную ссылку, чтобы команда была короче. Но это не обязательно. Запустите редактор файла crontab:

Откроется файл crontab текущего пользователя. Если вы хотите редактировать crontab пользователя root (для сценариев резервного копирования и т.д.), запустите:

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

Каждое воскресенье в 6 вечера:

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

Источник

Делаем «жизнь» в Linux проще или автоматизация запуска процессов с помощью cron

Введение
Демоны atd и cron

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

Михаэль Кофлер «Linux. Установка, настройка, администрирование.» — СПб.: Питер, 2014

Итак, что же именно делает этот самый cron. Демон активируется с интервалом в одну минуту, проверяет файлы crontab и запускает указанные в них программы. Изначально он применяется в ходе работ по поддержанию системы, но пользователь может использовать его для решения своих задач.

Если у вас установлен обычный дистрибутив, то вам не о чем беспокоится, cron инсталлируется автоматически. Если же минимальный, то не расстраиваемся — идём в терминал.

Доступ юзерам к демону, настраивается в каталоге /var/spool/cron/tabs/user. Их права задаются в файлах /cron/allow и /deny. Добавляя пользователя в /allow мы разрешаем ему выполнять команду cron, а если добавить пользователя в /deny, то наоборот, пользователю будет запрещено пользоваться демоном.

Сам cron настраивается в каталоге /etc/crontab. Файл /crontab или файлы в /etc/cron. d содержат список команд, предназначенных для выполнения. Синтаксис таков:

Например, если мне понадобится пинговать ya.ru через каждые 15 минут от имени суперюзера, то мне необходимо добавить следующее:

Если в любом из первых пяти полей стоит символ *, то это поле игнорируется. В предыдущей команде не указаны ни месяц, ни неделя, следовательно, она будет выполнятся каждые 15 минут. Чтобы изменить конфигурацию воспользуйтесь в терминале командой vi или вручную измените содержание файла /etc/crontab.

Работа с .hourly, .daily, .weekly, .monthly

По умолчанию почти во всех дистрибутивах, файл /etc/crontab содержит всего несколько записей, необходимых для выполнения сценариев:
/etc/cron.hourly/* — сценарии выполняющиеся каждый час
/etc/cron.daily/* — сценарии выполняющиеся каждый день
/etc/cron.weekly/* — сценарии выполняющиеся каждую неделю
/etc/cron.monthly/* — сценарии выполняющиеся каждый месяц

Чтобы демон выполнял ваши команды, добавьте сценарий выполняющий команды в один из каталогов. Не забудьте установить бит execute(chmod a+x файл). Если вы этого не сделаете, то у вашего сценария просто не будет доступа и он выполнятся не будет!
Для проверки, будет ли запускаться ваш сценарий, выполните команду

Читайте также:  Windows event log error level

Если сценарий расположен в другом каталоге, то соответственно меняйте daily на monthly и т.д.
И помните, в имени сценария не может быть точек, любые символы, кроме точек. Команда run-parts просто-напросто игнорирует сценарии с точкой, не знаю почему.

Источник

Автоматизация установки и развертывания Linux систем

Новички в Linux часто не подозревают как легко и просто можно автоматизировать процесс установки и развертывания системы на большом количестве компьютеров.
Сегодня я расскажу вам как можно автоматизировать процесс установки и развертывания Linux систем на примере своего самого любимого дистрибутива — Mageia Linux. Думаю, многим начинающим системным администраторам данная статья будет полезна.

Итак, установив свежую систему на одном компьютере, нужно произвести все необходимые настройки как самой системы, так и пользовательского графического окружения. Для начала нужно усвоить как правильно устанавливать программы в систему. Как вы знаете, в Windows необходимо сначала скачать софт, а потом его установить. В Linux же все намного проще. Для начала добавляем все репозитории, которые нам необходимы для установки программ.

Шаг 1

Создаем текстовый файл следующего содержания:

Обратите внимание, что в текстовый документ нужно вставлять не одну программу, а все множество программ, которые требуется установить. Пишем только сами названия пакетов, без указания версий, так как при переходе с одной версии дистрибутива на другую эти версии пакетов могут обновиться, и старая команда установки их на компьютер может уже не работать. После того, как программы будут отобраны, не забывайте в конце строки поставить опцию «—noclean», она позволяет сохранить полученные пакеты в кэш, откуда их можно будет потом изъять и установить на другом компьютере, не скачивая их при этом всякий раз заново. После того, как текстовый файл будет дописан, т.е. когда будут выбраны все программы для установки, следует зайти в терминал на правах рута при помощи команды «su» и дальнейшего ввода пароля, и выполнить длинную команду из файла в терминале. После отработки команды содержимое кэша, которое находиться по адресу /var/cache/urpmi , нужно скопировать на сменный носитель.

Шаг 2

Теперь можно приступать к настройке графического окружения и установленных программ. Новичкам будет приятно узнать о том, что все программы хранят свои настройки в домашнем каталоге пользователя. Для того, чтобы их просмотреть, нужно дать команду менеджеру файлов отображать скрытое содержимое (обычно это можно сделать сочетанием Ctrl+H). По окончании конфигурирования программ и графического окружения все эти файлы, которые начинаются с точки, нужно заархивировать и сохранить на сменном носителе.

Шаг 3

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

Источник

Автоматическая преднастроенная установка Ubuntu: isolinux и preseed

Как известно, Ubuntu Linux уже давным-давно содержит полный набор инструментов, необходимых для работы большинства офисных сотрудников. А то, что не содержит, можно доустановить, либо же запустить с сервера, например, с помощью FreeRDP и Remmina. В результате — экономия средств и сильное упрощение администрирования клиентов. Многие фирмы уже начали потихоньку заменять свой парк машин на тонкие клиенты и полноценные компьютеры с Linux. И если вы тоже хотите пересадить пару отделов на Ubuntu, то возможно я смогу помочь вам сэкономить немного времени.

В этой статье я расскажу, как создать на основе Ubuntu (а так же любых её модификаций, включая Ubuntu Sever) или Debian преднастроенную, автоматически устанавливающуюся систему. Разобравшись в описанном ниже весьма несложном материале вы сможете делать свои собственные сборки Ubuntu с необходимыми вам приложениями и настройками, которые будут способны устанавливаться в полностью автоматическом режиме как с диска, так и по сети. В итоге при желании вы сможете добиться того, что вам будет достаточно просто включить компьютер и пойти пить чай, чтобы вернувшись увидеть установленную и полностью настроенную под ваши запросы систему со всем необходимым вам для работы софтом.

Начнём с того, что данная статья содержит несколько специфичных для Ubuntu вещей, однако общие положения будут верны для любых дистрибутивов, способных использовать для установки Debain Installer. Кроме того, я не буду рассказывать, как настраивать загрузку компьютеров по сети (для этого вам понадобится TFTP сервер, развернуть который — обычно дело 2-х минут) и сосредоточу своё внимание на загрузке с диска. Однако в конце всё же расскажу, как все описанные приёмы применить для сетевого запуска компьютеров.

Итак, для начала необходимо раздобыть исходный образ системы с Debain Installer. Ubuntu Desktop LiveCD использует другой установщик, поэтому нам не подойдёт. Любой же не-LiveCD диск из семейства Ubuntu можно совершенно спокойно использовать. Вся дальнейшая инструкция написана для Ubuntu Alternate, хотя вряд ли она будет хоть чем-то отличаться для других вариантов системы.

Читайте также:  Таймер для выключения компьютера windows 10 отключить

Работа с iso

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

После его выполнения всё содержимое образа окажется в директории iso. Дальше можно будет внести необходимые изменения и запаковать образ обратно. Сразу приведу скрипт запаковки:

Пересчитывать MD5 суммы всех файлов необходимо, чтобы работала встроенная проверка целостности диска.

Автоматизация процесса установки

Теперь необходимо автоматизировать процесс установки. Для запуска установщика с диска используется загрузчик isolinux, и именно его настройке посвящён данный раздел. Про особенности загрузки по сети я расскажу в самом конце статьи.

А пока пойдём по порядку. Первым делом при запуске компьютера с CD диска Ubuntu вам предложит выбрать язык. Чтобы этот запрос не появлялся необходимо создать в папке isolinux/ файл с именем lang, всё содержимое которого будет представлять буквенный код нужного языка. У меня, например, в файле lang выбран русский язык:

Все доступные варианты языка можно посмотреть в файле isolinux/langlist.

Далее необходимо, чтобы загрузчик выбирал автоматически нужный пункт меню после некоторого ожидания. В нашем случае этим пунктом будет автоматическая установка. По умолчанию Ubuntu ждёт выбора пользователя и не выполняет никаких действий. Чтобы поменять такое поведение необходимо изменить значение параметра timeout в файле isolinux/isolinux.cfg на ненулевое значение. Время измеряется в десятых долях секунды, соответственно для выставления таймаута в две секунды в этом файле должна быть такая запись:

Осталось только выбрать, какой пункт меню будет запускаться по умолчанию. Все пункты меню задаются в файле isolinux/text.cfg, его и будем сейчас менять. Для нашей автоматической установки мы создадим свой собственный пункт меню с названием «OEM Install» для того, чтобы остались доступны обычные опции установки. Сразу надо сказать, что самим процессом установки управляют так называемые preseed файлы, которые лежат в соответствующей директории на диске. О них чуть позже, пока же можно скопировать описание любого стандартного пункта меню, поменять его имя и имя preseed файла для него, а так же сделать его запускаемым по умолчанию. Вот что в итоге получилось у меня:

На этом подготовительный этап заканчивается, теперь необходимо разбираться непосредственно с технологией preseed.

Preseed

Технология preseed позволяет заранее указать ответы на вопросы, задаваемые при установке, убрав таким образом необходимость отвечать на них вручную. Это позволяет создать полностью автоматические сценарии со всеми необходимыми настройками.

Если копнуть чуть глубже, то можно выяснить, что Debian Installer использует систему debconf для управления процессом установки, а технология preseed просто заранее добавляет нужные ответы в базу данных debconf. Таким образом с помощью preseed можно настроить не только установщик, но и другие приложения, использующие debconf, хотя эта особенность вам вряд ли пригодится.

Каждая инструкция preseed состоит обычно из четырёх частей: владельца, названия параметра, типа параметра и значения. Между частями обязательно должен быть ровно один пробел. Установщик носит имя d-i, и именно это значение будет стоять в первом поле в большинстве инструкций. Существует три способа задания инструкций preseed:

  1. Через параметры запуска ядра.
  2. Через указание загружаемого по сети файла с инструкциями.
  3. Через локальный файл с инструкциями.

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

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

Необходимо немного поменять файл isolinux/text.cfg, добавив несколько опций загрузки к нашему OEM Install пункту. В итоге должно получиться примерно следующее:

Я думаю в целом понятно, что это за параметры, и что здесь можно поменять. Теперь всего лишь осталось создать основной файл с инструкциями для preseed, который, как вы уже наверно догадались, в моём случае называется preseed/oem.seed. Сразу хочу обратить внимание, что для передачи имени файла установщику служит параметр file. Этот параметр будет работать только при загрузке с диска с помощью isolinux, и в нём для ссылки на содержимое диска можно использовать путь /cdrom.

Вот комментированное содержимое моего preseed файла:

В целом по именам опций можно понять, за что они отвечают, однако несколько интересных моментов я всё же прокомментирую.

Во-первых имейте ввиду, что для того, чтобы писать сценарии автоматической установки, надо чётко себе представлять установку в ручном режиме, в частности, на какие вопросы, когда и в каких случаях приходится отвечать. С помощью preseed можно поставить систему ровно также, как и в ручном режиме. Единственное ограничение — в автоматическом режиме нельзя произвести установку на уже имеющиеся на компьютере разделы. В моём сценарии я использую самый простой подход к выделению места: очистку и автоматическую разметку под систему всего первого жёсткого диска.

Кроме того, при автоматической установке можно использовать многие возможности, недоступные в ручном режиме. Например, вы можете задать пароль для root и создать непривилегированного пользователя системы, как и сделано у меня, а можете использовать поведение по умолчанию и сделать первого пользователя администратором, предоставив ему доступ к настройкам системы через sudo. В первом случае необходимо присвоить параметру passwd/root-login значение true и указать пароль для root, во втором — просто не добавлять этот параметр в preseed файл. Кстати, пароль можно указывать как в явном виде (крайне не рекомендуется), так и в виде хеша, аналогичного хешу в файле /etc/shadow. Во втором случае можно задать нужный пароль какому-нибудь пользователю на работающей системе, а затем скопировать значение хеша пароля для него из файла /etc/shadow в свой preseed файл. Хеши, используемые в моём файле, соответствуют паролю Passw0rd.

Читайте также:  Kvm mac os windows

Большинство полезных опций preseed можно найти в официальной документации Ubuntu. Кстати, обратите внимание: для того, чтобы указывать в сценариях preseed ответы на вопросы, в которых надо выбрать один из нескольких пунктов, достаточно всего лишь написать текст нужного пункта на английском языке (на самом деле можно только начало и можно даже не на английском, а на любом). Поэтому если вы знаете название нужной опции, то вы можете поставить систему в ручном режиме и записать текст нужного вам значения для этой опции, а потом добавить её автоматическую настройку в свой preseed файл. В моём сценарии подобным образом задано, например, значение для параметра netcfg/dhcp_options, отвечающего за действия в случае невозможности сконфигурировать сеть автоматически.

Если вы не нашли нужных вам опций в документации, то можете поставить систему вручную, а затем сразу после установки выполнить в новой системе две нижеприведённых команды:

В результате вы получите в файле seedlog.txt все значения из базы debconf, которые были использованы в процессе установки. Среди них вполне можно найти нужные вам параметры.

Как автоматизировать процесс установки вроде разобрались, теперь немного про то, как можно настроить саму устанавливаемую систему.

Настройка системы

Во-первых, обратите внимание, для указания инсталлятору набора пакетов для установки поверх базовой системы, используются задания tasksel. В приведённом выше сценарии я устанавливаю задание ubuntu-desktop, т.е. базовую систему Ubuntu для настольных компьютеров. Тому, как изменять списки устанавливаемых пакетов и управлять заданиями tasksel, будет посвящена следующая статья. Пока же будем считать, что нас вполне устраивает базовая Ubuntu и всё, что нам нужно — это настроить её для своих нужд. Кстати, Alternate диски различных вариаций Ubuntu содержат набор пакетов только под одно какое-то конкретное задание tasksel. То есть, например, на диске Xubuntu Alternate будут пакеты только для установки задания xubuntu-desktop, поэтому лучше скопировать название задания для своего preseed сценария из стандартного файла, находящегося в директории preseed/ вашего компакт-диска, и не пытаться его менять.

Но как же настроить устанавливаемую систему? Для этих целей в preseed предусмотрена возможность выполнения произвольной команды после завершения установки системы. Команда эта указывается в параметре preseed/late_command и может содержать вызов всех базовых утилит. При этом доступны две особенные директории — /cdrom, которая, как можно догадаться, ссылается на содержимое установочного диска, и /target, которая ссылается на корень уже установленной на жёсткий диск системы.

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

Мой сценарий содержит такую вот команду:

Как видно, я создаю в корне установленной системы директорию install/ и копирую в неё всё содержимое папки extra/ с моего диска, затем запускаю на выполнение скрипт postinstall.sh, предварительно войдя в новую систему с помощью chroot.

Скрипт postinstall.sh может содержать всё, что угодно, с ограничениями, описанными выше. Например:

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

Установка по сети с использованием pxelinux

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

  1. В дополнение к параметрам языка и клавиатуры preseed опции настройки сети также придётся передавать как явные параметры ядра.
  2. Нельзя использовать параметр file в опциях ядра для загрузки preseed файла, вместо него нужно использовать параметр url. Кроме того можно получать имя файла по DHCP, подробней об этом в официальной документации.
  3. Нельзя использовать директорию /cdrom ни в каких preseed параметрах, в частности, в preseed/late_command. Соответственно загружать скрипт настройки и все необходимые данные для него придётся также по сети.

В остальном всё будет ровно так же, как описано выше. Благо pxelinux является братом isolinux, предназначенным для загрузки по сети, а не с диска.

Источник

Оцените статью