пятница, августа 31, 2007

Пара слов о Xorg

Вот, хочу сообщить тем кто не знает. Современный Xorg (начиная, как минимум, с 7.0) в состоянии сам определить параметры монитора и видеокарты. Настолько в состоянии, что может работать без конфига (xorg.conf) вообще! Правда, он не может сам догадаться, что нам надо вводить с клавиатуры русские буквы итп, такие вещи в конфиге все-такие приходится прописывать.
Это я на самом деле в продолжение темы о LiveCD. Ибо там традиционно вставал вопрос - как написать универсальный xorg.conf ?
Сейчас это практически не проблема. Указываем
Driver "vesa"
Этого вполне достаточно на большинстве видух (ну да, 3Д ускорением и не пахнет, но зачем оно на LiveCD?). Для всех остальных добавляем куда-нибудь в startup-скрипты такой код:
DRIVER=$(egrep -o 'x11=[a-z0-9]+' /proc/cmdline | cut -d'=' -f2)
if [ "$DRIVER" ]
then sed -i -e "s/vesa/$DRIVER/" /etc/X11/xorg.conf
fi
Это позволяет указать нужный драйвер при запуске livecd (в приглашении isolinux вводим, например: "linux x11=sis").
Опции VertRefresh и HorizSync (которые в свое время, помнится, могли стоить испорченной видухи или монитора) не указываем вообще. Xorg их сам спросит у монитора и выставит максимальную рабочую частоту. Аналогично, можно не указывать строчку Modes. Или указать, перечислив возможные разрешения: Modes "1024x768" "800x600" "640x480".

четверг, августа 16, 2007

Сборка из исходников в Debian.

По сабжу надеюсь всем интересующимся известно про "apt-get -b source" и "apt-build". Кому неизвестно - см. документацию ;)
Но оба этих механизма берут исходники из репозитариев debian. Хорошо это или плохо - зависит от ситуации. В том случае, если мы пересобираем пакет с тем, чтобы улучшить оптимизацию или включить какую-то возможность - это хорошо. А в случае, если нам нужна последняя версия программы (вплоть до svn), это плохо - в репозиториях оказываются только более-менее протестированные версии.
Итак, задача - собрать программу из исходников, полученных прямо с оф.сайта (или даже из svn). Скачали, распаковали. По логике, сейчас надо делать ./configure, make, make install. Только обновлять или удалять потом все файлы этой программы - будет целая история. Не говоря уж о том, чтоб быстро и просто перенести скомпиленное на другой комп. Отсюда возникает идея сделать некую обёртку над make install, которая будет сразу собирать deb-пакет и устанавливать его в систему.
Идея эта не нова, такие обертки уже есть. Самой известной является checkinstall. Она отслеживает, куда какие файлы пытается копировать make install, и все их записывает потом в deb-пакет. Я долго пользовался checkinstall, но это как оказалось не универсально и тем более не гибко. Так что я решил изобрести очередной велосипед ;) Правда, этот мой велосипед работает только для программ, которые понимают переменную DESTDIR (она должна указывать make install-у, куда копировать файлы) или другую с тем же смыслом. Но, насколько я понимаю, к этому классу относится большинство программ, использующих autotools. Зато он с точки зрения устанавливаемой программы выглядит "более естественно", и не требует рутовых привелегий вплоть до установки пакета (используется sudo).

Итак, вот обертка над make install (у меня называется /usr/local/bin/debinstall):

#!/bin/bash

# Установить пакет из исходников.
# Управляющие переменные:
# $DSTVAR - имя переменной, используемой make install в качестве префикса;
# по умолчанию - DESTDIR.
# $INSTALL - команда, устанавливающая программу; по умолчанию - make install.

set -e

DDIR=${DSTVAR:-DESTDIR}
INSTALL=${INSTALL:-make install}

IDIR=install_dir

if [ -d $IDIR ]
then mv $IDIR/DEBIAN .DEBIAN
rm -rf $IDIR
mkdir $IDIR
mv .DEBIAN $IDIR/DEBIAN
else mkdir $IDIR
fi
$INSTALL $DDIR=$(pwd)/$IDIR
mkdir -p $IDIR/DEBIAN
if [ -e $IDIR/DEBIAN/control ]
then :
else cp ~/.control.template $IDIR/DEBIAN/control
fi
${EDITOR:-vim} $IDIR/DEBIAN/control
cd $IDIR
echo -n "Enter the name of .deb package: "
read NAME
dpkg-deb -b . ../$NAME
sudo dpkg -i ../$NAME

Ну и тогда уж пусть будет обертка над всем заклинанием "configure; make; make install" (у меня называется /usr/local/bin/debuild):

#!/bin/bash

# Скомпилировать и установить программу из исходников.
# Управляющие переменные:
# $OPTIONS - опции сборки, передаваемые ./configure;
# Если существует файл build-options, дефолтные опции берутся из него.
# $CFLAGS, $CPPFLAGS, etc - как обычно, параметры компилятора
# Также см. описание в скрипте debinstall.

set -e

if [ -e build-options ]
then OPTIONS="$(cat build-options) $OPTIONS"
fi

if [ -x configure ]
then ./configure --prefix=/usr $OPTIONS
else if [ -x autogen.sh ]
then ./autogen.sh
./configure --prefix=/usr $OPTIONS
fi
fi

make
debinstall

Т.о. , обновление некоторых программ у меня теперь выглядит так:

cd ~/src/../
svn update
debuild

суббота, августа 11, 2007

FAQ: что такое Linux?

Сподобился-таки на еще один FAQ. Это "для самых маленьких", так что за отсутствие строгости просьба не пинать.

Q. Что такое эта Linux?

A. Linux - это свободная операционная система.

Q. Так. А что такое операционная система?

A. Это комплекс программ, запускающий все остальные программы, и необходимый им (программам) для 1) работы с оборудованием компьютера, 2) для взаимодействия с пользователем. Кроме того, операционная система (как правило) позволяет запускать несколько программ одновременно и обеспечивает их взаимодействие между собой. Коротко говоря, операционная система (ОС) - это главная программа на компьютере. Примерами операционных систем являются: UNIX, Linux, Solaris, Windows, DOS.

Q. Так. А что означает "свободная"?

A. Термин "свободная" применительно к программе означает, что лицензия на эту программу гарантирует вам как минимум четыре основных свободы: 0) Свобода запускать программу в любых целях; 1) Свобода изучения работы программы и адаптация ее к вашим нуждам; 2) Свобода распространять копии, так что вы можете помочь вашему товарищу; 3) Свобода улучшать программу и публиковать ваши улучшения, так что все общество выиграет от этого.

Q. Кто создает Linux и другие свободные программы?

A. Огромное количество разработчиков по всему миру.

Q. Ну как эта компания называется?

A. Это не компания. Это то, что люди называют _сообществом_. Просто большое количество людей, которых объединяют только общие взгляды на IT-индустрию и общее дело.

Q. А какая им от этого выгода?

A. Большинство из этих людей работает ради собственного удовольствия (Just for fun). Многим их работу оплачивают компании, которые хотят иметь более высококачественное ПО. Более того, есть компании, специализирующиеся на разработке свободного ПО.

Q. А какая выгода компаниям, раз эти программы бесплатные?

A. Во-первых, программы эти не бесплатные, а свободные. Разница примерно как между "халявным пивом" и "свободным словом". В частности, это означает, что эти программы можно продавать и покупать, но при этом любой желающий может получить их свободно. Но все равно не бесплатно - придется платить за носитель (диск) или за интернет-трафик. Так что многие компании зарабатывают, распространяя свободные программы - например, рассылая диски по почте. В России самая известная из таких компаний - это LinuxCenter. Во-вторых, многие компании зарабатывают в основном не на продаже программ, а на их поддержке. Ведь скачать программу - это только начало, дальше нужно научиться ее использовать. Для организаций это выливается в издержки по обучению персонала, издержки по внедрению, и издержки на поддержку пользователей. Неудивительно, что существуют компании, специализирующиеся на решении таких проблем. Это составляет основной доход таких гигантов, как RedHat и Novell. В Магнитогорске этим занимается компания RTFM.

Q. И много их, этих энтузиастов?

A. Точной статистики нет ни у кого. Однако есть оценки, согласно которым над одной свободной программой _в среднем_ работают 3 человека. А общее количество свободных программ оценивается в 378000. Простым перемножением получаем свыше миллиона разработчиков.

Q. А много ли людей пользуются Linux?

A. Опять же, точной статистики нет. Но, как минимум, известно, что Linux используется во всех государственных учереждениях в Бельгии, Франции, Норвегии, Китае. Это уже многие миллионы человек. У нас в стране многие ВУЗы используют Linux - в частности, Московский государственный технический университет им.Н.Э.Баумана. Кроме того, очень многие используют Linux, не зная об этом. Linux стоит на миллионах серверов в Интернете. Linux используется в автоматизации производства. Linux установлен на множестве небольших устройств - это ADSL-модемы и другое сетевое оборудование, смартфоны и КПК, DVD-плейеры и многое другое. Многие миллионы человек, использующие эти устройства, тем самым используют Linux.

Q. Как давно существует Linux?

A. Собственно Linux появилась в 1991 году. Однако часто, говоря "Linux", подразумевают операционную систему, от которой Linux берет все основные идеи - UNIX. UNIX появилась в 1969 году.

Q. Раз эти программы создают мало кому известные люди, какие гарантии того, что они не встроят в программы вредоносный или шпионский код?

A. Одно из ключевых свойств свободных программ - они распространяются в исходных кодах. Каждый сомневающийся может свободно взять (в Интернете или на дисках) эти исходные коды, изучить их, обнаружить и исправить ошибки и скомпилировать для себя.

Q. Что за слова такие - "исходный код", "скомпилировать" ?

A. Программисты пишут программы на специальных языках, называемых языками программирования. Эти языки более-менее близки к обычным, естественным языкам, на них вполне может читать и писать человек (при соответствующей подготовке, разумеется). Вот эти тексты, которые пишут программисты, и называются "исходными кодами". Однако компьютер сам по себе "не понимает" этих языков программирования, он понимает только так называемый "машинный код", образно говоря - единицы и нули. Для перевода с языков программирования на машинный язык созданы программы - трансляторы, или, иначе, компиляторы. Так что чтобы получить из исходных кодов нечто, что можно запустить, нужно эти исходные коды _скомпилировать_.

Q. И чем же так замечательно распространение программ в исходных кодах?

A. Коммерческие программы (обычно) распространяются без исходных кодов, в виде уже скомпилированного машинного кода. Весь фокус в том, что обратное преобразование - из машинного кода в исходный - технически очень сложно, а юридически - запрещено лицензией. А машинный код человеку все равно не понять. Таким образом, производитель может встраивать в свои (коммерческие, закрытые) программы все что ему вздумается - вредоносный или шпионский код, например - пользователь об этом даже не узнает. А при наличии исходных кодов их может прочитать и понять любой программист, и он быстро выявит любые несуразности. Если вы не программист, вы можете просто позвать знакомого программиста…

Q. Но это все не означает, что я должен… как его… компилировать все программы?

A. Конечно, не означает. Свободные программы распространяются не только в исходных кодах, но и в скомпилированном виде. Огромное количество свободных программ поставляется на дисках с дистрибутивом операционной системы Linux.