Какой рейтинг вас больше интересует?
|
Главная /
Каталог блоговCтраница блогера use Catalyst;/Записи в блоге |
use Catalyst;
Голосов: 1 Адрес блога: http://xeim.blogspot.com/ Добавлен: 2008-02-19 12:50:23 блограйдером Lurk |
|
Установка PostgreSQL-1С для Slackware 12
2008-05-23 02:14:00 (читать в оригинале)Замечательная компания «Этерсофт» выпускает некий программный продукт 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 завершена. В завершение необходимо выполнить действия по его настройке.
Google AJAX Language API
2008-04-28 10:49:00 (читать в оригинале)Великий 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. Пример упрощен, в частности не делает никаких проверок на ошибки, но зато хорошо демонстрирует принцип использования.
Стандартные ядра в Slackware 12
2008-04-18 08:03:00 (читать в оригинале)Какие версии ядра есть в 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.
- После изменения файла /etc/lilo.conf всегда запускайте утилиту lilo, чтобы изменения вступили в силу.
- Всегда оставляйте один из пуктов меню с гарантированно рабочей конфигурацией на случай, если что-то пойдет не так.
Для 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 ядро всегда оправдан. В моём тестовом случае:
Освободилось 5Мб оперативной памяти. Вычислялось как разница между показаниями
grep MemTotal /proc/meminfo
для huge и generic ядра.Количество системных процессов ядра, те, чьи имена пишутся в квадратных скобочках, уменьшилось на 11 штук:
ps axo cmd | grep \\[
Кешируюший прокси deb пакетов apt-cacher на slackware
2008-02-26 02:54:00 (читать в оригинале)Моими стараниями количество 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? Многое:
- Страницы руководств man должны храниться в /usr/man, а не в /usr/share/man. К счастью в slackware уже есть символическая ссылка /usr/share/man на /usr/man.
- Документация програм должна хранится в /usr/doc, а не в /usr/share/doc. Опять же аналогичная спасительная символическая ссылка уже есть.
Стартовые скрипты 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 пакет будет скачиваться только один раз. При повторной установке на другом компьютере пакет будет браться из кеша, что увелит скорость скачивания и съэкономит трафик.
Имена пакетов slackware
2008-02-14 04:41:00 (читать в оригинале)Как прочитать имя 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
Загрузка...
взяты из открытых общедоступных источников и являются собственностью их авторов.