OpenBSD - сборка E17-cvs (или ещё одна маленькая победа разума)

sda00

2008-01-23

Помнится лет 15 назад коммерческие Unix можно было сравнить с тракторами Caterpillar - вылизанный, сияющий, новенький трактор: мощи - немеряно, рык грозен и авторитет подавляющ. Linux - ну что там Линукс, студентиком Танненбаума написан? Кто про него знал - заикались, что, мол, это тоже трактор, ржавенький, но трактор (типа, бесплатно и для народа). Счастливчики, дорвавшиеся до "фирмового" оборудования с коммерческими Unix, при этих словах падали под стул от хохота, те, кто разбирался с HP-UX, не тратили сил даже на то, чтобы покрутить пальцем у виска. Благодаря блестящему маркетингу и абсолютно наплевательской позиции к вопросам копирайтов, MS уверенно "хавала" десктопы россиян и умы разработчиков, выжигая напалмом островки NetWare, OS/2 и прочих более интересных "обитателей" компьютерных "винтов". Народ уже матерился при взгляде на требования MS к железу, но... "Делать нечего... Бояре, потужив о Государе и царевне молодой, в спальню к ней вошли толпой..." (и даже не заикайтесь о нонешнем "падении нравов"). К чему это я тут так разоряюсь? А вы представьте себе чуток проржавевшую помесь танка с трактором (женского полу), у которого вместо седушки водителя торчит огрызок трубы. Вертикально. Чтобы сразу и по самые гланды всем, кто захочет притопить "газулю" в пол сразу после установки generic системы. Представили? Вот это и есть OpenBSD. Ежели неумелой детской рукой на "морде" этого чудовища намалевать глазки и ухмылку "рыбки" с картинки "No Blow - No Go!" - то именно так и будет выглядеть истинный символ этой ОСи.

FAQ: "Выбор любой операционной системы зависит от ответа на вопрос: "Можно ли сделать некую работу именно так, как Вам хочется?" И ответить на сей вопрос Вы должны самостоятельно."

Как это ни парадоксально - чем-то эта система притягивает. Может, тем, что требует сначала "любви, ласки и внимания", а вот потом "на всё готовая я...". По большому счёту единственное, что реально бесит - это отсутствие нормальных драйверов на видео, из-за чего работа в иксах превращается в кошмар (угу, ваша Галя - балованная!). Не гонял пока тестов для сравнения с Linux-2.6.23 (SLUB), но что-то подсказывает, что наше "чудовище" даже с включенным softupdate окажется аутсайдером. Бо цели у проекта несколько иные. Во главу угла поставлена безопасность системы, что накладывает порой довольно ощутимые ограничения на процесс оптимизации софта под эту платформу. В частности, я ставил как i386 на Athlon64 и для успешной компиляции 'ecore' пришлось вырезать использование mmx инструкций. Теперь по порядку (всё, что описано ниже - сугубо моё IMHO и ни в коем случае не претендует на "истину в последней инстанции"):

  1. Товарищ, помни, OpenBSD - не Unix и POSIX несовместима! Таки позабыл? Не беда! Отсутствие функции strfmon() и хэдера monetary.h быстро восстановят сей пробел.
  2. "Зеркала" официального репозитория чудовищны. Сперва грешил на свои настройки. Потом поставил Master Fanout Site (Canada) - заработало. Такое ощущение, что многие файлы на зеркалах "обрезаны", недокачаны. Радовался рано. Где "затычка" - пока не разобрался, но "рецепт" следующий: тянем wget-ом и потом ставим с "винта". Иначе устанете вырезать partial установки (довольно занятная кстати фишка, потом подумаю, как её использовать).
  3. Не ищите iocharset в опциях mount-а. Его там нет. Запись в openbsd-misc mailinglist (от января 2006-го года):

    "At the moment, there is no way to specify a particular charset when mounting filesystems. This is being worked on, however (at least for cd9660, udf and ntfs filesystems).

    Miod"

    Сильно. Внушает. Интересно, сколько обезьян необходимо, чтобы вкрутить в патрон лампочку? Нет. Не так. Сколько времени необходимо одной обезьяне, чтобы проделать сие упражнение, не расхерачив при сём упомянутую лампочку к свиньям собачьим? "Дак ведь Пост, Матушка, ждём-с, до первой звезды..."

  4. Нет поддержки ни одной журналируемой файловой системы.
  5. А теперь позвольте выкатить списочек. Это - полный top. В фоксе открыто 15 вкладок, на одной из которых пишется сия нота. В Enlightenment-е загружено 55 модулей. mpd + emphasis. Почему emphasis жрёт 68.07% от остатков проца - разговор отдельный и будет он понятен и интересен, пожалуй, только разработчикам. dbus запущен сугубо ради спортивного интереса. wget тащит пакет openoffice с офсайта. Лепота...
    load averages: 1.45, 1.46, 1.56 18:37:50
    43 processes: 3 running, 38 idle, 1 zombie, 1 on processor
    CPU states: 38.4% user, 0.0% nice, 60.8% system, 0.2% interrupt, 0.6% idle
    Memory: Real: 216M/360M act/tot Free: 641M Swap: 0K/1537M used/tot
    
    

    PID USERNAME PRI NICE SIZE RES STATE WAIT TIME CPU COMMAND 27809 sda 63 0 10M 17M run - 162:13 68.07% emphasis 13285 sda 2 0 34M 44M sleep poll 24:01 13.13% enlightenment 22761 sda 45 0 18M 76M run - 13:51 7.23% Xorg 11287 sda 32 0 77M 110M run - 11:03 3.32% firefox-bin 10391 sda 2 0 1216K 4176K sleep poll 2:54 0.93% mpd 13510 root 2 0 492K 768K sleep select 5:24 0.00% pptp 26634 sda 2 0 936K 3784K sleep poll 1:07 0.00% mpd 24992 sda 2 0 7204K 27M sleep poll 0:34 0.00% SciTE 15922 root 2 0 1024K 1552K sleep select 0:23 0.00% ppp 6781 root 2 0 368K 932K sleep select 0:16 0.00% pptp 24611 root 2 0 892K 1868K sleep select 0:08 0.00% ppp 23415 sda 2 0 2684K 2784K sleep poll 0:06 0.00% mpd 26339 sda 2 0 2096K 5096K sleep poll 0:03 0.00% enlightenment_fm 28451 sda 2 0 480K 1556K sleep select 0:03 0.00% wget 10225 sda 2 0 1568K 4176K sleep select 0:02 0.00% xterm 9292 sda 2 0 1628K 4156K sleep select 0:01 0.00% xterm 15626 _syslogd 2 0 404K 872K sleep poll 0:00 0.00% syslogd 30207 sda 2 0 1164K 3040K sleep poll 0:00 0.00% gconfd-2 20833 sda 10 0 996K 1952K idle wait 0:00 0.00% bash 25807 root 2 0 332K 740K idle netio 0:00 0.00% syslogd 14280 sda 10 0 1060K 1892K idle wait 0:00 0.00% bash 17142 sda 28 0 752K 1628K onproc - 0:00 0.00% top 6089 root 2 0 516K 732K sleep select 0:00 0.00% pptp 13630 sda 10 0 908K 1804K idle wait 0:00 0.00% bash 1266 root 2 0 480K 828K idle select 0:00 0.00% cron 23036 _dbus 2 0 612K 1228K idle poll 0:00 0.00% dbus-daemon 23716 sda 10 0 688K 1340K idle wait 0:00 0.00% bash 24928 sda 18 0 540K 504K idle pause 0:00 0.00% sh 3816 sda 18 0 480K 476K idle pause 0:00 0.00% sh 13991 sda 18 0 504K 592K idle pause 0:00 0.00% sh 18563 sda 2 0 636K 1332K idle poll 0:00 0.00% dbus-daemon 15497 sda 2 0 556K 1136K idle poll 0:00 0.00% dbus-launch 1 root 10 0 388K 340K idle wait 0:00 0.00% init 9994 sda 10 0 456K 1124K idle wait 0:00 0.00% xinit 26534 root 2 0 360K 692K idle select 0:00 0.00% inetd 3810 root 3 0 336K 768K idle ttyin 0:00 0.00% getty 24959 root 3 0 420K 768K idle ttyin 0:00 0.00% getty 18100 root 3 0 296K 760K idle ttyin 0:00 0.00% getty 15889 root 3 0 224K 756K idle ttyin 0:00 0.00% getty 19607 sda 18 0 408K 440K idle pause 0:00 0.00% sh 26715 sda 2 0 1708K 1008K idle netio 0:00 0.00% Xorg 13956 root 2 0 568K 1156K idle select 0:00 0.00% sshd

  6. Базовую систему ставил всю, кроме SMP ядра (не пользую SMP на десктопе из принципа). Долго рубился в Tetris (на 9-ом уровне меня подкосили - непорядок). Ностальгировал. Узрел в пакетах quake и quake2. Смахнул скупую слезу и долго думал про всех, кто не желает появления nVidia драйверов для OpenBSD. В результате список установленных пакетов выглядит на сегодня вот так:
    ~ pkg_info | awk -F\ '{print $1}'
    
    

    ORBit2-2.14.7 aalib-1.2p2 apr-1.2.9 apr-util-1.2.8 aspell-0.50.5p4 atk-1.18.0p0 autoconf-2.59p1 autoconf-2.61p1 automake-1.9.6p2 bash-3.2.17 bison-2.1p0 boehm-gc-7.0 bzip2-1.0.4 cairo-1.4.10 cdparanoia-3.a9.8p0 cdrtools-2.01p0 chmlib-0.39 curl-7.16.2 db-4.2.52p11 dbus-1.0.2p1 dbus-glib-0.73p0 dbus-python-0.80.1 desktop-file-utils-0.12p0 docbook-4.4 docbook-dsssl-1.72 dvd+rw-tools-5.21.4.10.8p0 e16keyedit-0.2 enlightenment-0.16.7.2p2 esound-0.2.34p0v0 evince-0.8.1 faac-1.24 faad-2.0p6 fam-2.7.0p2 fetchmail-6.3.8 ffmpeg-20070501p0 findutils-4.1p0 flac-1.1.2p1 gconf2-2.18.0.1 gettext-0.14.6p0 ghostscript-8.54p1 ghostscript-fonts-8.11p0 giblib-1.2.4p3 gimp-2.2.17 glib-1.2.10p1 glib2-2.12.12p1 glitz-0.5.6 gmake-3.80p1 gmpc-0.15.1 gmpc-lyrics-0.15.0 gnome-icon-theme-2.18.0p0 gnome-keyring-0.8.1 gnome-mime-data-2.18.0 gnome-vfs2-2.18.1p0 gtk+-1.2.10p6 gtk+2-2.10.13 gtkspell-2.0.5p4 hicolor-icon-theme-0.10p0 imlib-1.9.14p5 imlib2-1.3.0p0 iodbc-3.52.4p0 iso8879-1986 jasper-1.900.1 javaPathHelper-0.3 jbigkit-1.6p1 jpeg-6bp3 ladspa-1.12p0 lame-3.96.1p2 lcms-1.15 libIDL-0.8.8 liba52-0.7.4p2 libao-0.8.8 libart-2.3.19p1 libaudiofile-0.2.6p0 libbonobo-2.18.0 libbonoboui-2.18.0 libcroco-0.6.1 libdnet-1.10p2 libdv-0.104p1 libdvdnav-20051102p2 libexif-0.6.16 libgadu-20060411 libgcrypt-1.2.0p1 libglade2-2.6.1 libgnome-2.18.0 libgnomecanvas-2.14.0p0 libgnomeprint-2.18.0 libgnomeprintui-2.18.0 libgnomeui-2.18.1p0 libgpg-error-1.1p0 libgsf-1.14.3p2 libiconv-1.9.2p3 libid3tag-0.15.1bp0 libidn-0.6.1 libltdl-1.5.22p2 libmad-0.15.1bp1 libmikmod-3.1.10p4 libmng-1.0.9p1 libmpcdec-1.2.4 libmpd-0.14.0 libmspack-20040308a libogg-1.1.3 librsvg-2.16.1p0 libsamplerate-0.1.2p0 libshout-2.2.2p0 libslang-1.4.9p3 libsndfile-1.0.11p0 libtheora-1.0alpha7 libtool-1.5.22p13 libungif-4.1.4p1 libunicode-0.4p1 libutf-2.0 libutf8-0.8p0 libvorbis-1.2.0 libwmf-0.2.8.3p3 libwpd-0.8.9p0 libxml-2.6.29 libxslt-1.1.21 lzo-1.08p1 mc-4.6.1p1 meanwhile-1.0.2p0 metaauto-0.7 mozilla-firefox-2.0.0.6 mpc-0.12.1 mpd-0.13.0p1 mplayer-1.0pre8p14-sdl msmtp-1.4.12p0 mutt-1.5.16p0 nasm-0.98.38p0 neon-0.26.2 nmap-4.20 nspr-4.6.7 nss-3.11.7 openoffice-2.2.1p0 p5-Text-Iconv-1.4 p7zip-4.47 p7zip-rar-4.47 pango-1.16.4 pcre-7.1 pidgin-2.0.1p0-gtkspell png-1.2.18 poppler-0.5.4p1 popt-1.7p0 pptp-1.7.1 procmail-3.22p2 pstree-2.27 py-Numeric-23.1p1 py-cairo-1.4.0 py-gobject-2.13.1 py-gtk2-2.10.4 py-iconvcodec-1.1.2p0 python-2.4.4p4 python-expat-2.4.4p4 qdbm-1.8.75 quake-20000101p3-sdl quake2-0.3p3 rxvt-2.7.10p2 scintilla-1.74 scite-1.74 screen-4.0.3p0 scrollkeeper-0.3.14p3 sdl-1.2.9p7-sun shared-mime-info-0.21p0 silc-toolkit-1.0.2p1 speex-1.2beta2 sqlite3-3.4.1 startup-notification-0.9 subversion-1.4.4 t1lib-5.1.0p0 taglib-1.4p1 teTeX_base-3.0p9 teTeX_base-fmt-3.0p0 teTeX_texmf-3.0p1 texi2html-1.64 tiff-3.8.2p0 toolame-0.2lp1 unzip-5.52 vim-7.1.33-no_x11 w3m-0.5.2-image wget-1.10.2p0 wxWidgets-gtk2-2.6.3p0 x264-20070325p1 xchm-1.13 xcompmgr-1.1.1p2 xcyrillic-2.0p0 xine-lib-1.1.7p0 xine-ui-0.99.5 xvidcore-1.0.3p0 yasm-0.6.1 zip-2.32

    Жить можно. Из исходников был поставлен лишь последний gettext (0.17). Плюс добил библиотеки amr* и скоро возьмусь за пересборку xine-lib, ffmpeg и mplayer, бо что мы имеем в пакетах - в кошерных домах даже свиньям не подают. Причём ffmpeg и mplayer ещё можно как-то пользовать, а вот xine... Xine пришлось поставить для сборки Enlightenment-а на скорую руку. Итоги:

    ~ > df -h
    
    

    Filesystem Size Used Avail Capacity Mounted on /dev/wd2a 9.8G 2.1G 7.3G 22% / /dev/wd2d 19.2G 10.2G 8.0G 56% /home /dev/wd2j 31.0G 28.1G 2.8G 91% /mnt/sdb3

    /dev/wd2j - есть не что иное, как Fat-опомойка cо скромной аудиоколлекцией. Посмотрим на порно, что заняло 56% от /home?

    ~ > find /home/sda/source -maxdepth 1 -type d -exec du -sh {} \; | sort -rn
    
    

    367M /home/sda/source/e17themes 9.0G /home/sda/source 6.5G /home/sda/source/books 2.2G /home/sda/source/compile

    и заодно на наши скромные результаты:

    ~ > du -sh /opt/e17
    67.9M /opt/e17
    
  7. Большим сюрпризом оказалось отсутствие mime.types файла в /etc. Оно есть в /var/www/conf/mime.types, есть в /etc/mutt/mime.types (если вы любите mutt также, как люблю его я). Из обеих файлов можно скомпоновать достойный внимания результат после обработки напильником. Поскольку скрипт ставит все компоненты в /opt/e17 (да и удалять потом проще. грохнул каталог и спи спокойно), то бросил симлинк на mime.types и в /opt/e17/etc.
  8. Скрипт ноне гарантированно способен на i386/x86-64 архитектуре собрать вам следующие "вкусности" (и уверен, что это не предел, поскольку не тестировал для всего, что лежит в E-cvs):

    EFL (Enlightenment Foundation Libraries):

    eet edb evas ecore embryo imlib2 efreet edje epeg epsilon esmart emotion engrave ewl etk exml enhance imlib2_loaders etk_extra e_dbus

    EFL 'applications':

    e edje_viewer entrance exhibit estickies examine e_utils express elicit iconbar imlib2_tools emphasis expedite extrackt scrot rage

    EFL 'e_modules' (помимо стандартных):

    alarm bling cpu calendar deskshow efm_nav efm_path emu flame forecasts mail net news photo rain screenshot slideshow snow taskbar tclock uptime weather winselector wlan

    В связи с некоей спецификой OpenBSD архитектуры следующие модули требуют лёгкой рихтовки:

    cpu, mem, battery, net, wlan, temperature (грубо говоря - все, что имеют дело непосредственно с железом)

  9. После доводки секций скрипта по сборке до ума удалось свести количество патчей исходников к минимуму (для устанавливаемых компонентов естественно). Поскольку в html переводить лениво - смотрите лучше в скрипте:
    # OpenBSD patchset
    case $(uname) in
    OpenBSD)
    echo "Starting OpenBSD patchset..."
    cd $e17_cvs_local_location
    
    

    if [ "`grep \#include\ \ ./e17/libs/imlib2/src/modules/loaders/loader_png.c`" != "" ] ; then cat ./e17/libs/imlib2/src/modules/loaders/loader_png.c | sed 's/\#include\ \/\#include\ \<\/usr\/local\/include\/libpng\/png\.h\>/' > ./loader_png.c.patched cp ./loader_png.c.patched ./e17/libs/imlib2/src/modules/loaders/loader_png.c fi

    if [ "`grep _POSIX_HOST_NAME_MAX ./e17/apps/e/src/bin/e.h`" = "" ] ; then echo '#ifndef _POSIX_HOST_NAME_MAX' > ./e.h.patched echo '#define _POSIX_HOST_NAME_MAX 255' >> ./e.h.patched echo '#endif' >> ./e.h.patched cat ./e17/apps/e/src/bin/e.h >> ./e.h.patched cp ./e.h.patched ./e17/apps/e/src/bin/e.h fi

    if [ "`grep inttypes.h ./e17/libs/evas/src/lib/engines/common/evas_convert_main.c`" = "" ] ; then echo '#include ' > ./evas_convert_main.c.patched cat ./e17/libs/evas/src/lib/engines/common/evas_convert_main.c >> ./evas_convert_main.c.patched cp ./evas_convert_main.c.patched ./e17/libs/evas/src/lib/engines/common/evas_convert_main.c fi

    echo "OpenBSD patchset is DONE. Press Enter." read a1 ;; esac

    Как видим из приведённого выше - сие есть не что иное как издержки autotools в чистом виде. В общем, всё оказалось не так уж и страшно. Как только rootshell.be будет доступен (сайтик кстати с недавних пор переехал на OpenBSD платформу) - выложу скрипт version="0.7.0.1". Кому "в Париж по делу срочно" - мыльте, закину.

    Hint: ежели опыта маловато, а попробовать таки хоцца - качайте заодно и диск Frenzy - он спасёт отцов демократии в критические дни. Обычно хватает boot -s на промпте :).

  10. Let It Be! Just Let It Be!

И махонький совет на прощание, коли позволите: отключите Java и Java-Script в настройках браузера...