пятница, 4 июля 2008 г.

Развертывание типового (эталонного) образа Ubuntu Linux

В конторе периодически закупаются новые компьютеры и сотрудникам IT-отдела приходится отрываться от более интересных дел и заниматься рутиной в виде установки и настройки операционной системы. Установка Ubuntu традиционным способом с помощью компакт-диска, установка драйверов, обновлений и дополнительных программ из интернета, настройка всего занимают слишком много времени. Одним из способов оптимизации процесса является создание типового образа операционной системы и затем быстрое его развертывание на новых компьютерах.

Создание эталонного образа.

Прежде всего необходимо создать эталонный образ Ubuntu. Для этого нам потребуется эмулятор виртуальных машин, например VirtualBox или VMWare. Далее:

  1. Устанавливаем Ubuntu в виртуальной машине.
  2. Настраиваем установленную операционную систему. Например так:

    • включить основные и дополнительные репозитарии и произвести обновление пакетов;
    • установить полную локализацию системы;
    • установить мультимедийные кодеки;
    • установить пакеты с драйверами для видео карт nvidia и ati;
    • установить flash плугин для браузера;
    • установить плугин для открытия документов MSOffice 2007 (*.docx и др.) в OpenOffice;
    • установить необходимые программы и утилиты: ssh сервер, vnc сервер, unrar, wine, virtualbox и много чего ещё...;
    • указать сетевые настройки, например адреса dns и ntp серверов, маршруты;
    • отключить загрузку не нужных демонов;
    • отключить запуск не нужных заданий по расписанию cron;
    • любые другие программы и/или настройки.
  3. Настройка профиля пользователя по умолчанию. Для этого создаем пользователя, например testuser, логинимся под ним и производим настройку. Например:

    • отключить эффекты рабочего стола;
    • разрешить удаленный доступ к рабочему столу (vnc) и задать пароль для него;
    • прописать настройки соединения в браузере: проски-сервер и прочее;
    • в редакторе меню отключить запуск некоторых программ, например подменю "Игры";
    • в настройках сеанса, отключить запуск не нужных программ;
    • любые другие настройки.

    После завершения настройки профиля, копируем содержимое /home/testuser в /etc/skel. Делаем владельцом пользователя root:

    sudo chown -R root:root /etc/skel

    Просматриваем директорию /etc/skel, удаляем все лишнее, заменяем в файлах абсолюный путь /home/testuser на относительный ~/.

    Теперь при создании нового пользователя в его домашнюю директорию будет копироваться содержимое /etc/skel.

  4. Для создания образа будем использовать 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 ~ # mkdir /mnt/sda1
    sysresccd ~ # mount /dev/sda1 /mnt/sda1

    Создаем образ обычной утилитой tar:

    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, устанавливаем в привод болванку с образом. Далее:

  1. Разметка диска. Например: все место под корневой раздел, файловая система reiserfs, под swap 2ГБ:

    sysresccd ~ # сfdisk /dev/sda
    sysresccd ~ # mkfs.reiserfs /dev/sda1
    sysresccd ~ # mkswap /dev/sda2
  2. Монтируем диски и разворачиваем эталон:

    sysresccd ~ # mkdir /mnt/sda1
    sysresccd ~ # mount /dev/sda1 /mnt/sda1
    ...
    sysresccd ~ # mkdir /mnt/etalon
    sysresccd ~ # mount /dev/cdrom /mnt/etalon
    ...
    sysresccd ~ # tar -С /mnt/sda1 xvzf /mnt/etalon/etalon-ubuntu8.04-20080704.tar.gz
  3. Правим файлы /mnt/sda1/etc/fstab и /mnt/sda1/boot/grub/menu.lst чтобы UUID метки дисков соответствовали новым томам. UUID метки можно узнать с помощью команды:

    sysresccd ~ # blkid
  4. Устанавливаем загрузчик grub в mbr область нового диска:

    sysresccd ~ # grub-install --root-directory=/mnt/sda1 /dev/sda

Если все прошло успешно, то мы уже можем загрузить с операционную систему с жесткого диска. Дальше:

  1. Сконфигурируем видео драйвер (в эталоне должен быть установлен универсальный драйвер vesa):

    administrator@etalon:~# sudo dpkg-reconfigure -phigh xserver-xorg

    После перезапуска иксов (Ctrl-Alt-Backspace) должен подняться нормальный видео драйвер.

  2. Сменим имя хоста и сетевые настройки:

    administrator@etalon:~# sudo gedit /etc/hostname
    administrator@etalon:~# sudo gedit /etc/network/interfaces

Компьютер готов к работе. После установки на рабочее место пользователя ещё потребуется настроить принтера, но это уже отдельная история.

После приобретения некоторого опыта установка операционной системы на новый компьютер занимает около 20 минут. Конечно предварительно должно быть потрачено время на создание эталонного образа и периодическое его обновление, но при больших количествах новых компьютеров оно окупается. Данный способ успешно применяется уже 1,5 года.

вторник, 3 июня 2008 г.

Установка 1С Предприятие 7.7 на WINE@Etersoft

Установка 1С Предприятие 7.7 (сетевая версия) на Ubuntu Linux Desktop 8.04 LTS с использованием коммерческой версии WINE@Etersoft SQL 1.0.8.
По большому счету, используемый дистрибутив Linux не имеет значения, но желательно чтобы он был в списке поддерживаемых. Предполагается что установка не эмулятора wine и драйвера ключей защиты Aladdin HASP 4 уже произведена:

admin@zam:~$ wine --version
WINE@Etersoft 1.0 SQL (1.0.8), registration number is XXXX-XXXX.
Legality check is available on the page http://sales.etersoft.ru/product/.


admin@zam:~$ sudo /etc/init.d/haspd status
[sudo] password for admin: 
Hardware protection keys support bundle. Etersoft (c) 2007
: haspd.init,v 1.102 2007/11/15 17:39:03 lav Exp $
Aladdin HASP 4/HL driver status:
-e  kernel module aksparlnx is loaded
-e  aksusbd is running
-e  winehasp is running
-e  hasplm is running
Daemon version: 1.8.1 - key API (USB) version: 3.85, key API (parallel driver) version: 3.86
Smartkey 3 USB/LPT driver status:
-e  skeyd is running
skeymon v11.5 - Smartkey server monitor
Copyright (C) 2004 Eutron 

====================================================
             Smartkey server statistics
====================================================
Opens       keys: 0       servers: 1    
====================================================
Messages    received: 0     sent: 0     error: 0    
====================================================
Clients     logged: 0     removed: 0    
====================================================
SafeNet Sentinel status:
-e  usbdaemon is running
-e  SntlKeysSrvrlnx is running

Обязательно копируем дистибутив 1С в директорию диска C: — ~/wine_c. В противном случае можем нарваться на сообщение об ошибке:

Устанавливаем 1C Предприятие:

admin@zam:~$ wine ~/wine_c/1s/P770025/entrm/DISK1/setup.exe

Дальше установка идет обычным способом, как в Windows, просто серия скриншотов:

Устанавливаем конфигурацию, например такую:

admin@zam:~$ wine ~/wine_c/1s/conf/482/R770482/DISK1/setup.exe

Ещё скриншоты:

Далее запускаем из стартового меню «Приложения >> Wine >> Программы >> 1С Предприятие 7.7 >> 1С Предприятие» Первый запуск делаем в монопольном режиме и отвечаем на все задаваемые вопросы. После этого можно запускать 1С в обычном пользовательском режиме.

admin@zam:~$ wine "C:\\Program Files\\1Cv77\\BIN\\1cv7"

пятница, 23 мая 2008 г.

Установка PostgreSQL-1С для Slackware 12

Замечательная компания «Этерсофт» выпускает некий программный продукт SELTA@Etersoft. Для работы этого продукта требуется патченная версия СУБД PostgreSQL. Для скачивания доступны исходные коды и бинарные сборки для большого количества операционных систем.

Теперь хватит рекламы, приступаю к описанию проблемы. Среди поддерживаемых операционных систем заявлена Slackware 12. Однако, предоставленные пакеты не работают «искаробки» без доработки напильником. Справедливости ради надо заметить, что компания честно предупреждает о создании пакетов в неком производном от Slackware дистрибутиве MOPSLinux. Все это написано главным образом для себя, т.к. установку пришлось делать уже во второй раз, и не факт, что последний.

Шаг 1. Убеждаемся что установлен пакет sysvinit-functions:

root@darkstar:~# ls /var/log/packages/sysvinit-functions*
/var/log/packages/sysvinit-functions-8.53-i486-2

Если нет, то устанавливаем его.

Шаг 2. Устанавливаем выкачанные пакеты PostreSQL 1C:
postgresql8.2.1C-8.2.4
postgresql8.2.1C-server-8.2.4
postgresql8.2.1C-libs-8.2.4
postgresql8.2.1C-contrib-8.2.4

Шаг 3. Почему-то при установке не создается необходимый пользователь и группа. Делаем это вручную:

root@darkstar:~# groupadd postgres
root@darkstar:~# useradd -g postgres postgres
root@darkstar:~# chown -R postgres:postgres /var/lib/pgsql

Шаг 4. Стартовый скрипт /etc/rc.d/init.d/postresql категорически не способен работать в Slackware. Накладываем патч:

84c84
< . /etc/sysconfig/network
---
> #. /etc/sysconfig/network
189c189
<       $SU -s /bin/sh -l postgres -c "$PGENGINE/postmaster -p '$PGPORT' -D '$PGDATA' ${PGOPTS} &" >> "$PGLOG" 2>&1 < /dev/null
---
>       $SU postgres -c "$PGENGINE/postmaster -p \"$PGPORT\" -D \"$PGDATA\" ${PGOPTS} &" >> "$PGLOG" 2>&1 < /dev/null
207c207
<       $SU -s /bin/sh -l postgres -s /bin/sh -c "$PGENGINE/pg_ctl stop -D '$PGDATA' -s -m fast" > /dev/null 2>&1 < /dev/null
---
>       $SU postgres -c "$PGENGINE/pg_ctl stop -D \"$PGDATA\" -s -m fast" > /dev/null 2>&1 < /dev/null
243c243
<                       $SU -l postgres -s /bin/sh -c "LANG=ru_RU.UTF-8 $PGENGINE/initdb --pgdata='$PGDATA' --auth='ident sameuser'" >> "$PGLOG" 2>&1 < /dev/null
---
>                       LANG=ru_RU.UTF-8 $SU postgres -c "$PGENGINE/initdb --pgdata=\"$PGDATA\" --auth=\"ident sameuser\"" >> "$PGLOG" 2>&1 < /dev/null
263c263
<     $SU -l postgres -s /bin/sh -c "$PGENGINE/pg_ctl reload -D '$PGDATA' -s" > /dev/null 2>&1 < /dev/null
---
>     $SU postgres -c "$PGENGINE/pg_ctl reload -D \"$PGDATA\" -s" > /dev/null 2>&1 < /dev/null

Шаг 5. Шаманства кончились. Далее инициализируем базу данных:

root@darkstar:~# /etc/rc.d/init.d/postgresql initdb
Initializing database:                                     [  OK  ]

Шаг 6. Запуск сервера PostreSQL:

root@darkstar:~# /etc/rc.d/init.d/postgresql start 
Starting postgresql service:                               [  OK  ]

Шаг 7. Прописываем запуск PostreSQL при загрузке компьютера:

root@darkstar:~# cd /etc/rc.d/rc3.d
root@darkstar:/etc/rc.d/rc3.d# ln -s ../init.d/postgresql S40postgresql
root@darkstar:/etc/rc.d/rc3.d# ln -s ../init.d/postgresql K60postgresql

Все, установка PostreSQL завершена. В завершение необходимо выполнить действия по его настройке.

понедельник, 28 апреля 2008 г.

Google AJAX Language API

Великий Google порадовал разработчиков новым online сервисом «Google AJAX Language API». Функционал нового API — опреление языка текста и получение его перевода. На текущий момент поддерживается 13 языков, среди которых есть и русский. Переводы выполняются только на английский или только с английского языка, т.е. нельзя например напрямую перевести с русского на итальянский.

Чем это может быть полезно web-разработчику? Один из вариантов применения — генерация url-ов для динамического контента, по заголовку новости, теме в форуме или поста в блоге. А с кирилицей в урлах пока дела обстоят неважно. Например, урл новостей на ЛОРе никуда не годится в эпоху Web 2.0 :-)
http://www.linux.org.ru/view-message.jsp?msgid=2686861
Куда симпатичнее смотрелось бы:
http://www.linux.org.ru/news/ubuntu_8.04_released
или
http://www.linux.org.ru/news/2008/04/23/ubuntu_8.04_released

Сам Google позиционирует свой сервис для использования совместно с javascript. Однако, на практике, ничто не мешает применять любой другой язык программирования. Вот небольшой пример на perl, который позволяет получать онлайн перевод с русского на английский в консоли:

#!/usr/bin/perl -w
use strict;

use URI::Escape;
use LWP::UserAgent;
use JSON;

my $text       = $ARGV[0];
my $escaped    = uri_escape( $text );
my $user_agent = LWP::UserAgent->new;
$user_agent->env_proxy;
my $response   = $user_agent->get(
    "http://ajax.googleapis.com/ajax/services/language/translate" .
    "?v=1.0&q=$escaped&langpair=ru%7Cen"
)->content;
my $translated = jsonToObj($response)->{responseData}->{translatedText};

print $translated, "\n";


Пример использования:

$ ./ggl_trnslt.pl "Возьми моё сердце"
Take my heart

Если слово не найдено в словаре, то производится его транслитерация, что обычно лучше чем ничего:

./ggl_trnslt.pl паровоз
parovoz

Хотя и непонятно, почему Гугль не знает про паровозы... Остается надеяться что со временем качество перевода возрастет.

Русский текст должен быть в кодировке utf8. Пример упрощен, в частности не делает никаких проверок на ошибки, но зато хорошо демонстрирует принцип использования.

пятница, 18 апреля 2008 г.

Стандартные ядра в Slackware 12

Какие версии ядра есть в Slackware 12 и как ими пользоваться.
Данная статья предворяет будущий рассказ о сборке ядра в slackware пакет. Эта информация специфична для Slackware 12, в предыдущих версиях системы все было не так.

В дистрибутив Slackware 12 включены 4 сборки ядра 2.6.21.5. Вот они:

kernel-huge-smp-2.6.21.5_smp-i686-2.tgz
kernel-huge-2.6.21.5-i486-2.tgz
kernel-generic-smp-2.6.21.5_smp-i686-2.tgz
kernel-generic-2.6.21.5-i486-2.tgz

Как видно из названий пакетов, 4 сборки ядра получены путем комбинации признаков:
huge или generic
smp или no_smp

SMP версия ядра

Разберемся сначала с тем, что попроще. SMP (Symmetric Multiprocessing) — это поддержка многопроцессорных систем и многоядерных процессоров. Если у вас в компьютере есть несколько процессоров или один процессор с двумя (или более) ядрами, например Intel Core2Duo, то чтобы получить максимальную производительность вы должны выбрать smp ядро. Если у вас один одноядерный процессор, например Intel Celeron, то чтобы ядро занимало меньше памяти и не обрабатывало неподдерживаемые конфигурации оборудования следует выбрать не smp ядро. Кроме того, для очень старых процессоров — Pentium Pro и ниже, также необходимо выбирать не smp ядро, т.к. smp версия собрана с использованием архитектуры i686. Убедится что smp ядро работает с вашим процессором можно с помощью команды:

cat /proc/cpuinfo

Вы должны увидеть информацию о нескольких процессорах, а не об одном.

Huge/generic версия ядра

Теперь рассмотрим признаки huge и generic.

Huge (огромное) — ядро, содержащее вкомпиленные модули для большинства дисковых (SCSI, RAID) контроллеров и файловых систем. При использовании этого ядра у вас в принципе не возникает проблем с загрузкой системы, даже с экзотического оборудования или файловых систем, типа xfs или jfs. Однако, это ядро занимает больше оперативной памяти и работает медленнее. После установки системы всегда по-умолчанию запускается huge ядро.

Generic (общее) — ядро, в котором драйвера дисковых контроллеров и файловых систем собраны в виде внешних загружаемых модулей. Для загрузки такого ядра нужен initrd образ, содержащий необходимые драйвера. Эта версия ядра требует дополнительных телодвижений при настройке, но занимает меньше памяти и работает быстрее.

Переключение на другое ядро

Итак, исходя из изложенной информации вы уже должны знать какое из стандартных ядер вам подходит больше всего. Вопрос в том, как переключится на другое ядро. Ответ — настроить загрузчик lilo, естественно. Для huge ядер это делается очень просто, в файле /etc/lilo.conf должны быть такие строки:

#huge-smp:
image = /boot/vmlinuz-huge-smp-2.6.21.5-smp
  root  = /dev/xxxN
  label = lnx-huge-smp
  read-only

#huge-nosmp
image = /boot/vmlinuz-huge-2.6.21.5
  root  = /dev/xxxN
  label = lnx-huge
  read-only

Напомню пару правил при работе с загрузчиком lilo.

  1. После изменения файла /etc/lilo.conf всегда запускайте утилиту lilo, чтобы изменения вступили в силу.
  2. Всегда оставляйте один из пуктов меню с гарантированно рабочей конфигурацией на случай, если что-то пойдет не так.

Для generic ядер надо создавать initrd образ. Для этого используется утилита mkinitrd. Например, мне надо создать initrd образ для ядра generic-smp, корневая файловая система на ext3. Тогда мне необходимо ввести команду:

mkinitrd -с -k 2.6.21.5-smp -m ext3 -o /boot/initrd-generic-smp-2.6.21.5.gz

Ещё пример — initrd образ для ядра generic-nosmp и корневая файловая система reiserfs:

mkinitrd -с -k 2.6.21.5 -m reiserfs -o /boot/initrd-generic-2.6.21.5.gz

Теперь как это прописать в /etc/lilo.conf:

#generic-smp:
image = /boot/vmlinuz-generic-smp-2.6.21.5-smp
  initrd = /boot/initrd-generic-smp-2.6.21.5.gz
  root   = /dev/xxxN
  label  = lnx-gen-smp
  read-only

#generic-nosmp
image = /boot/vmlinuz-generic-2.6.21.5
  initrd = /boot/initrd-generic-2.6.21.5.gz
  root   = /dev/xxxN
  label  = lnx-gen
  read-only

В заключении скажу, что переход на generic ядро всегда оправдан. В моём тестовом случае:

  1. Освободилось 5Мб оперативной памяти. Вычислялось как разница между показаниями
    grep MemTotal /proc/meminfo
    для huge и generic ядра.

  2. Количество системных процессов ядра, те, чьи имена пишутся в квадратных скобочках, уменьшилось на 11 штук:
    ps axo cmd | grep \\[

вторник, 26 февраля 2008 г.

Кешируюший прокси deb пакетов apt-cacher на slackware

Моими стараниями количество desktop-ов в организации, работающих под Ubuntu приближается к 10 шт. В дальнейшем их станет больше. Возникает проблема установки дополнительных программ и обновления существующих. Качать пакеты индивидуально для каждого компьютера — долго и не экономит интернет-трафик. Решение заключается в установке одного из кеширующих прокси серверов для deb пакетов. Например apt-cacher, преимущество которого в том что не надо изменять урлы репозитариев, а только настройки прокси-сервера для пакетной системы apt. Описывать установку и настройку apt-cacher на debian или любой debian-based операционной системе, в том числе на ubuntu, я не буду. Во-первых это элементарно, во-вторых уже не раз описано, например здесь. К тому же у меня нет серверов на ubuntu, зато есть сервера на slackware. Вот и займемся установкой apt-cacher на slackware 12.

Сначала посмотрим на зависимости пакета:

maxim@ubuntu:~$ apt-cache depends apt-cacher
apt-cacher
  Зависит: perl
  Зависит: bzip2
  Зависит: libwww-perl
  Предлагает: libdbd-sqlite3-perl

Радует что apt-cacher написан на perl. Нам понадобится perl библиотека libwww-perl. Установим её на slackware с помошью утилиты cpan2tgz. Можно почитать подробнее про использование cpan2tgz.

root@darkstar:~# cpan2tgz LWP

С зависимостями разобрались, теперь на ubuntu скачиваем deb пакет apt-cacher:

maxim@ubuntu:~$ aptitude download apt-cacher

Получили файл apt-cacher_1.5.3_all.deb. Далее устанавливаем программу, если у вас её ещё нет, для преобразования пакетов в разные форматы — alien:

maxim@ubuntu:~$ sudo aptitude install alien

Преобразуем deb пакет в tgz пакет:

maxim@ubuntu:~$ sudo alien --to-tgz -k apt-cacher_1.5.3_all.deb

Получили файл apt-cacher-1.5.3.tgz. Изучим его содержимое:

maxim@ubuntu:~$ tar -tzf apt-cacher-1.5.3.tgz 
./
./usr/
./usr/sbin/
./usr/sbin/apt-cacher
./usr/share/
./usr/share/man/
./usr/share/man/man1/
./usr/share/man/man1/apt-cacher.1.gz
./usr/share/apt-cacher/
./usr/share/apt-cacher/apt-cacher-precache.pl
./usr/share/apt-cacher/apt-cacher.pl
./usr/share/apt-cacher/apt-proxy-to-apt-cacher
./usr/share/apt-cacher/apt-cacher
./usr/share/apt-cacher/apt-cacher-report.pl
./usr/share/apt-cacher/apt-cacher-lib.pl
./usr/share/apt-cacher/remove.pl
./usr/share/apt-cacher/apt-cacher-format-transition.pl
./usr/share/apt-cacher/apt-cacher-import.pl
./usr/share/apt-cacher/upgrade.pl
./usr/share/apt-cacher/apt-cacher-lib-cs.pl
./usr/share/apt-cacher/install.pl
./usr/share/apt-cacher/apt-cacher-cleanup.pl
./usr/share/doc/
./usr/share/doc/apt-cacher/
./usr/share/doc/apt-cacher/copyright
./usr/share/doc/apt-cacher/NEWS.Debian.gz
./usr/share/doc/apt-cacher/changelog.gz
./usr/share/doc/apt-cacher/README.Debian.gz
./etc/
./etc/init.d/
./etc/init.d/apt-cacher
./etc/default/
./etc/default/apt-cacher
./etc/apt-cacher/
./etc/apt-cacher/checksumming.conf
./etc/apt-cacher/apt-cacher.conf
./etc/apt-cacher/apache.conf
./etc/logrotate.d/
./etc/logrotate.d/apt-cacher
./etc/cron.daily/
./etc/cron.daily/apt-cacher

Что же тут не соотвествует стандартам slackware? Многое:

  1. Страницы руководств man должны храниться в /usr/man, а не в /usr/share/man. К счастью в slackware уже есть символическая ссылка /usr/share/man на /usr/man.
  2. Документация програм должна хранится в /usr/doc, а не в /usr/share/doc. Опять же аналогичная спасительная символическая ссылка уже есть.
  3. Стартовые скрипты sysvinit должны храниться в /etc/rc.d/init.d, а не в /etc/init.d. А вот такого симлинка нет, не беда, создаем его сами:

    root@darkstar:~# ln -s /etc/rc.d/init.d /etc/init.d

Остальное вроде в порядке. Копируем tgz пакет на slackware сервер и устанавливаем его:

root@darkstar:~# installpkg apt-cacher-1.5.3.tgz

Просматриваем файл /etc/apt-cacher/apt-cacher.conf и видим, что сервер будет запускаться под пользователем и группой www-data. На данный момент в slackware их не существует, исправляем ситуацию:

root@darkstar:~# groupadd www-data
root@darkstar:~# useradd -g www-data www-data

Прописываем в файле /etc/default/apt-cacher значение параметра AUTOSTART=1 и пробуем запустить прокси-сервер apt-cacher:

root@darkstar:~# /etc/rc.d/init.d/apt-cacher start
Starting Apt-Cacher: apt-cacher/etc/rc.d/init.d/apt-cacher: line 26: start-stop-daemon: command not found

Твою мать! В стартовом скрипте используется дебиановская утилита start-stop-daemon, которой нет в slackware. Далее у нас два пути: переписать стартовый скрипт с использованием slackware-way утилит или установить утилиту start-stop-daemon. Системный администратор не программист :-), поэтому ничего переписывать не будем, а будем устанавливать утилиту. Возвращаемся в ubuntu и обнаруживаем, что start-stop-daemon почему-то находится в deb пакете dpkg. Ну да нам все равно, идем по проторенному пути:

maxim@ubuntu:~$ aptitude download dpkg
maxim@ubuntu:~$ sudo alien --to-tgz -k dpkg_1.13.22ubuntu7_i386.deb

Опять копируем полученный пакет на slackware, устанавливаем его и пытаемся снова запустить прокси-сервер apt-cacher:

root@darkstar:~# installpkg dpkg-1.13.22ubuntu7.tgz
root@darkstar:~# /etc/rc.d/init.d/apt-cacher start
Starting Apt-Cacher: apt-cacher/usr/sbin/apt-cacher: No cache_dir directory!

Уже лучше, предыдущей ошибки уже нет, но прокси-сервер все равно не стартует. На этот раз он жалуется на нехватку каких-то директорий. Похоже, что на ubuntu эти директории создаются из инсталяционного скрипта в в deb пакете. Но alien при конвертировании пакета нас честно предупреждает что инсталяционные скрипты не конвертируются. Хорошо. Начинаем внимательнее изучать содержимое deb пакета, для этого него извлекаем управляющие скрипты:

maxim@ubuntu:~$ dpkg -e apt-cacher_1.5.3_all.deb

И обнаруживаем в извлеченном файле DEBIAN/postinst следующие строчки:

echo "Running apt-cacher's install script..."
/usr/share/apt-cacher/install.pl

Понятно, вот чего нам не хватало, запускаем этот скрипт на slackware вручную:

root@darkstar:~# /usr/share/apt-cacher/install.pl
Assuming www-data is the user ID used to run apt-cacher
Doing mkdir(/var/cache/apt-cacher, 0755)
Doing mkdir(/var/log/apt-cacher, 0755)
Doing mkdir(/var/cache/apt-cacher/private, 0755)
Doing mkdir(/var/cache/apt-cacher/import, 0755)
Doing mkdir(/var/cache/apt-cacher/packages, 0755)
Doing mkdir(/var/cache/apt-cacher/headers, 0755)
Doing mkdir(/var/cache/apt-cacher/temp, 0755)

Скрипт отработал успешно и создал необходимые системные директории. В очередной раз пробуем запустить прокси-сервер apt-cacher:

root@darkstar:~# /etc/rc.d/init.d/apt-cacher start
Starting Apt-Cacher: apt-cacher.

Кешируюший прокси-сервер для deb пакетов apt-cacher, после доработки напильником :-), успешно запустился на slackware. Теперь любой deb пакет будет скачиваться только один раз. При повторной установке на другом компьютере пакет будет браться из кеша, что увелит скорость скачивания и съэкономит трафик.

четверг, 14 февраля 2008 г.

Имена пакетов slackware

Как прочитать имя slackware пакета? Как правильно назвать slackware пакет?

Синтаксис имени slackware пакета:

    {program}-{version}-{arch}-{build}{tag}.tgz

Где:

  • {program} — имя программы, как назвал ее автор, строчными буквами.
  • {version} — версия программы.
  • {arch} — архитектура процессора, возможные значения:
    i386
    i486
    i586
    i686
    x86_64
    noarch — для пакетов без бинарных исполняемых файлов
    ppc
    s390
    Все пакеты дистрибутива slackware используют архитектуру i486 или noarch.

  • {build} — номер сборки пакета. Сборщик пакетов тоже человек, а значит может ошибаться. Исправленный пакет выпускается под тем же именем, но с измененным номером сборки.
  • {tag} — уникальный идентификатор создателя пакета, обычно 3-х буквенный. Поле необязательное для автора дистрибутива и обязательное для всех остальных сборщиков. Иногда в конце поля {tag} добавляют номер версии дистрибутива для которого предназначен данный пакет, отделяя его символом подчеркивания.


Пример: ipcad-3.7.3-i486-2nmu_slack11.0.tgz

Это пакет с программой IPCAD (сбор статистики по трафику) версии 3.7.3, собранный и оптимизированный под архитектуру процессора intel 486. Сборщик пакета — некто nmu. Пакет собран для Slackware 11. Версия сборки пакета — 2.



В завершение несколько советов по работе с slackware пакетами.

  • Как узнать, какая версия slackware установлена?

        cat /etc/slackware-version
  • Как получить список установленных пакетов в slackware?

        ls -1 /var/log/packages
  • Как получить список 10-и последних установленных пакетов в slackware?

        ls -t1 /var/log/packages | head
  • Как получить список файлов в файле пакета slackware?

        tar -tzf имя_пакета.tgz
  • Как получить список файлов в установленном пакете slackware?

        cat /var/log/packages/имя_пакета
  • Как определить к какому из пакетов slackware принадлежит данный файл?

        cd /var/log/packages; grep path/to/file *

    Надо указать абсолютный путь к файлу, но без начального слеша, пример:

        cd /var/log/packages; grep bin/chmod *
        coreutils-6.9-i486-1:bin/chmod
  • Как узнать какой пакет нужно установить чтобы появился нужный файл?

    Перестать выпендриваться с командной строкой и воспользоваться поиском на сайте http://packages.slackware.it