Опытные юниксоиды знают и осознают всю мощь использования командной строки и немного “свысока” посматривают на “мышевозов” :) Но и в консоли есть свои недостатки, которые побеждаются с помощью каких-то приемов. У каждого свой набор, а я хочу поделиться своими наработками-находками-привычками, которые появились за долгие годы использования командной строки. Эдакий небольшой cheat-sheet. Начнем :)
1. Копирование файлов с указанием прогресса. Всегда чертовски не хватало информативности в cp
rsync --progress file1 file2
2. Преобразование текста в картинку. Использовал для создания простенькой капчи
echo -e "Some Text Line1\nSome Text Line 2" | convert -background none -density 196 -resample 72 -unsharp 0x.5 -font "Courier" text:- -trim +repage -bordercolor white -border 3 text.gif
3. Поиск и замена в текстовых файлах
find . -iname "FILENAME" -exec sed -i 's/SEARCH_STRING/REPLACE_STRING/g' {} \;
4. Метод Столлмана! Отправка веб-странички по почте :)
dstat - Combines vmstat, iostat, ifstat, netstat information and more pydf - размалеваный df iftop - top для интерфейсов htop - более прикольный top iptraf - просмотр статистики по портам mtr - динамический routetrace
The following is a very short guide on setting up Ruby Enterprise Edition (REE), nginx and Passenger, for serving Ruby on Rails applications on Ubuntu. It also includes a few quick and easy optimization tips.
We start with setting up REE (x64), using the .deb file provided by Phusion:
In output you should see “ruby 1.8.7 (2009-06-12 patchlevel 174)…” or similar. If this is the case, good; while you are there, update RubyGems and the installed gems:
sudo gem update --system sudo gem update
Next, you’ll need to install nginx, which is a really fast web server. The Phusion team has made it very easy to install, but if you simply follow most instructions found elsewhere, you’ll get the following error:
checking for system md library ... not found checking for system md5 library ... not found checking for OpenSSL md5 crypto library ... not found
./configure: error: the HTTP cache module requires md5 functions from OpenSSL library. You can either disable the module by using --without-http-cache option, or install the OpenSSL library in the system, or build the OpenSSL library statically from the source with nginx by using --with-http_ssl_module --with-openssl= options.
Instead, we are going to install libssl-dev first and then nginx and its Passenger module:
Follow the prompt and accept all the defaults (when prompted to chose between 1 and 2, pick 1).
Before I proceed with the configuration, I like to create an init script and have it boot at startup (the script itself is adapted from one provided by the excellent articles at slicehost.com):
sudo vim /etc/init.d/nginx
The content of which needs to be:
#! /bin/sh
### BEGIN INIT INFO # Provides: nginx # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts the nginx web server # Description: starts nginx using start-stop-daemon ### END INIT INFO
From now on, you’ll be able to start, stop and restart nginx with it. Start the server as follows:
sudo /etc/init.d/nginx start
Heading over to your server IP with your browser, you should see “Welcome to nginx!”. If you do, great, we can move on with the configuration of nginx for your Rails app.
Edit nginx’ configuration file:
sudo vim /opt/nginx/conf/nginx.conf
Adding a server section within the http section, as follows:
The server name can also be a subdomain if you wish (e.g., blog.example.com). It’s important that you point the root to your Rails’ app public directory.
The rails_spawn_method directive is very efficient, allowing Passenger to consume less memory per process and speed up the spawning process, whenever your Rails application is not affected by its limitations (for a discussion about this you can read the proper section in the official guide).
If you have lots of RAM (e.g., more than 512 MB) on your server, you may want to consider increasing you maximum pool size, with the directive passenger_max_pool_size from its default size of 6. Conversely, if you want to limit the number of processes running at any time and consume less memory on a small VPS (e.g., 128 to 256MB), you can decrease that number down to 2 (or something in that range). (Always test a bunch of configurations to find one that works for you). You can read more about this directive, in the official guide.
While you are modifying nginx’ configuration, you may also want to increase the worker processes (e.g., to 4, on a typical VPS) and add a few more tweaks (such as enabling gzip compression):
Оригинал: Автор: Bill Childers Дата: 1 апреля 2009 Перевод: Александр Тарасов aka oioki Дата перевода: 7 ноября 2009
В апрельском выпуске 2008 года Linux Journal была напечатана статья Кайла Ранкина (Kyle Rankin) "PXE Magic", описывающая способ работы PXE (Preboot eXecution Environment, Среда предзагрузочного исполнения), инструкцию по установке своего собственного PXE-сервера и включению аварийных средств вроде Knoppix в PXE-установщик Kickstart. Мне эта статья очень помогла, однако теперь у меня встала задача обслуживания не только сети Linux-серверов, а всей сети, состоящей из ноутбуков, рабочих станций и серверов с установленными Ubuntu и Windows. Я представил, как было бы здорово иметь сервер, с помощью которого можно было бы устанавливать не только сервера и загружать по сети аварийные средства, но также создавать временные рабочие окружения для пользователей, в том случае, если что-нибудь сломается. Было бы идеально, если бы с помощью этого PXE-сервера можно было бы по сети устанавливать Windows. Через несколько часов проб и ошибок, я, наконец, создал рецепт и, по странному стечению обстоятельств, я сумел наладить сетевую установку Windows... сперва разворачивая Linux.
Установка терминального сервера Ubuntu
Одной из моих целей при создании такой системы была возможность предоставления пользователям такой среды, которую они могли бы быстренько загрузить, чтобы она была привычна для них, и позволяла бы выполнять простейшие действия - проверить почту, зайти на сайт, отправить мгновенное сообщение и т.п. К счастью, большинство персонала в моей компании пользуется на рабочих компьютерах системой Ubuntu, поэтому ясно вырисовалось решение установить и настроить терминальный сервер Ubuntu на основе проекта Linux Terminal Server Project (LTSP).
Как любая реализация PXE, сервер LTSP требует наличия TFTP-сервера, правильно настроенного DHCP-сервера и программы syslinux. Если объяснять простыми словами, то процесс происходит так. Пользователь загружает свой компьютер, сетевой адаптер выполняет PXE-код, компьютер получает с помощью DHCP свой IP-адрес и IP-адрес сервера, на котором хранится код syslinux. Затем запускается TFTP-клиент, код syslinux скачивается и исполняется, таким образом начинается процесс загрузки. Благодаря кропотливому труду разработчиков Ubuntu LTSP, установка такого сервера происходит быстро и легко.
Есть два способа установки LTSP-сервера: обычный и самостоятельный. В первом случае предполагается, что у вас в сети уже есть существующий DHCP-сервер; а самостоятельный способ подразумевает отсутствие DHCP-сервера. В случае самостоятельной установки в вашей сети будет установлен DHCP-сервер с последующей автоматической интеграцией с LTSP-сервером. В моей сети уже был DHCP-сервер, поэтому я выбрал обычную установку с интеграцией с нашим существующим Windows Server DHCP.
Замечания по DHCP
Я упомянул интеграцию LTSP-сервера с сервером DHCP для Microsoft Windows, но отнюдь несложно заставить работать LTSP в связке с любым другим DHCP-сервером. Если у вас DHCP стандартной реализации (от Internet Software Consortium), тогда обратитесь к уже упоминавшейся статье Кайла "PXE Magic" (см. источники информации в конце статьи). В этой статье приведен пример необходимых настроек и объяснения, как они работают. Если ваш сервер - dnsmasq (он популярен в OpenWRT и других легковесных Linux-дистрибутивах для встраиваемых систем), то нужно добавить в файл dnsmasq.conf опции dhcp-option=66, и dhcp-option=pxe,67,pxelinux.0. Именно такая конфигурация работает у меня дома.
Я начал с установки стандартной десктопной Ubuntu 8.04 на сервер Dell 1950, ведь LTSP-сервер должен предоставлять пользователям рабочее окружение GNOME. После этого назначил серверу статический IP-адрес из диапазона адресов нашей сети (в той же подсети, что и рабочие станции и ноутбуки). Установка LTSP-сервера происходит проще некуда - просто наберите в терминале GNOME команду sudo apt-get install ltsp-server openssh-server, и он будет установлен. Последним шагом, относящимся к LTSP-серверу, является построение системы "тонких клиентов". Просто скомандуйте в терминале sudo ltsp-build-client, и остальные настройки и построение LTSP-окружения chroot будет выполнено автоматически.
Теперь, когда сам LTSP-сервер готов, нужно включить поддержку PXE-загрузки в нашей сети, а это означает дополнительное конфигурирование Windows DHCP-сервера. Потребовалось достаточно много времени и сил, но как и в статье Кайла, на стороне DHCP-сервера потребовалось изменить всего лишь две настройки. В Microsoft DHCP-сервере этими настройками были "066 Boot Server Host Name", которой я присвоил значение IP-адреса LTSP-сервера и настройка "067 Bootfile Name", значение которой нужно присвоить "ltsp/i386/pxelinux.0". Это значение поначалу казалась непонятным, пока я не уяснил, что корневым каталогом TFTP-сервера Ubuntu является /var/lib/tftpboot. Если у вас стоит какой-нибудь другой DHCP-сервер, тогда вам может помочь врезка "Замечания по DHCP", либо обратитесь к документации по вашему DHCP.
Рисунок 1. Окно входа в Ubuntu LTSP
На данный момент можно загрузить компьютер в нашей сети, нажать F12, выбрать в качестве загрузочного устройства сетевую карту и через 30 секунд вы получите окно входа GDM. У меня получилось бы войти, но я бы сделал это как один из пользователей на самом Ubuntu-сервере. Близко, но не совсем то, что мне нужно. В идеале, нужно настроить так, чтобы LTSP-сессию мог открыть любой пользователь из Windows-домена. Таким образом, нужно добавить этот сервер в Active Directory моего предприятия. Сама по себе эта задача не проста, но в системе Ubuntu 8.04 и выше, это можно сделать с помощью apt-get и пары других команд.
Пакет, который все это делает, называется likewise-open. Сначала нужно скомандовать:
sudo apt-get install likewise-open
И пакет likewise будет установлен. После этого нужно включить Ubuntu-сервер в Windows-домен. Для этого командуйте:
sudo domainjoin-cli join
Если требуется, чтобы likewise запускался при загрузке компьютера, тогда нужно выполнить такую команду:
sudo update-rc.d likewise-open defaults
Также я хотел, чтобы логины проверялись в домене по умолчанию, для этого я добавил эту строку в файл /etc/samba/lwiauthd.conf:
winbind use default domain = yes
Наконец, запускаем демон likewise-open с помощью:
sudo /etc/init.d/likewise-open start
Теперь мои PXE LTSP клиенты могут аутентифицировать себя в корпоративной Active Directory. Первый шаг нашей задачи выполнен!
Рисунок 2. Рабочий стол Ubuntu - работает!
Настройка установки Windows по PXE через Unattended
Следующий шаг в моих приключениях с PXE - переустановка Windows на 30 ноутбуках. Старый системный администратор устанавливал Windows через образы. К сожалению, мне не удалось найти эти файлы образов. Из-за некоторых нюансов и нехватки времени для пересоздания правильных образов для каждой аппаратной платформы, я выбрал проведение установки Windows через Unattended.
Мне известно, что вместе с Windows поставляется Remote Installation Service (RIS, Сервис удаленной установки), но так как у меня не было времени, мне не хотелось изучать полностью новую технологию. Однако у меня был другой выбор: открытый проект Unattended. Unattended попалась мне на глаза примерно год назад, и хотя я пробовал ее дома, но никогда не задействовал в корпоративных условиях. Как и многие администраторы Linux, когда я слышу слово "Windows", у меня мурашки бегут, но так как мне поручили это задание, то его нужно сделать. Я понял, что лучше решать эту задачу наиболее умным способом - не терять времени зря и автоматизировать установку Windows.
Работа Unattended основана на том факте, что первый шаг в установке Windows 2000/XP - это по сути DOS-программа. Процессы, происходящие при PXE-загрузке через Unattended, довольно запустанны, но зато это дает большую гибкость. В простейшем случае, компьютер загружает ядро Linux и оболочку, далее вступают в действие скрипты Unattended. Скрипт разбивает системный диск на разделы и создает базовую структуру FAT, затем вы выбираете операционную систему (например, тип Windows-системы), настройки конфигурации и дополнительные программы. Когда вы устанавливаете Windows по-обычному, вам задают много вопросов о серийном номере, имени пользователя, к какой рабочей группе или домену присоединять, и о пользователях с правами администратора. Скрипты Unattended автоматически собирают эти данные воедино и создают файл unattend.txt, который складывается на свежесозданной файловой системе FAT. Затем запускается сессия FreeDOS, в которой с Samba-ресурса на сервере Unattended копируются установщик Windows и части операционной системы, и, наконец, запускается установщик, задействующий файл unattend.txt. После этого установка будет происходить самостоятельно, без вмешательства администратора. Разработчики из команды Unattended пошли еще дальше и создали разные скрипты, устанавливающие дополнительные программы (к примеру, автоматизированная VPN или Microsoft Office). Эти скрипты можно включить в свою конфигурацию.
По причине отсутствия такого понятия, как "пакет Unattended", процесс установки значительно отличается от стандартных ./configure && make install, и пришлось усердно штудировать документацию на сайте. Вкратце, система Unattended использует PXE и Linux, а также Samba для передачи установочных данных, также в ней содержится набор Perl, shell и batch-скриптов, которые выполняют всю установочную "магию".
В документации предполагается, что у вас есть рабочие DHCP- и DNS-серверы, а также Samba-сервер. У меня уже был установлены DHCP- и DNS-сервер, а Samba-сервер я установил с помощью команды sudo apt-get install samba. Потом я скачал дистрибутив Unattended с веб-сайта и распаковал его в /opt/unattended. Далее, создал CNAME-запись на нашем DNS-сервере, который отображал имя ntinstall на реальное имя хоста - установочного сервера. После этого я настроил Samba-сервер, файл конфигурации /etc/samba/smb.conf выглядит примерно следующим образом (некоторые части файла опущены):
[global] ... guest account = guest unix extensions = off ... [install] comment = Unattended writable = no locking = no path = /path/to/unattended/install guest ok = yes
Наконец, пришло время заполнить место, предназначенное для дистрибутива ОС, данными Windows. Мы создаем подкаталог в каталоге корень_unattended/install/os с именем вашего дистрибутива. В моем случае я создал каталог /opt/unattended/install/os/winxp и примонтировал этот каталог через Samba на свой рабочий стол. Затем я вставил установочный диск Windows в CD-привод и скопировал с диска каталог /i386 в каталог /install/os/winxp на моем сервере. Теоретически, теперь мой сервер Unattended был готов к предоставлению установки системы... но пока не было способа выбрать установку Unattended из загрузочного меню.
Тут мне опять помогла статья Кайла. Мне нужно было не что иное, как загрузочное меню PXE, и благодаря статье Кайла, мне удалось быстренько его создать. Нужно было взять файлы bzImage и initrd из каталога tftpboot, хранящегося в zip-файле linuxboot на сайте Unattended. Эти файлы нужно поместить в каталог /var/lib/tftpboot/ltsp/i386/ (я переименовал файл bzImage в unat, а файл intird - в unatin.img, чтобы лучше их различать).
Затем я создал на сервере файл /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default (см. листинг 1). В нем содержится набор загрузочных аргументов syslinux, соответствующий конфигурациям серверов LTSP и Unattended. Нужно обратить особое внимание на директивы DISPLAY и LABEL. Директива DISPLAY означает, что при загрузке компьютера будет отображено содержимое файла pxemenu.msg, в котором содержится текст меню. Директива LABEL - это то, что нужно ввести, чтобы произошла загрузка определенного вида. В данном случае, если пользователь введет "1", система загрузит Ubuntu LTSP сессию (кстати, это вариант по умолчанию), а если введет "2", то сможет установить Windows.
Листинг 1. Пример файла pxelinux.cfg/default
default 1 serial 0,9600n8 timeout 300 prompt 1 DISPLAY pxemenu.msg F1 pxemenu.msg
Теперь при загрузке PXE-клиента у меня есть выбор - загрузить сессию Ubuntu LTSP или провести Unattended-установку. На данный момент установка Windows через Unattended мной протестирована и работает - установка базовой Windows происходит хорошо, но при этом не устанавливаются никакие драйверы, и не накладываются патчи. Я понял, как сильно я прикипел к менеджеру обновлений Ubuntu, но мне пришлось смириться с этим и искать способ довести систему полностью до рабочего состояния, чтобы установка драйверов и обновлений происходила без моего вмешательства.
Рисунок 3. Какую программу запустим?
Мне не пришлось изобретать колесо, потому что проблема с драйверами и обновлениями адресована на самом деле ребятам из Unattended. Существует способ встроить DriverPacks (это большой сжатый архив с драйверами) в систему Unattended. Описание этого метода уже выходит за рамки данной статьи, но если вам понадобится, обратитесь к соответствующей ссылке в конце статьи.
Что касается автоматической установки обновлений, то ребята из Unattended выбрали Linux-подобный подход. В каталоге Unattended есть два каталога - /install/scripts и /install/tools. Каталог scripts содержит Windows batch-файлы (с расширением .bat), они используются для проведения автоматической установки различного программного обеспечения, а также некоторых обновлений. Каталог tools содержит набор скриптов, которые будут получать текущую конфигурацию с вашего Unattended-сервера и содержимое scripts на сервере и сравнивать его с содержимым CVS-хранилища, поддерживаемого командой Unattended. Затем скрипты скачают последние bat-файлы и разместят их в соответствующем месте каталога scripts. На данный момент при установке Windows через систему Unattended также автоматически скачиваются все патчи и устанавливаются без вмешательства пользователя. После очередной перезагрузки система возьмет следующий неустановленный патч, установит его и так продолжится до полного обновления системы. Обновление вашей системы Unattended до актуального состояния происходит с помощью трех последовательных команд ./script-update; ./check; ./prepare, выполненных из каталога /install/tools из корня Unattended.
Рисунок 4. Windows устанавливается! Быстрее и надежней - вот это спорно.
CVS-архив скриптов, как и архив скриптов на вики - бесценны. Эти ресурсы помогли мне выстроить автоматизированную систему установки, и теперь у меня есть конфигурация, которая полностью удовлетворяет потребности моей компании в Windows. Теперь я могу ввести данные, относящиеся к компьютеру (буквально несколько секунд), и я могу спокойно гулять по своим делам, зная, что Windows, Office, Cisco VPN client, Symantec Anti-Virus и многие другие программы будут установлены автоматически без моего присутствия и без присутствия вообще кого-либо.
В заключение я хотел бы сказать, что благодаря усилиям разработчиков Ubuntu и LTSP, теперь у меня есть окружение, позволяющее пользователям работать даже при поломанной основной системе. И благодаря разработчикам Unattended, мне не приходится каждый раз нянчиться с установкой Windows, либо ставить Windows через полуготовые образы или другие странные способы. У меня уже есть идеи, как еще больше расширить эту систему.