Previous Entry Добавить в избранное Поделиться Next Entry
Как использовать репы ArchLinux в Slackware
Haydn
serg_markov
   Репозитории ArchLinux огромны и есть прямой смысл иметь возможность создания пакетов слаки используя PKGBUILD, который в арче служит неким аналогом SlackBuild в слаке. Помимо простоты и удобства сборки пакетов прог которых нигде нет в слаке из неисчерпаемых репозиториев ArchLinux (наверное самых больших в мире), сборка пакетов из арча позволяет также просто использовать патчи из арча ко многим прогам, которые без этих патчей просто не собираются.
Предлагаемый далее метод имеет следующие ограничения:

нет разрешения зависимостей, как в арче, их придется устанавливать ручками
нет верификации подписи

   Естественно нет гарантии что любой пакет , собранный таким методом, будет работать, но большинство пакетов будет работать вполне нормально.
   PKGBUILD официальных репозиториев берутся из abs (Arch Build System) или можно клонировать git

git clone git://projects.archlinux.org/svntogit/packages.git

PKGBUILD неофициального репозитория aur берутся здесь - aur.archlinux.org/packages.php (тарбалл).
   Арч использует для создания пакетов из PKGBUILD утилиту makepkg в составе менеджера пакетов pacman. Сам по себе pacman в слаке не только не нужен, но и крайне вреден, с его помощью можно запросто сломать систему, поэтому создаем пакет только с makepkg из pacman

- скачиваем сорцы pacman - ftp://ftp.archlinux.org/other/pacman/pacman-4.0.3.tar.gz. Более поздние версии брать нельзя, в них makepkg жестко зависит от самого pacman и не работает без него.

- распаковываем сорцы в любое место и конфигурируем в папке с сорцами

./configure \
--build=i686-pc-linux-gnu \
--host=i686-pc-linux-gnu \
--prefix=/usr \
--libdir=/usr/lib \
--localstatedir=/var \
--sysconfdir=/etc \
--mandir=/usr/man

- make

- в файле ../pacman-4.0.3/scripts/makepkg комментируем (# в начале каждой строки) строчки 1042-1045, чтобы makepkg не стирал файлы *.la, необходимые слаке. Должно получится вот так:

# if [[ $(check_option libtool) = "n" ]]; then
# msg2 "$(gettext "Removing "%s" files...")" "libtool"
# find . ! -type d -name "*.la" -exec rm -f -- '{}' \;
# fi

- переименовываем makepkg в makepkg-arch и копируем его в /sbin

- копируем файл ../pacman-4.0.3/etc/makepkg.conf в /etc/makepkg.conf

   Переопределяем флаги компиляции в файле /etc/makepkg.conf
приводя их к следующему виду

#-- Compiler and Linker Flags
# -march (or -mcpu) builds exclusively for an architecture
# -mtune optimizes for an architecture, but builds for whole processor family
CFLAGS="-O3 -march=native -mtune=native -fomit-frame-pointer -pipe \
-mmmx -m3dnow -falign-jumps=1 -falign-labels=1 -fPIC"
CXXFLAGS="-O3 -march=native -mtune=native -fomit-frame-pointer -pipe \
-mmmx -m3dnow -falign-jumps=1 -falign-labels=1 -fPIC"
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
#-- Make Flags: change this for DistCC/SMP systems
MAKEFLAGS="-j1"

Флаги могут какие угодно по хотению собственной левой пятки :-)
   Скачиваем пакет pacman-mirrorlist - https://www.archlinux.org/packages/core/any/pacman-mirrorlist и распаковываем его в соответствии с его структурой (распаковываем папку pacman.d в /etc). Раскомментируем в /etc/ pacman.d/mirrorlist какой нибудь сервер репозиториев, у самого стоит Server = http://mirrors.liquidweb.com/archlinux/$repo/os/$arch.
   Для создания и использования abs необходим сам пакет abs. Создаем его следующим образом: копируем PKGBUILD для abs c www.archlinux.org/packages/extra/i686/abs (projects.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/abs ). Создаем из PKGBUILD пакет слаки следующим скриптом, исполняемым от root в папке с PKGBUILD (в дальнейшем этот же скрипт будет использоваться для создания пакетов слаки и из других PKGBUILD).

#!/bin/sh
renice 19 $$ > /dev/null
CWD=$(pwd)
name=$(basename $(pwd))
/sbin/makepkg-arch --asroot || exit 1
cd pkg
mkdir install
sed -n -e '/post_install() {[[:space:]]*$/,/^[[:space:]]*}[[:space:]]*$/p' .INSTALL | sed -e '1d;$d' -e 's/[[:space:]]*//' > install/doinst.sh
namepkg=$(sed -n '/pkgname=/p' $CWD/PKGBUILD | sed 's/pkgname=//') > /dev/null
version=$(sed -n '/pkgver=/p' $CWD/PKGBUILD | sed 's/pkgver=//') > /dev/null
rm -rf .INSTALL > /dev/null
rm -rf .PKGINFO > /dev/null
/sbin/makepkg -l y -c n $CWD/$namepkg-$version-archlinux.txz

sed -n -e '/post_install() и далее в одной строке

   В файле /etc/abs.conf можно переопределить место сохранения дерева abs в строке

[ "$ABSROOT" = "" ] && ABSROOT="/ваш_путь_к_дереву_abs/"

Создаем дерево официальных репозиториев — abs в терминале. Обновляется дерево abs такой же командой — abs.
    Далее просто переходим в папку с нужным PKGBUILD и запускаем в ней указанный выше скрипт, на выходе получаем пакет слаки. Если у пакета есть какие то зависимости, то они указаны и в вебморде и в секциях depends, makedepends, optdepends PKGBUILD. Depends жесткие зависимости, которые обязательно должны быть, makedepends нужны только для создания пакета и после его создания могут быть удалены, optdepends для каких то дополни­тельных и необязательных возможностей. Как и было сказано, все зависимости придется устанавливать ручками.
    Арч декларирует наличие самых новых версий прог, но это далеко не всегда так, особенно в aur. Поэтому если хочется самые последние версии прог, надо зайти на сайт проги, и если есть новая версия, скачать ее сорцы в папку со PKGBUILD и в нем поправить pkgver и md5sums (sha256sums) для архива сорцов.
    Поиск PKGBUILD выполняется через вебморды, для официальных репозиториев здесь — www.archlinux.org/packages, для aur здесь — aur.archlinux.org/packages. Поиск возможен как по названию пакета, так и по описанию (типа «pdf»)
    Иногда, довольно редко, нужны тривиальные правки PKGBUILD, типа замены qt4-qmake на qmake.
    Сказанного вполне достаточно для работы с abs и aur, но если возникли какие то вопросы они скорее всего разобраны в вики арча, wiki.archlinux.org.
    Но надо помнить что создание пакетов из чужого дистра изначально может быть некорректным (хотя в большинстве случаев такое создание вполне удачно), поэтому в первую очередь надо думать головой (впрочем это всегда полезно :-)
    В любом случае не надо собирать из арча системные пакеты, уже имеющиеся в слаке на DVD или в других местах, поломать систему таким образом очень легко. Лучше всего использовать abs и aur для сборки пользовательских пакетов и их зависимостей, которых в слаке нигде нет.
Метки: ,

(Анонимно)

2013-05-06 23:49 (UTC)

Здравствуйте! Всё делаю по инструкции, но у меня вылезает ошибка:
==> ERROR: Cannot find the pacman binary required for dependency operations.
я и гуглил, и не очень мне это помогло ни чего не нашёл.
Прошу вас мне помочь!

Сейчас проверил, не собирается с новым makepkg, в новый встроили обязательную проверку на наличии пакмана, в старом makepkg если пакмана не было, то проверка пропускалась.
Вот makepkg от 2012 года, с которым все работает
http://pastebin.com/E3GcrfbP

Обновлено, и дополнены некоторые моменты , которые пропустил.

Спасибо

(Анонимно)

2013-05-07 11:04 (UTC)

Спасибо огромное, за помощь и за ссылку, а то уже всю голову сломал.

Это мой косяк :) , не проверил в новых версиях пакмана. В тексте уже исправлено

Вы читаете serg_markov