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):
В апрельском выпуске 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 через полуготовые образы или другие странные способы. У меня уже есть идеи, как еще больше расширить эту систему.
Источники информации
"PXE Magic: Flexible Network Booting with Menus" от Кайла Ранкина (Выпуск журнала LJ от апреля 2008): www.linuxjournal.com/article/9963
Билл Чайлдерс (Bill Childers) - IT-менеджер из Силиконовой долины, где он живет со своей женой и двумя детьми. Ему слишком нравится Linux, возможно, ему нужно почаще выходить на солнышко. В свое свободное время посещает фестиваль чеснока в Гилрое, но он вовсе не пахнет чесноком.
В прошлый раз мы остановились на том, что после установки системы сразу же появилось свернутое окно менеджера обновлений. Именно о его поведении и пойдёт речь в этой статье.
Не знаю из каких соображений, но способ уведомлений о доступных обновлениях системы в 9.04 был изменён. По-умолчанию, раз в неделю проверяются обновления, и если такие есть, то внезапно появляется окно со списком этих пакетов. Не знаю как вас, а меня это сильно раздражает.
Внезапно появляется окно со списком обновлений
К счастью есть возможность вернуть способ уведомления об обновлениях так, как это происходило в 8.10 или 8.04 (на панели просто появлялся желтый значок, сообщающий об обновлениях программ).
Всё что для этого нужно, это программа Терминал и пару команд. Только не нужно пугаться и убегать. Это можно сделать и через графическую систему, но через Терминал намного быстрее.
Запускаем Терминал:
Запускаем Терминал
Эта команда как раз и отключает внезапное появление окна со списком доступных обновлений (просто скопируйте эту команду в Терминал и нажмите Enter):
На этом можно было бы и остановиться, но есть ещё парочка полезных опций, включать их или нет – решать Вам.
Следующая команда задаёт интервал проверки доступных обновлений. По-умолчанию он равен 7 дней, мы же поставим 1 день (просто скопируйте эту команду в Терминал и нажмите Enter):
gconftool -s --type int /apps/update-notifier/regular_auto_launch_interval 1
И ещё одна полезная опция, которая будет отображать с какой и на какую версию будут обновлены пакеты (просто скопируйте эту команду в Терминал и нажмите Enter):
После чего можно закрыть Терминал и продолжить работу. Через некоторое время в панели задач появится значок, сообщающий о наличии уведомлений.
Для чистоты эксперимента я перезагружу Ubuntu (хотя это делать не обязательно, это не Windows).
Перезагружаю компьютер
После загрузки системы и прошествии нескольких минут, на панели возле часов появился значок, показывающий о наличии обновлений. Никаких внезапно появляющихся окон. Что и требовалось показать:
Значок – красный, а не жёлтый – т.к. имеются критические обновления системы
Значок, уведомляющих об обновлениях
Если щелкнуть по этому значку левой кнопкой мыши, то появиться окно со списком доступных обновлений:
Список доступных обновлений
Рассмотрим, например, пакет apport-gtk:
Пакет apport-gtk
Видите подпись под пакетом?:
С версии … на … (Размер: …)
Именно для отображения этой информации и вводилась последняя команда в терминале. Иногда эта информация бывает полезной.
Надеюсь эта статья будет полезной для вас. До встречи!
# mysql server # use apt-get to avoid installing exim4 DEBIAN_FRONTEND=noninteractive apt-get install --assume-yes \ mysql-server mysql-client \ libmysqlclient15-dev libmysql-ruby1.8
# git mkdir gitcore cd gitcore wget http://kernel.org/pub/software/scm/git/git-1.6.0.3.tar.gz apt-get build-dep git-core --assume-yes tar xzvf git-1.6.0.3.tar.gz cd git-1.6.0.3/ ./configure make make install cd
4) создаем дистрибутив livecd/dvd из нашей системы sudo remastersys dist
5) создаем дистрибутив livecd/dvd только из файловой системы sudo remastersys dist cdfs
6) создаем дистрибутив с именем custom.iso, если cdfs уже сделали sudo remastersys dist iso custom.iso
Создание ISO образа sudo remastersys dist
Эта команда создаст образ iso с называнием customdist.iso в каталоге / home / remastersys . Опция dist позволяет не включить в образ ваши личные папки (например, / home / user). Возможно в ходе процесса вам придется вставить установочный диск Ubuntu.
процесс создания образа идет примерно так:
[…] 92.16% done, estimate finish Wed DEC 28 15:31:25 2007 93.39% done, estimate finish Wed DEC 28 15:31:25 2007 94.62% done, estimate finish Wed DEC 28 15:31:24 2007 95.85% done, estimate finish Wed DEC 28 15:31:24 2007 97.08% done, estimate finish Wed DEC 28 15:31:25 2007 98.31% done, estimate finish Wed DEC 28 15:31:25 2007 99.54% done, estimate finish Wed DEC 28 15:31:25 2007 Total translation table size: 2048 Total rockridge attributes bytes: 3950 Total directory bytes: 9094 Path table size(bytes): 54 Max brk space used 0 406890 extents written (794 MB)
В каталоге /home/remastersys/ создастся образ customdist.iso, который можно буде записать на болванку. Если размер образа более 700Мб, то его можно записать на DVD болванку Чистим
После того как образ протестирован, записан и он больше не нужен выполняем
sudo remastersys clean
удалятся все временные файлы и образ диска в директории /home/remastersys.
Команда Ubuntu apt-mirror используется для автоматического создания зеркала репозиториев, указанных в файле /etc/apt/mirror.list.
sudo apt-get install apt-mirror
Можно закомментировать ненужные строки, поставив в их начало символ решетки (#). Если же вы хотите загрузить только пакеты main и restricted, поместите решетку перед ‘universe’ или ‘multiverse’, чтобы закомментировать их. С зеркала, расположенного в вашей стране, загрузка может проходить быстрее. Отредактировав файл сохраняем его Ctrl+O Ctrl+X Запускаем копирование выбранных репозитариев
sudo apt-mirror
В зависимости от сделанных вами изменений, размер загрузки может достигать 40 ГБ, если не больше! К счастью, apt-mirror запоминает, где остановился, если вы отменили его работу, не дождавшись конца, и вы можете выполнять загрузку несколько ночей, пока она не закончится. Все данные сохранятся в /var/spool/apt-mirror/mirror/archive.ubuntu.com/ubuntu и будут готовы к использованию.
Ubuntu уже позаботился о включении соответствующего задания Cron под названием apt-mirror, в закомментированном виде, в /etc/cron.d/. По умолчанию установлено ежедневное обновление в 16-00, но вы можете изменить это как вам удобнее.
Вчера собрался ускорить работу(получилось достаточно ощутимо) и загрузку системы(30 секунд, против полутора минут), почитал многие how-to. Опишу что и где я улучшал. Итак о способах, по порядку: 1. Прописываем hostname.
sudo vim /etc/hosts
Было:
127.0.0.1 localhost 127.0.1.1 lib
Стало:
127.0.0.1 localhost lib 127.0.1.1 lib
Подписываем то, что справа от вызова консоли находится, например: lib@laptop:~$, то вписываем laptop. Это несколько ускоряет загрузку системы, и ускоряет запуск некоторых программ.
2. Использование ядра, сконфигурированного под Вашу систему, подробнее как можно собрать ядро в Ubuntu. По ссылке написано, как собирается ядро для 6.10, однако советы справедливы и для 8.04.
3. Несколько ускоряем работу ext3 файловой системы:
sudo vim /boot/grub/menu.lst
Добавляем в существующие строки:
# defoptions=quiet splash rootflags=data=writeback # altoptions=(recovery mode) single rootflags=data=writeback
У меня в defoptions убран quiet и splash дополнительно, и добавлен vga=0×324, для framebuffer.
/dev/sda1 это имя раздела, на котором лежит / Проверяем:
sudo tune2fs -l /dev/sda1
Этот метод череват тем, что можете потерять некоторые данные при неожиданном выключении системы, например если у вас неожиданно отключилось питание(мне это не грозит, поскольку у меня ещё батарея есть)
Подробно о сервисах написано на ubuntuforums.org Дополнительно я отключал apache и mysql, я их запускаю непосредственно, когда хочу поработать с локальным вебсервером.
8. Если у Вас постоянное подключение к интернету, добавляем в /etc/sysctl.conf.
Всё это позволило мне ускорить работу системы на порядок, однако есть ещё пара способов, которые я рекомендовать не могу, поскольку не совсем понимаю как они работают, а именно: установленный пакет preload(sudo aptitude install preload), prelink(sudo aptitude install prelink) Подробнее о prelink здесь.
which exiftool &>/dev/null
if [ $? != "0" ];
then
echo -e "exiftool not found, please install it -> sudo apt-get install libimage-exiftool-perl ";
exit 0
fi
#parameters: from_path, to_path
PARAMSIZE=2
if [ $# -lt "$PARAMSIZE" ];
then
echo "Usage : photosort.sh from_path to_path"
else
#get first parameter
from_path=$1
#get second parameter
to_path=$2
# Move all pictures
exiftool -r '-Directory<DateTimeOriginal' -d $to_path/%Y-%m-%d $from_path
приэтом все фото jpg,raw,tif,cr2,crw .... будут перемещены из директории /home/user1/unsorted_photo ( и рекурсивно из всех поддиректорий) в директории следующего вида
по идее установка должна быть такой apt-get install ubuntu-xen-desktop однако из за ошибок ругается на неудовлетворенные зависимости xenman и не ставитя.
В конторе периодически закупаются новые компьютеры и сотрудникам IT-отдела приходится отрываться от более интересных дел и заниматься рутиной в виде установки и настройки операционной системы. Установка Ubuntu традиционным способом с помощью компакт-диска, установка драйверов, обновлений и дополнительных программ из интернета, настройка всего занимают слишком много времени. Одним из способов оптимизации процесса является создание типового образа операционной системы и затем быстрое его развертывание на новых компьютерах.
Создание эталонного образа.
Прежде всего необходимо создать эталонный образ Ubuntu. Для этого нам потребуется эмулятор виртуальных машин, например VirtualBox или VMWare. Далее:
Устанавливаем Ubuntu в виртуальной машине.
Настраиваем установленную операционную систему. Например так:
включить основные и дополнительные репозитарии и произвести обновление пакетов;
установить полную локализацию системы;
установить мультимедийные кодеки;
установить пакеты с драйверами для видео карт nvidia и ati;
установить flash плугин для браузера;
установить плугин для открытия документов MSOffice 2007 (*.docx и др.) в OpenOffice;
установить необходимые программы и утилиты: ssh сервер, vnc сервер, unrar, wine, virtualbox и много чего ещё...;
указать сетевые настройки, например адреса dns и ntp серверов, маршруты;
отключить загрузку не нужных демонов;
отключить запуск не нужных заданий по расписанию cron;
любые другие программы и/или настройки.
Настройка профиля пользователя по умолчанию. Для этого создаем пользователя, например testuser, логинимся под ним и производим настройку. Например:
отключить эффекты рабочего стола;
разрешить удаленный доступ к рабочему столу (vnc) и задать пароль для него;
прописать настройки соединения в браузере: проски-сервер и прочее;
в редакторе меню отключить запуск некоторых программ, например подменю "Игры";
в настройках сеанса, отключить запуск не нужных программ;
любые другие настройки.
После завершения настройки профиля, копируем содержимое /home/testuser в /etc/skel. Делаем владельцом пользователя root:
sudo chown -R root:root /etc/skel
Просматриваем директорию /etc/skel, удаляем все лишнее, заменяем в файлах абсолюный путь /home/testuser на относительный ~/.
Теперь при создании нового пользователя в его домашнюю директорию будет копироваться содержимое /etc/skel.
Для создания образа будем использовать livecd дистрибутив System Rescue CD.
После загрузки, поднимаем сеть:
sysresccd ~ # net-setup
Монтируем директорию по сети, куда мы будем копировать образ:
sysresccd ~ # mkdir /mnt/etalon
пример для sftp:
sysresccd ~ # mount -t fuse sshfs#login@192.168.0.1:/etalon /mnt/etalon
пример для smb:
sysresccd ~ # mount -t cifs -o user=login //192.168.0.2/etalon /mnt/etalon
sysresccd ~ # cd /mnt/sda1 sysresccd sda1 # tar cvzf /mnt/etalon/etalon-ubuntu8.04-20080704.tar.gz *
Образ операционной системы создан. У меня файл образа занимает около 1,5 Гб. Остается только записать его на dvd болванку.
Развертывание эталонного образа на новом компьютере
Развертывание образа эта операция ради которой и затевалось создание самого образа. Здесь нас снова поможет незаменимый инструмент системного администратора System Rescue CD. Загружаем новый компьютер с его помощью, при загрузке вводим опции, чтобы после можно было освободить dvd привод:
rescuecd docache doeject
Вытаскиваем livecd, устанавливаем в привод болванку с образом. Далее:
Разметка диска. Например: все место под корневой раздел, файловая система reiserfs, под swap 2ГБ:
Правим файлы /mnt/sda1/etc/fstab и /mnt/sda1/boot/grub/menu.lst чтобы UUID метки дисков соответствовали новым томам. UUID метки можно узнать с помощью команды:
sysresccd ~ # blkid
Устанавливаем загрузчик grub в mbr область нового диска:
Компьютер готов к работе. После установки на рабочее место пользователя ещё потребуется настроить принтера, но это уже отдельная история.
После приобретения некоторого опыта установка операционной системы на новый компьютер занимает около 20 минут. Конечно предварительно должно быть потрачено время на создание эталонного образа и периодическое его обновление, но при больших количествах новых компьютеров оно окупается. Данный способ успешно применяется уже 1,5 года.
Когда я покупал себе ASUS Eee PC, я совершенно не думал о том, какую операционную систему установлю на нем - однозначно это будет Ubuntu Linux. Во-первых, потому, что Ubuntu у меня стоит и дома и на работе, во-вторых, потому, что и дома и на работе у меня есть локальное зеркало репозитория Ubuntu, а в-третьих просто потому, что данный дистрибутив меня всем устраивает.
После покупки я сразу же полез в Интернет в поисках различных HowTo по установке Ubuntu 8.04 на Eee PC. Результат меня несколько удивил. Несмотря на огромный ажиотаж вокруг Eee PC, этих самых HowTo в сети не так уж и много + большинство из них нацелены на Ubuntu 7.10 и предлагают запустить некий скрипт, который заменит системные конфигурационные файлы своими, заточенными под Eee PC.
На эти скрипты я даже и смотреть не стал, т. к. они предназначены для Ubuntu 7.10, и их запуск на Ubuntu 8.04 может привести к нехорошим последствиям. Поэтому во время поиска необходимой информации в сети я обращал внимание только на те статьи, в которых описывается, как можно настроить Ubuntu под Eee PC "своими руками". Найти такой HowTo, в котором содержались бы ответы на все встающие передо мной вопросы, мне не удалось, поэтому я решил систематизировать собранную мной информацию и слить ее в одну статью. Сейчас моя система уже настроена, поэтому я постараюсь вспомнить все действия, которые я производил над ней, дабы все заработало так, как мне хочется. Надеюсь, я ничего не упущу. :)
Установка
Для установки нам понадобится загрузочный диск с Ubuntu 8.04 и флэшка на 1 Гб или более. Перед использованием флэшки не забудьте скопировать с нее все важные данные.
# Делаем образ диска dd if=/dev/cdrom of=ubuntu.iso
Все, теперь можно грузиться с этой флэшки как с диска и устанавливать Ubuntu на Eee PC. Для этого во время загрузки Eee PC нажмите F2, чтобы зайти в BIOS и там на вкладке Boot сделайте соответствующие настройки, чтобы загрузка происходила с флэш карты.
Загрузка
Чтобы увеличить скорость загрузки операционной системы, в /boot/grub/menu.lst замените строку
# defoptions=quiet splash
на
# defoptions=quiet splash clocksource=hpet
и запустите
sudo update-grub
Теперь время загрузки операционной системы должно сократиться примерно на 40 секунд.
Выключение
После установки первое, что бросается в глаза - это то, что Ubuntu не хочет выключаться. :) По команде halt запускается процесс остановки системы, останавливаются работающие службы, экран гаснет, но компьютер не выключается.
Чтобы исправить это, открываем /etc/init.d/halt и добавляем строку "modprobe -r snd-hda-intel" в тело функции do_stop, как показано ниже:
.... do_stop () { modprobe -r snd-hda-intel
if [ "$INIT_HALT" = "" ] ....
Звук
Добавьте в файл /etc/modprobe.d/snd-hda-intel (если файл не существует, то создайте его) строку
options snd-hda-intel model=3stack-dig
Поддержка горячих клавиш Fn+F[1-9]
Устанавливаем исходные файлы и компилируем из них модуль:
Если в будущем вы обновите ядро, то вам придется выполнить команду
sudo m-a a-i eeepc-acpi
которая соберет модуль заново для нового ядра.
У меня заработали не все клавиши. Кнопка засыпания и кнопки увеличения/уменьшения яркости дисплея работают отлично. Про настройку кнопки включения/выключения Wi-Fi я расскажу ниже. Кнопки выключения/уменьшения/увеличения громкости звука не заработали, когда я пытался настроить их по тем HowTo, которые мне попались. Копать глубже в этом направлении я не стал, т. к. лично мне на Eee PC звук не нужен (я его вообще выключил в BIOS'е). Поэтому решение данной проблемы я оставляю вам. :) Если кто напишет в комментариях, как их настроить - буду благодарен, может быть, потом пригодится.
Динамическое изменение частоты процессора
Сразу скажу, что, читая обсуждения на форумах по поводу уменьшения частоты процессора в целях экономии энергии, я часто встречал мнения людей, утверждающих, что сэкономить много времени автономной работы не удастся - максимум 10-15 минут. Сам я никаких тестов не делал, но уменьшение частоты у себя все-таки настроил - может быть хотя бы по-меньше греться будет, да и эти 15 минут тоже не лишние...
Также стоит отметить, что хотя производитель и заявляет, что частота процессора составляет 900 Мгц, на самом деле он работает на частоте 630 Мгц. Судя по отзывам, даже если вы поднимите частоту до 900 Мгц, то прироста производительности вы не получите - для этого необходимо разгонять шину, чем я не стал заниматься - для меня время автономной работы имеет гораздо большее значение.
Итак...
Устанавливаем необходимый нам пакет, позволяющий менять частоту процессора на лету:
sudo apt-get install cpufrequtils
и добавляем в /etc/rc.local следующие строки:
# Включаем динамическое изменение частоты процессора modprobe p4-clockmod modprobe cpufreq-ondemand # Включаем плавное изменение частоты процессора в зависимости # от нагрузки в диапазоне от 112 Мгц до 675 Мгц. Новое значение # частоты будет вычисляться каждые 500 мсек. echo 112500 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq echo 675000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq powernowd -m 1 -p 500
Если в процессе работы скорость реакции приложений вас не будет устраивать, то можно повысить минимальную частоту процессора (список доступных частот можно посмотреть в /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies) или уменьшить значение опции -p утилиты powernowd.
Wi-Fi
Компилируем и устанавливаем необходимый модуль:
sudo apt-get install build-essential wget 'http://snapshots.madwifi.org/special/madwifi-nr-r3366+ar5007.tar.gz' tar zxvf madwifi-nr-r3366+ar5007.tar.gz cd madwifi-nr-r3366+ar5007 make clean make sudo make install sudo reboot
Если в будущем вы будете обновлять ядро, то необходимо будет заново скомпилировать и установить модуль.
Создаем файл /etc/acpi/actions/wireless-toggle.sh со следующими строками:
#!/bin/sh
# main wifi toggle script (loads/unloads modules)
. /usr/share/acpi-support/key-constants
# The sequence here *may* be important. # (It seems to fail intermittently if you deviate.) unload_modules() { rmmod wlan_scan_sta rmmod wlan_tkip rmmod wlan_wep rmmod wlan_ccmp rmmod wlan_acl rmmod ath_pci sleep 1 rmmod ath_rate_atheros rmmod ath_hal rmmod wlan rmmod ath_dfs }
# At least this one's straightforward. load_modules() { modprobe ath_pci }
wifi_on() { # Force PCI Express Hotplug to reinit rmmod pciehp sleep 1 # pciehp_force may be unnecessary; Xandros did it. modprobe pciehp pciehp_force=1 sleep 1 # Switch on the hardware echo 1 >/proc/acpi/asus/wlan sleep 1 load_modules }
case $1 in on) acpi_fakekey $KEY_PROG1 wifi_on ;; off) acpi_fakekey $KEY_PROG2 wifi_off ;; toggle) STAT=`cat /proc/acpi/asus/wlan` if [ "$STAT" = "1" ]; then wifi_off; else wifi_on; fi ;; esac
Также создаем файл /etc/acpi/eeepc-hotkeys.sh:
#!/bin/sh
code=$3
case $code in # Fn+F2 - enable/disable wifi 00000010) /etc/acpi/actions/wireless-toggle.sh on ;; 00000011) /etc/acpi/actions/wireless-toggle.sh off ;; esac
Все, теперь Wi-Fi и кнопка его включения/выключения должны работать. В принципе, для подключения к Wi-Fi точке вы можете использовать графические утилиты, но лично мне гораздо удобнее набрать пару слов в консоли, чем щелкать по множеству кнопок. Поэтому:
# Устанавливаем пакет для работы с WPA шифрованием sudo apt-get install wpasupplicant
Создаем файл /etc/wpa_supplicant/wpa_supplicant.conf следующего содержания:
Все, теперь для подключения к точке доступа необходимо выполнить команду
sudo ifup ath0
Если вы используете Wi-Fi точку с открытым доступом, то устанавливать wpasupplicant и создавать файл /etc/wpa_supplicant/wpa_supplicant.conf не нужно - достаточно только добавить в /etc/network/interfaces строки
Разорвать уже установленное соединение можно командой
sudo ifdown ath0
В принципе, можно прописать команды ifup/ifdown в скрипт /etc/acpi/actions/wireless-toggle.sh, чтобы при нажатии на кнопку включения/выключения Wi-Fi автоматически происходило подключение к Wi-Fi точке.
Экономим электроэнергию
Чтобы посмотреть, какие приложения/сервисы заставляют процессор чаще всего переходить из спящего состояния в рабочее, а следовательно, увеличивать расход электроэнергии, воспользуйтесь утилитой powertop.
У меня самыми активными оказались Wi-Fi, USB и Ethernet. Поэтому я добавил в /etc/rc.local следующие строки, которые отключают на этапе загрузки все эти интерфейсы:
# Отключаем Ethernet /sbin/ifconfig eth0 down
# Отключаем USB rmmod ehci-hcd rmmod uhci-hcd
# Отключаем Wi-Fi /sbin/ifconfig ath0 down
Включаю я их только тогда, когда они мне нужны. Включается они следующими командами:
# Ethernet ifup eth0
# USB sudo modprobe ehci-hcd sudo modprobe uhci-hcd
# Wi-Fi ifup ath0
Если нет желания набирать каждый раз все эти команды в консоли, то можно поставить программу Eee PC sm-Control, написанную товарищем Serge_RUS, которая позволяет производить те же действия через графический интерфейс.
SD/SDHC карты
Пока что мне вполне хватает встроенного SSD диска, и покупать дополнительную флэш память я к своему Eee PC не думаю. Но, читая различные HowTo и форумы, я заметил, что у многих возникают проблемы с некоторыми картами памяти. Т. к. у меня пока такой проблемы нет, я не особо интересовался, какие карты лучше покупать и как бороться с проблемами, если они вдруг возникнут. В конце статьи я привел пару ссылок на эту тему, если она для вас актуальна.
Увеличение срока службы SSD
Чтобы уменьшить количество операций записи на SSD, добавьте в /etc/fstab следующие строки, чтобы все временные файлы и логи писались в оперативную память:
Внимание! Если вы используете программы, которые создают временные файлы очень большого размера в /tmp, то первую строку добавлять не стоит во избежании нехватки оперативной памяти при создании таких файлов.
В параметрах монтирования раздела SSD диска укажите опции noatime и nodiratime. Т. е. если раздел у вас монтируется строкой
Включение этих опций запрещает обновление времени последнего доступа каждый раз, когда вы обращаетесь к какому-либо файлу или папке на этом разделе.
Если вы не пользуетесь командой locate, то можете удалить (или просто поставить exit 0 после строки #!/bin/sh) файл /etc/cron.daily/mlocate. Этот скрипт запускается каждый день и обновляет базу locate, содержащую пути всех файлов в системе (очень удобно использовать locate, если необходимо быстро найти какой-нибудь файл по имени - каманда find работает значительно медленнее, т. к. использует не готовую базу данных, а каждый раз просматривает все дерево каталогов). Если же вы пользуетесь locate'ом, то можно переместить /etc/cron.daily/mlocate в /etc/cron.weekly/, чтобы база обновлялясь раз в неделю.
Также, чтобы уменьшить количество операций записи на SSD, отключаем все логи (имхо, на карманном ноутбуке они не нужны):
apt-get remove klogd sysklogd logrotate
Экономим место на SSD
Установите пакет localepurge. Он запросит у вас список локалей, которые вам нужны, и удалит все остальные. localepurge также будет автоматически запускаться при каждом запуске apt.
Запустите Synaptic, зайдите в меню Settings->Preferences, перейдите на вкладку Columns and Fonts и поставьте флажок напротив поля Installed Size. Теперь в списке пакетов появится еще одна колонка - Size. Если пакет установлен, то в этой колонке будет отображен размер, который занимают файлы данного пакета. Отсортируйте список пакетов по этой колонке и удаляйте все ненужные пакеты, которые занимают много места.
Компактная тема
Чтобы увеличить количество полезной информации, отображаемой на относительно небольшом экране Eee PC, рекомендую вам установить компактную тему для GTK - Human Compact.
Мой опыт настройки USB-адаптера D-Link DWL-G122 в Ubuntu 7.10 Linux, но думаю что методика применима для большинства дистрибутивов (аналогичным методом точно можно настроить в Ubuntu 7.04)
Предисловие
Будем настраивать соединение Wi-Fi USB-адаптера D-Link DWL-G122 rev.C с точкой доступа в Ubuntu 7.10 Linux
Будем пользоваться windows-драйверами через ndiswrapper. Соответственно предполагается что ndiswrapper уже установлен в системе. Для Ubuntu 7.10 это пакеты ndiswrapper-common и ndiswrapper-utils-1.9 Естественно понадобятся и windows-драйвера.
В рассматриваемом адаптере используется чипсет производства Ralink. Проблема в том, что Linux считает, что он умеет работать с данным чипсетом. Соответственно при загрузке ОС мы с большой долей вероятности в выводе команды 'ifconfig -a' увидим сетевой интерефейс 'rausb0'
Все операции должны выполняться с правами пользователя root
Естественно, я снимаю с себя всякую ответственность за результат Ваших действий в системе :-(
Тактика и стратегия
1. Найти ...
Находим модули ядра, которые нам мешают.
lsmod | grep rt7
lsmod | grep rt2
Вывод данных команд будет зависеть от версии дистрибутива Linux. В моем случае это были rt73usb, rt2x00usb и rt2x00lib
2. ... и обезвредить
modprobe -l
показывает где находятся модули ядра. В моем случае все 3 модуля (rt73usb, rt2x00usb и rt2x00lib) находились в каталоге /lib/modules/2.6.22-14-generic/ubuntu/wireless/rt2x00/
Чтобы данные модули больше не подгружались, их нужно либо удалить, либо переименовать. Я выбрал второе.
cd /lib/modules/2.6.22-14-generic/ubuntu/wireless/rt2x00/
mv rt2x00usb.ko rt2x00usb.ko.old
mv rt2x00lib.ko rt2x00lib.ko.old
mv rt73usb.ko rt73usb.ko.old
Все. После перезагрузки системы эти модули не будут загружены.
3. "Заграница" нам поможет
Сначала проинсталлируем драйвера адаптера. Для этого перейдем в каталог где они лежат и выполним команду:
ndiswrapper -i Dr71WU.inf
где Dr71WU.inf inf-файл драйвера нашего адаптера. Данная команда копирует нужные ей файлы в каталог /etc/ndiswrapper. Оттуда модуль ядра ndiswrapper и будет брать их в дальнейшем.
Теперь скажем ядру что оно должно использовать модуль ndiswrapper, для этого:
modprobe -i ndiswrapper
depmod -a
Теперь проверим что в файле /etc/modprobe.d/aliases отсутствует запись для rausb0
Далее создаем интерфейс wlan0
vi /etc/modprobe.d/ndiswrapper
с такой записью:
alias wlan0 ndiswrapper
Теперь можно перезагрузить систему и если все было правильно, то вывод команды 'ifconfig -a' покажет наличие в системе интерфейса wlan0.
Если этого не произошло, попробуйте еще раз сделать
modprobe -i ndiswrapper
depmod -a
это должно помочь.
4. "Полная тайна вкладов... то есть организации"
Дальше рассказ о том как настроить WPA-шифрование. Для этого в системе должен быть wpa_supplicant (пакет wpasupplicant в Ubuntu 7.10)
Предположения относительно точки доступа:
- SSID = testnet
- сеть "скрытая", т.е. не анонсирует своего имени
- адрес сети 00:11:22:33:44:55
- используются протоколы WPA-PSK, WPA2-PSK, TKIP, AES
- пароль PSK = 1234567890axcvf
- на точке доступа настроена динамическая раздача адресов
htop - просмотр и удаление процессов cairo-clock - прикольные гномовские часы darkstat - статистика по трафику интерфейса ( после установки в конфиге подправить первую строку на yes iptraf просмотр трафика с консоли
После установки у нас появилась директория /var/www (здесь расположен сайт по умолчанию. Все документы в этой директории доступны через броузер по адресу http://localhost/ или IP адресу сервера.
смотрим броузером http://localhost/info.php и видим результат работы PHP. если предлагается загрузить файл проверяем файлы /etc/apache2/apache2.conf или /etc/apache2/mods-enabled/php5.conf на наличие строки
для того чтобы модуль заработал правим /etc/apache2/apache2.conf отключаем canonical name ,если нужно настраиваем логи по каждому виртуальному хосту, и указываем директорию виртуальных хостов
# берем имя сервера из Host: header UseCanonicalName Off # директории с виртуальными хостами VirtualDocumentRoot /var/www/vhosts/%0 VirtualScriptAlias /var/www/vhosts/%0/cgi-bin