Небольшое предисловие

Debian - он хороший, но выходит нечасто. Порой надо что-нибудь посвежее. Или "такое же, но с перламутровыми пуговицами". Буржуи не парятся и ставят куски из unstable/testing, заодно цепляя полсистемы. А у нас трафик дорогой. А на backports.org (где всё собрано по возможности из stable) тоже не всё есть.

В общем, объяснял я тут одному хорошему знакомому, как делать бэкпорты руками. Получайте as-is, с некоторыми правками:

Про бэкпорты.

(10/09/06 09:54:44) DaGuTa:

    Привет.
    У тебя случайно нет mysql5.0 собранного под Sarge 3.1?
    А то тригеры понадобились.

(10/09/06 09:57:09) vnaum:

    А postgres не смотрел?
    Мы смотрели-смотрели и postgres сильно симпатичнее будет.
    Имею мнение, что триггерами дело не ограничится Ж-)
    есть личнособраный postgres 8.1.

(10/09/06 09:58:25) DaGuTa:

    Смотрел, мне его даже под винды давали. Но как то уже mysql ковырял, на
    ходу менять не хочется.
    Притом задачка мелкая, вроде хотелось по быстрому, а не выходит:-(

(10/09/06 10:05:25) vnaum:

    Тогда могу сам сбэкпортить, могу тебя научить.
    Трафика тебе одиниково Ж-)
    Рекомендую postgres всё равно.

(10/09/06 10:06:41) DaGuTa:

    Учи, один фиг интересно!

(10/09/06 10:11:41) vnaum:

    Короче, идёшь на packages.debian.org
    Находишь там mysql-server из unstable/testing

(10/09/06 10:12:14) DaGuTa:

    Уже пришел вот сюда:
    http://packages.debian.org/testing/misc/mysql-server-5.0

(10/09/06 10:12:26) vnaum:

    Можно apt-source сделать, конечно.
    Но я что-то так уже привык.
    Source Package: mysql-dfsg-5.0, Download: [dsc]
    [mysql-dfsg-5.0_5.0.24a.orig.tar.gz] [mysql-dfsg-5.0_5.0.24a-4.diff.gz]
    
    Вот эти [mysql-dfsg-5.0_5.0.24a.orig.tar.gz]
    [mysql-dfsg-5.0_5.0.24a-4.diff.gz] - качай.

(10/09/06 10:23:27) vnaum:

    Взял?
    распаковывай .orig.tar.gz
    Переходи в развёрнутый каталог.
    zcat mysql-dfsg-5.0_5.0.24a-4.diff.gz | patch -p1
    Должен появиться там /debian

(10/09/06 10:50:16) DaGuTa:

    в директории набрать это?
    zcat mysql-dfsg-5.0_5.0.24a-4.diff.gz | patch -p1
    дык патч в директорию положить?

(10/09/06 10:59:44) vnaum:

    Патч - куда угодно.
    patch -p1 читает его с stdin

(10/09/06 11:10:47) DaGuTa:

    фуф, со второго раза вышло вроде:-)
    Что дальше?

(10/09/06 11:12:09) vnaum:

    Теперь у тебя есть каталог с исходниками mysql, в нём подкаталог debian.
    1. chmod +x debian/rules
    2. Смотри список build-depends в debian/control. Устанавливай все эти
    пакеты.

(10/09/06 11:14:28) DaGuTa:

    а есть способ по быстрому это проверить, а то там зависимостей много?

(10/09/06 11:17:08) vnaum:

    Гхм.
    Ну...
    Может и есть.
    Я - не знаю.
    Можно поиском-заменой убрать запятые и указание версий.
    И потом копипасте его в aptitude install

(10/09/06 11:17:51) DaGuTa:

    нашел способ открыл два окна и сравниваю:-)
    Хотя про это тоже думал.

(10/09/06 11:26:33) DaGuTa:

    Вроде все поставил.

(10/09/06 11:27:16) vnaum:

    теперь из каталога с сырцами:
    
    fakeroot debian/rules binary
    fakeroot тож поставь.

(10/09/06 11:29:59) DaGuTa:

    и вот это чего такое?
    debian/rules:7: /usr/share/dpatch/dpatch.make: No such file or directory

(10/09/06 11:30:37) vnaum:

    aptitude install dpatch

(10/09/06 11:30:39) DaGuTa:

    его он не просил.

(10/09/06 11:30:49) vnaum:

    Теперь просит Ж-)

(10/09/06 11:37:21) DaGuTa:

    понеслась...

(10/09/06 11:37:43) DaGuTa:

    а конфиг создавать не надо было?

(10/09/06 11:40:07) vnaum:

    Какой конфиг?

(10/09/06 11:40:40) DaGuTa:

    в смысле ./configure ?
    С какими опциями собирать? Или по умолчанию с дебовскими собирется?

(10/09/06 11:50:14) vnaum:

    В rules написано с какими.
    Умолчания - 99% тебе подойдут.
    Скажем так, если умолчательных настроек тебе не хватает - то ты задумал что-то вовсе странное.

(10/09/06 11:50:33) DaGuTa:

    Ясно. Так и думал.

(10/09/06 12:04:22) DaGuTa:

    Закончил.

(10/09/06 12:04:40) vnaum:

    Куча *.deb в .. видишь?
    Это оно.

Всё, про бэкпорты написано. Дальше - создание репозитария

(10/09/06 12:06:14) DaGuTa:

    Угумс, вижу.

(10/09/06 12:08:45) vnaum:

    Ну дальше можно репозитарий собрать.
    Или dpkg -i чего надо.
    Первый вариант получше.
    
    aptitude install dpkg-dev

(10/09/06 12:09:34) DaGuTa:

    Оно у меня уже стоит.

(10/09/06 12:13:49) vnaum:

    Карашо.
    Сделай где-нибудь каталог pool, в нём pool/mysql5
    Туда сложи *.deb

(10/09/06 12:14:26) vnaum:

    #!/bin/bash
    POOLS=pool/*
    [ ! -z "$1" ] && POOLS="pool/$1"

    for dist in $POOLS
    do
      base=$(basename "$dist")
      echo "Scanning '$dist' -> $base..."
      
      if [ -d $dist ]; then
      mkdir -p "dists/stable/$base/binary-i386"
        dpkg-scanpackages \
          "$dist" /dev/null \
          | gzip -9c \
          > "dists/stable/$base/binary-i386/Packages.gz"
      else
        echo "'$dist' doesn't exist!"
      fi
    done

(10/09/06 12:14:50) vnaum:

    Это был rescan.sh
    Его положить рядом с pool

(10/09/06 12:23:28) DaGuTa:

    А потом выполнить и все?

(10/09/06 12:34:08) vnaum:

    Ага.
    Оно создаст dists

(10/09/06 12:34:45) DaGuTa:

    создало. Теперь добавить в апт лист?

(10/09/06 12:34:54) vnaum:

    Потом в sources.list:
    deb file:/var/www/debian stable mysql5
    Или где там у тебя каталог.
    Потом aptitude update.
    И aptitude install нужный пакет.

(10/09/06 12:35:51) DaGuTa:

    а чем apt-get update хуже?

(10/09/06 12:36:40) vnaum:

    Release Notes recommends using aptitude instead of apt-get

(10/09/06 12:37:20) DaGuTa:

    хм. ясно будем юзать aptitude.

(10/09/06 12:46:20) DaGuTa:

    у меня dists лежит в /home, значит пишу:
    deb file:/home stable mysql5
    ?

(10/09/06 12:50:40) vnaum:

    И pool тоже в /home?
    Или в /home/USER?

(10/09/06 12:50:59) DaGuTa:

    и pool тоже.

(10/09/06 12:53:39) vnaum:

    Тогда да, deb file:/home stable mysql5
    Только /home, если чё, самое неподходящее для этого место.
    Прикинь тебе придётся когда-нить создать пользователя pool?
    
    Уж лучше переложи в /home/USER/debian/(pool,dists)

(10/09/06 12:55:04) DaGuTa:

    Уговорил :-)

(10/09/06 12:56:20) vnaum:

    Кстати, если (pool,dists) лежат в укачиваемом месте (/var/www,
    ~/public_html) - то этот репозитарий можно будет использовать и
    удалённо.

(10/09/06 12:59:05) DaGuTa:

    Вот так он меня обзывает.
    W: Couldn't stat source package list file: stable/mysql5 Packages
    (/var/lib/apt/lists/_home_daguta_debian_dists_stable_mysql5_binary-i386_Packages)
    - stat (2 No such file or directory)

(10/09/06 12:59:14) vnaum:

    Повтори update
    aptitude не идеальна, при первом добавлении источника ругается на что-то.

(10/09/06 13:00:24) DaGuTa:

    Во млин, не ругается. мдя... а я бы косяки еще долго искал:-)
    Усе вроде поставил:-)
    И ничего сложного, когда знаешь что и как:-)

(10/09/06 13:09:49) vnaum:

    Можно я эту беседу опубликую как статью про ручную сборку бэкпортов?

(10/09/06 13:10:50) DaGuTa:

    Я сам тебе хотел посоветовать выложить это:-)
    Дельная весч выйдет!

(10/09/06 13:13:25) vnaum:

    ОК!

Небольшое послесловие

Ну вот что-то в таком духе. Для простых случаев этого хватает. Бывает, что для сборки одного пакета надо сначала сбэкпортить другой. apt-source - помогает. Бывает ещё что для работы того что собрано с этого source archive не хватает, необходимые для работы пакеты надо брать с других source archive.

В общем при сборке пакетов сильно многое зависит от собственно что собрались собирать. Бывает всё тривиально (вплоть до того что пакет из unstable можно прямо устанавливать в stable, никаких зависимостей нет вообще), а бывает что и ну его нафиг Ж-)

Удачи!

Замечания, предложения - vnaum@inbox.ru, vladislav.naumov@gmail.com (gtalk/jabber/email), icq#100485019

Комментарий от Victor Wagner:

Ну во-первых, вместо fakeroot debian/rules binary рекомендую использовать debuild. Он заодно и chmod +x debian/rules сам сделает (пакет devscripts).

Во-вторых, не рассмотрена проблема версионированных зависимостей в Build-Depends. Рассмотреть её следует следующим способом: Если при сборке вылетает "хочу версию пакета xxx y.yy, а установлена только z.zz", то сначала следует попробовать занизить версию в Build-Depends до доступной, и только если при этом пакет откажется собираться или работать, бэкпортить соответствующую версию.