Очень часто мы сталкивается с тем, что пакет для Mageia никак не собирается, но при этом существует rpm пакет от другого дистрибутива.
Предлагаю скрипт rpmtorpm, который конвертирует rpm пакеты от других дистрибутивов в формат нашего репозитория.
Конвертер rpmtorpm использует способность alien'а создавать spec-файлы, при этом сам alien ничего не конвертирует кроме скриптов. В rpmtorpm используется классический rpmbuild, который использует spec-файл, созданный alien'ом, который модифицируется и дополняется из спека, на основе которого собирался пакет, требующий конвертации.
Зависимости у скрипта rpmtorpm: alien, rpm-build
Надо выбрать любую директорию, в неё положить скрипт rpmtorpm, сделать его исполняемым, в этой же директории создать каталоги RPM, SRPM.
В каталог RPM надо положить rpm-пакет, требующий конвертации, а в каталог SRPM надо положить src.rpm-пакета, требующего конвертации.
Выполнить скрипт rpmtorpm. Достаточно прав пользователя.
Готовый rpm пакет будет в каталоге MGA, там же будет src.rpm. Оба заливаются в репозиторий, они имеют суффикс converted.
Конвертировать можно пакеты любой архитектуры в любой архитектуре дистрибутива.
Если пакет не удалось сконвертировать, то создаем папку SPEC, в ней создаем файл любое_имя.*spec, в который вносим строки (опционально):
Group:
URL:
Suggests:
Requires:
Conflicts:
Provides:
Obsoletes:
AutoReqProv:
В частном случае этот файл любое_имя.*spec может быть пустым. Его наличие позволяет не использовать оригинальный spec-файл из .src.rpm.
Версия 0.0.1
#!/bin/bash
PWD=`pwd`
cd $PWD/RPM
RPM=`ls -1|grep .rpm`
ARH0=`ls -1|grep x86_64`
if [ "$ARH0" = "" ]
then
ARH0=`ls -1|grep amd64`
if [ "$ARH0" = "" ]
then
ARH=i586
else
ARH=x86_64
fi
else
ARH=x86_64
fi
cd ..
cd $PWD/SRPM
SRPM=`ls -1|grep .src.rpm`
cd ..
cd $PWD/RPM
# распаковываем rpm-пакет, создаем для него автоматически spec-файл c конвертированными скриптами через alien
alien --to-rpm -g --scripts $PWD/$RPM
DIR=`ls -1p|grep /|cut -d "/" --fields=1`
SPEC=`ls $DIR|grep spec`
#заменяем строки в spec-файле, полученном через alien, на нужные или убираем ненужные строки
cat ./$DIR/$SPEC|sed 's/^Release:.*/Release: converted.mrc.mga2/' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed 's/^Distribution: Red Hat.*/Distribution: Mageia/' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed 's/^Buildroot:.*//' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed "s/^(Converted from a rpm package by alien.*/(Converted by rpmtorpm from \\$RPM and \\$SRPM)/" >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed 's/^Group.*//' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cd ..
cd $PWD/SRPM
#распаковываем src.rpm-пакет с целью получить из него оригинальный spec-файл
rpm2cpio $PWD/$SRPM >./tmp.cpio
cpio -i < ./tmp.cpio
REALSPEC=`ls |grep spec`
cd ..
#откидываем BuildRequires в оригинальном spec-файле
cat $PWD/SRPM/$REALSPEC|sed 's/^BuildRequires.*/BuildReq/' > $PWD/SRPM/tmp.spec
mv -f $PWD/SRPM/tmp.spec $PWD/SRPM/$REALSPEC
#берем только нужные строки из оригинального spec-файла
cat $PWD/SRPM/$REALSPEC|grep --max-count=1 Group: > $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep --max-count=1 URL: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Suggests: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Requires: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Conflicts: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Provides: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Obsoletes: >> $PWD/tmp.spec
echo Source: $SRPM >> $PWD/tmp.spec
#перемещаем в первые позиции spec-файла Name, Version, Release
cat $PWD/RPM/$DIR/$SPEC >> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
RELEASE=`cat $PWD/RPM/$DIR/$SPEC|grep Release:|awk '{print $2}'`
echo Release: $RELEASE > $PWD/tmp.spec
cat $PWD/RPM/$DIR/$SPEC|sed 's/^Release:.*//'>> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
VERSION=`cat $PWD/RPM/$DIR/$SPEC|grep Version:|awk '{print $2}'`
echo Version: $VERSION > $PWD/tmp.spec
cat $PWD/RPM/$DIR/$SPEC|sed 's/^Version:.*//'>> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
NAME=`cat $PWD/RPM/$DIR/$SPEC|grep Name:|awk '{print $2}'`
echo Name: $NAME > $PWD/tmp.spec
cat $PWD/RPM/$DIR/$SPEC|sed 's/^Name:.*//'>> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
#обращаемся в $HOME
mkdir -p $HOME/rpmbuild/{BUILD,RPMS,SOURCES,SRPMS,SPECS}
cp -f $PWD/SRPM/$SRPM $HOME/rpmbuild/SOURCES
#собираем пакет из получившегося результирующего spec-файла
if [ $ARH = "x86_64" ]
then
cd $PWD/RPM/$DIR; rpmbuild --buildroot=`pwd` -ba --target x86_64 $SPEC
else
cd $PWD/RPM/$DIR; rpmbuild --buildroot=`pwd` -ba --target i586 $SPEC
fi
cd ..
cd ..
#прибираемся и расскладываем всё по местам
mkdir MGA
rm -f $HOME/rpmbuild/SOURCES/$SRPM
rm -rf $PWD/RPM/$DIR
rm -f $PWD/SRPM/*.cpio
rm -f $PWD/SRPM/*.spec
rm -f $PWD/SRPM/*.tar.*
rm -f $PWD/SRPM/*.patch
mv -vf $PWD/RPM/*mrc.mga* $PWD/MGA
mv -f $HOME/rpmbuild/SRPMS/*mrc.mga* $PWD/MGA
Версия 0.0.2
#!/bin/bash
#checking dependencies alien, rpm-build
#проверка установлены ли зависимости alien, rpm-build
ALIEN=`which alien`
if [ "$ALIEN" = "" ]
then
echo Please install package alien
echo Пожалуйста, установите пакет alien
exit 1
fi
RPMBUILD=`which rpmbuild`
if [ "$RPMBUILD" = "" ]
then
echo Please install package rpm-build
echo Пожалуйста, установите пакет rpm-build
exit 1
fi
PWD=`pwd`
cd $PWD/RPM
RPM=`ls -1|grep .rpm`
if [ "$RPM" = "" ]
then
echo No .rpm in directory RPM
echo Не найдено .rpm в каталоге RPM
exit 1
else
RPM0=`ls -1|grep .src.rpm`
if [ ! "$RPM0" = "" ]
then
echo Error: there is .src.rpm in directory RPM
echo Ошибка: .src.rpm не может находиться в директории RPM
exit 1
fi
fi
ARH0=`ls -1|grep x86_64`
if [ "$ARH0" = "" ]
then
ARH0=`ls -1|grep amd64`
if [ "$ARH0" = "" ]
then
ARH=i586
else
ARH=x86_64
fi
else
ARH=x86_64
fi
cd ..
cd $PWD/SRPM
NUM=`ls |wc -l`
if [ "$NUM" = "0" ]
then
echo No file in directory SRPM
echo В директории SRPM пусто
exit 1
fi
if [ ! "$NUM" = "1" ]
then
echo In directory SRPM must be only one file
echo В директории SRPM может находиться только один файл
exit 1
fi
SRPM=`ls -1|grep .src.rpm`
if [ "$SRPM" = "" ]
then
echo No .src.rpm in directory SRPM
echo Не найдено .src.rpm в каталоге SRPM
exit 1
fi
cd ..
cd $PWD/RPM
NUM=`ls |wc -l`
if [ "$NUM" = "0" ]
then
echo No file in directory RPM
echo В директории RPM пусто
exit 1
fi
if [ ! "$NUM" = "1" ]
then
echo In directory RPM must be only one file
echo В директории RPM может находиться только один файл
exit 1
fi
#unpack the rpm-package, automatically create a spec-file for it with scripts converted by alien
#распаковываем rpm-пакет, создаем для него автоматически spec-файл c конвертированными скриптами через alien
alien --to-rpm -g --scripts $PWD/$RPM
DIR=`ls -1p|grep /|cut -d "/" --fields=1`
SPEC=`ls $DIR|grep spec`
if [ "$SPEC" = "" ]
then
echo Error to make spec file from rpm via alien
echo Ошибка создания spec-файла из пакета rpm через alien
exit 1
fi
#replace the line in the spec-file, what was made by alien, on the right lines, or remove unnecessary lines
#заменяем строки в spec-файле, полученном через alien, на нужные или убираем ненужные строки
cat ./$DIR/$SPEC|sed 's/^Release:.*/Release: converted.mrc.mga2/' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed 's/^Distribution: Red Hat.*/Distribution: Mageia/' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed 's/^Buildroot:.*//' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed "s/^(Converted from a rpm package by alien.*/(Converted by rpmtorpm from \\$RPM and \\$SRPM)/" >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed 's/^Group.*//' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cd ..
cd $PWD/SRPM
#unpack the package .src.rpm for getting from it the original spec-file
#распаковываем .src.rpm-пакет с целью получить из него оригинальный spec-файл
rpm2cpio $PWD/$SRPM >./tmp.cpio
cpio -i < ./tmp.cpio
REALSPEC=`ls |grep spec`
if [ "$REALSPEC" = "" ]
then
echo Error to get spec file from .src.rpm
echo Ошибка получения spec-файла из .src.rpm
exit 1
fi
cd ..
#discard BuildRequires in the original spec-file
#откидываем BuildRequires в оригинальном spec-файле
cat $PWD/SRPM/$REALSPEC|sed 's/^BuildRequires.*/BuildReq/' > $PWD/SRPM/tmp.spec
mv -f $PWD/SRPM/tmp.spec $PWD/SRPM/$REALSPEC
#take only the required lines from the original spec-file
#берем только нужные строки из оригинального spec-файла
cat $PWD/SRPM/$REALSPEC|grep --max-count=1 Group: > $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep --max-count=1 URL: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Suggests: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Requires: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Conflicts: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Provides: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Obsoletes: >> $PWD/tmp.spec
echo Source: $SRPM >> $PWD/tmp.spec
#move into first position spec-file: Name, Version, Release
#перемещаем в первые позиции spec-файла: Name, Version, Release
cat $PWD/RPM/$DIR/$SPEC >> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
RELEASE=`cat $PWD/RPM/$DIR/$SPEC|grep Release:|awk '{print $2}'`
echo Release: $RELEASE > $PWD/tmp.spec
cat $PWD/RPM/$DIR/$SPEC|sed 's/^Release:.*//'>> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
VERSION=`cat $PWD/RPM/$DIR/$SPEC|grep Version:|awk '{print $2}'`
echo Version: $VERSION > $PWD/tmp.spec
cat $PWD/RPM/$DIR/$SPEC|sed 's/^Version:.*//'>> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
NAME=`cat $PWD/RPM/$DIR/$SPEC|grep Name:|awk '{print $2}'`
echo Name: $NAME > $PWD/tmp.spec
cat $PWD/RPM/$DIR/$SPEC|sed 's/^Name:.*//'>> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
#looking in $HOME
#обращаемся в $HOME
mkdir -p $HOME/rpmbuild/{BUILD,RPMS,SOURCES,SRPMS,SPECS}
cp -f $PWD/SRPM/$SRPM $HOME/rpmbuild/SOURCES
mkdir /$PWD/MGA > /dev/null 2>&1
cp -f $PWD/RPM/$DIR/$SPEC /$PWD/MGA
#build a package from the resulting spec-file
#собираем пакет из получившегося результирующего spec-файла
if [ $ARH = "x86_64" ]
then
cd $PWD/RPM/$DIR; rpmbuild --buildroot=`pwd` -ba --target x86_64 $SPEC
else
cd $PWD/RPM/$DIR; rpmbuild --buildroot=`pwd` -ba --target i586 $SPEC
fi
cd ..
cd ..
#check the result
#проверяем итог
RPMMRCMGA=`ls $PWD/RPM|grep mrc.mga`
#clean up and move all to the places
#прибираемся и раскладываем всё по местам
rm -f $HOME/rpmbuild/SOURCES/$SRPM > /dev/null 2>&1
rm -rf $PWD/RPM/$DIR > /dev/null 2>&1
mv -f $PWD/RPM/*rpm $PWD/MGA/ > /dev/null 2>&1
mv -f $PWD/SRPM/*src.rpm $PWD/MGA/ > /dev/null 2>&1
mv -f $HOME/rpmbuild/SRPMS/*mrc.mga* $PWD/MGA/ > /dev/null 2>&1
rm -f $PWD/RPM/* > /dev/null 2>&1
rm -f $PWD/SRPM/* > /dev/null 2>&1
rm -f $PWD/*spec > /dev/null 2>&1
echo
if [ "$RPMMRCMGA" = "" ]
then
echo Failed to convert the rpm package. Spec-file was copied into a directory MGA, analyze it.
echo Не удалось сконвертировать rpm пакет. Spec-файл был скопирован в директорию MGA, проанализируйте его.
else
echo It was possible to convert the rpm-package, but it does not mean that it is working. The package needs to be fully tested.
echo Удалось сконвертировать rpm-пакет, но это еще не означает, что он работоспособен. Требуется его детальное тестирование.
fi
Версия 0.0.3
#!/bin/bash
#checking dependencies alien, rpm-build
#проверка установлены ли зависимости alien, rpm-build
ALIEN=`which alien`
if [ "$ALIEN" = "" ]
then
echo Please install package alien
echo Пожалуйста, установите пакет alien
exit 1
fi
RPMBUILD=`which rpmbuild`
if [ "$RPMBUILD" = "" ]
then
echo Please install package rpm-build
echo Пожалуйста, установите пакет rpm-build
exit 1
fi
PWD=`pwd`
cd $PWD/RPM
RPM=`ls -1|grep .rpm`
if [ "$RPM" = "" ]
then
echo No .rpm in directory RPM
echo Не найдено .rpm в каталоге RPM
exit 1
else
RPM0=`ls -1|grep .src.rpm`
if [ ! "$RPM0" = "" ]
then
echo Error: there is .src.rpm in directory RPM
echo Ошибка: .src.rpm не может находиться в директории RPM
exit 1
fi
fi
ARH0=`ls -1|grep x86_64`
if [ "$ARH0" = "" ]
then
ARH0=`ls -1|grep amd64`
if [ "$ARH0" = "" ]
then
ARH=i586
else
ARH=x86_64
fi
else
ARH=x86_64
fi
cd ..
cd $PWD/SRPM
NUM=`ls |wc -l`
if [ "$NUM" = "0" ]
then
echo No file in directory SRPM
echo В директории SRPM пусто
exit 1
fi
if [ ! "$NUM" = "1" ]
then
echo In directory SRPM must be only one file
echo В директории SRPM может находиться только один файл
exit 1
fi
SRPM=`ls -1|grep .src.rpm`
if [ "$SRPM" = "" ]
then
echo No .src.rpm in directory SRPM
echo Не найдено .src.rpm в каталоге SRPM
exit 1
fi
cd ..
cd $PWD/RPM
NUM=`ls |wc -l`
if [ "$NUM" = "0" ]
then
echo No file in directory RPM
echo В директории RPM пусто
exit 1
fi
if [ ! "$NUM" = "1" ]
then
echo In directory RPM must be only one file
echo В директории RPM может находиться только один файл
exit 1
fi
cd ..
if [ -d $PWD/SPEC ]
then
cd $PWD/SPEC
USERSPEC=`ls -1|grep .spec`
if [ ! "$USERSPEC" = "" ]
then
mv -f $USERSPEC head.spec
fi
USERSPEC=`ls -1|grep .spec`
cd ..
fi
cd $PWD/RPM
#unpack the rpm-package, automatically create a spec-file for it with scripts converted by alien
#распаковываем rpm-пакет, создаем для него автоматически spec-файл c конвертированными скриптами через alien
alien --to-rpm -g --scripts $PWD/$RPM
DIR=`ls -1p|grep /|cut -d "/" --fields=1`
SPEC=`ls $DIR|grep spec`
if [ "$SPEC" = "" ]
then
echo Error to make spec file from rpm via alien
echo Ошибка создания spec-файла из пакета rpm через alien
exit 1
fi
#replace the line in the spec-file, what was made by alien, on the right lines, or remove unnecessary lines
#заменяем строки в spec-файле, полученном через alien, на нужные или убираем ненужные строки
cat ./$DIR/$SPEC|sed 's/^Release:.*/Release: converted.mrc.mga2/' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed 's/^Distribution: Red Hat.*/Distribution: Mageia/' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed 's/^Buildroot:.*//' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed "s/^(Converted from a rpm package by alien.*/(Converted by rpmtorpm from \\$RPM and \\$SRPM)/" >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed 's/^Group.*//' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cd ..
cd $PWD/SRPM
#unpack the package .src.rpm for getting from it the original spec-file
#распаковываем .src.rpm-пакет с целью получить из него оригинальный spec-файл
rpm2cpio $PWD/$SRPM >./tmp.cpio
cpio -i < ./tmp.cpio
REALSPEC=`ls |grep spec`
if [ "$REALSPEC" = "" ]
then
echo Error to get spec file from .src.rpm
echo Ошибка получения spec-файла из .src.rpm
exit 1
fi
cd ..
#discard BuildRequires in the original spec-file
#откидываем BuildRequires в оригинальном spec-файле
cat $PWD/SRPM/$REALSPEC|sed 's/^BuildRequires.*/BuildReq/' > $PWD/SRPM/tmp.spec
mv -f $PWD/SRPM/tmp.spec $PWD/SRPM/$REALSPEC
if [ "$USERSPEC" = "" ]
then
#take only the required lines from the original spec-file
#берем только нужные строки из оригинального spec-файла
cat $PWD/SRPM/$REALSPEC|grep --max-count=1 Group: > $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep --max-count=1 URL: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Suggests: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Requires: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Conflicts: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Provides: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Obsoletes: >> $PWD/tmp.spec
else
#take only the required lines from the user spec-file
#берем только нужные строки из пользовательского spec-файла
cat $PWD/SPEC/$USERSPEC|grep --max-count=1 Group: > $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep --max-count=1 URL: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep Suggests: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep Requires: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep Conflicts: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep Provides: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep Obsoletes: >> $PWD/tmp.spec
echo Source100: $USERSPEC >> $PWD/tmp.spec
fi
echo Source: $SRPM >> $PWD/tmp.spec
#move into first position spec-file: Name, Version, Release
#перемещаем в первые позиции spec-файла: Name, Version, Release
cat $PWD/RPM/$DIR/$SPEC >> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
RELEASE=`cat $PWD/RPM/$DIR/$SPEC|grep Release:|awk '{print $2}'`
echo Release: $RELEASE > $PWD/tmp.spec
cat $PWD/RPM/$DIR/$SPEC|sed 's/^Release:.*//'>> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
VERSION=`cat $PWD/RPM/$DIR/$SPEC|grep Version:|awk '{print $2}'`
echo Version: $VERSION > $PWD/tmp.spec
cat $PWD/RPM/$DIR/$SPEC|sed 's/^Version:.*//'>> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
NAME=`cat $PWD/RPM/$DIR/$SPEC|grep Name:|awk '{print $2}'`
echo Name: $NAME > $PWD/tmp.spec
cat $PWD/RPM/$DIR/$SPEC|sed 's/^Name:.*//'>> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
#looking in $HOME
#обращаемся в $HOME
mkdir -p $HOME/rpmbuild/{BUILD,RPMS,SOURCES,SRPMS,SPECS}
cp -f $PWD/SRPM/$SRPM $HOME/rpmbuild/SOURCES
if [ ! "$USERSPEC" = "" ]
then
cp -f $PWD/SPEC/$USERSPEC $HOME/rpmbuild/SOURCES
fi
mkdir /$PWD/MGA > /dev/null 2>&1
cp -f $PWD/RPM/$DIR/$SPEC /$PWD/MGA
#build a package from the resulting spec-file
#собираем пакет из получившегося результирующего spec-файла
if [ $ARH = "x86_64" ]
then
cd $PWD/RPM/$DIR; rpmbuild --buildroot=`pwd` -ba --target x86_64 $SPEC
else
cd $PWD/RPM/$DIR; rpmbuild --buildroot=`pwd` -ba --target i586 $SPEC
fi
cd ..
cd ..
#check the result
#проверяем итог
RPMMRCMGA=`ls $PWD/RPM|grep mrc.mga`
#clean up and move all to the places
#прибираемся и раскладываем всё по местам
rm -f $HOME/rpmbuild/SOURCES/$SRPM > /dev/null 2>&1
rm -rf $PWD/RPM/$DIR > /dev/null 2>&1
mv -f $PWD/RPM/*rpm $PWD/MGA/ > /dev/null 2>&1
mv -f $PWD/SRPM/*src.rpm $PWD/MGA/ > /dev/null 2>&1
mv -f $PWD/SPEC/*.spec $PWD/MGA/ > /dev/null 2>&1
mv -f $HOME/rpmbuild/SRPMS/*mrc.mga* $PWD/MGA/ > /dev/null 2>&1
rm -f $PWD/RPM/* > /dev/null 2>&1
rm -f $PWD/SRPM/* > /dev/null 2>&1
rm -f $PWD/*spec > /dev/null 2>&1
echo
if [ "$RPMMRCMGA" = "" ]
then
echo Failed to convert the rpm package. Spec-file was copied into a directory MGA, analyze it.
echo Не удалось сконвертировать rpm пакет. Spec-файл был скопирован в директорию MGA, проанализируйте его.
else
echo It was possible to convert the rpm-package, but it does not mean that it is working. The package needs to be fully tested.
echo Удалось сконвертировать rpm-пакет, но это еще не означает, что он работоспособен. Требуется его детальное тестирование.
fi
Версия 0.0.4
#!/bin/bash
#checking dependencies alien, rpm-build
#проверка установлены ли зависимости alien, rpm-build
ALIEN=`which alien`
if [ "$ALIEN" = "" ]
then
echo Please install package alien
echo Пожалуйста, установите пакет alien
exit 1
fi
RPMBUILD=`which rpmbuild`
if [ "$RPMBUILD" = "" ]
then
echo Please install package rpm-build
echo Пожалуйста, установите пакет rpm-build
exit 1
fi
PWD=`pwd`
cd $PWD/RPM
RPM=`ls -1|grep .rpm`
if [ "$RPM" = "" ]
then
echo No .rpm in directory RPM
echo Не найдено .rpm в каталоге RPM
exit 1
else
RPM0=`ls -1|grep .src.rpm`
if [ ! "$RPM0" = "" ]
then
echo Error: there is .src.rpm in directory RPM
echo Ошибка: .src.rpm не может находиться в директории RPM
exit 1
fi
fi
ARH0=`ls -1|grep noarch`
if [ "$ARH0" = "" ]
then
ARH0=`ls -1|grep x86_64`
if [ "$ARH0" = "" ]
then
ARH0=`ls -1|grep amd64`
if [ "$ARH0" = "" ]
then
ARH=i586
else
ARH=x86_64
fi
else
ARH=x86_64
fi
else
ARH=noarch
fi
cd ..
cd $PWD/SRPM
NUM=`ls |wc -l`
if [ "$NUM" = "0" ]
then
echo No file in directory SRPM
echo В директории SRPM пусто
exit 1
fi
if [ ! "$NUM" = "1" ]
then
echo In directory SRPM must be only one file
echo В директории SRPM может находиться только один файл
exit 1
fi
SRPM=`ls -1|grep .src.rpm`
if [ "$SRPM" = "" ]
then
echo No .src.rpm in directory SRPM
echo Не найдено .src.rpm в каталоге SRPM
exit 1
fi
cd ..
cd $PWD/RPM
NUM=`ls |wc -l`
if [ "$NUM" = "0" ]
then
echo No file in directory RPM
echo В директории RPM пусто
exit 1
fi
if [ ! "$NUM" = "1" ]
then
echo In directory RPM must be only one file
echo В директории RPM может находиться только один файл
exit 1
fi
cd ..
if [ -d $PWD/SPEC ]
then
cd $PWD/SPEC
USERSPEC=`ls -1|grep .spec`
if [ ! "$USERSPEC" = "" ]
then
mv -f $USERSPEC head.spec
fi
USERSPEC=`ls -1|grep .spec`
cd ..
fi
cd $PWD/RPM
#unpack the rpm-package, automatically create a spec-file for it with scripts converted by alien
#распаковываем rpm-пакет, создаем для него автоматически spec-файл c конвертированными скриптами через alien
alien --to-rpm -g --scripts $PWD/$RPM
DIR=`ls -1p|grep /|cut -d "/" --fields=1`
SPEC=`ls $DIR|grep spec`
if [ "$SPEC" = "" ]
then
echo Error to make spec file from rpm via alien
echo Ошибка создания spec-файла из пакета rpm через alien
exit 1
fi
#replace the line in the spec-file, what was made by alien, on the right lines, or remove unnecessary lines
#заменяем строки в spec-файле, полученном через alien, на нужные или убираем ненужные строки
cat ./$DIR/$SPEC|sed 's/^Release:.*/Release: converted.mrc.mga2/' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed 's/^Distribution: Red Hat.*/Distribution: Mageia/' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed 's/^Buildroot:.*//' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed "s/^(Converted from a rpm package by alien.*/(Converted by rpmtorpm from \\$RPM and \\$SRPM)/" >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed 's/^Group.*//' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cd ..
cd $PWD/SRPM
#unpack the package .src.rpm for getting from it the original spec-file
#распаковываем .src.rpm-пакет с целью получить из него оригинальный spec-файл
rpm2cpio $PWD/$SRPM >./tmp.cpio
cpio -i < ./tmp.cpio
REALSPEC=`ls |grep spec`
if [ "$REALSPEC" = "" ]
then
echo Error to get spec file from .src.rpm
echo Ошибка получения spec-файла из .src.rpm
exit 1
fi
cd ..
#discard BuildRequires in the original spec-file
#откидываем BuildRequires в оригинальном spec-файле
cat $PWD/SRPM/$REALSPEC|sed 's/^BuildRequires.*/BuildReq/' > $PWD/SRPM/tmp.spec
mv -f $PWD/SRPM/tmp.spec $PWD/SRPM/$REALSPEC
if [ "$USERSPEC" = "" ]
then
#take only the required lines from the original spec-file
#берем только нужные строки из оригинального spec-файла
cat $PWD/SRPM/$REALSPEC|grep --max-count=1 Group: > $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep --max-count=1 URL: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Suggests: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Requires: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Conflicts: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Provides: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Obsoletes: >> $PWD/tmp.spec
else
#take only the required lines from the user spec-file
#берем только нужные строки из пользовательского spec-файла
cat $PWD/SPEC/$USERSPEC|grep --max-count=1 Group: > $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep --max-count=1 URL: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep Suggests: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep Requires: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep Conflicts: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep Provides: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep Obsoletes: >> $PWD/tmp.spec
echo Source100: $USERSPEC >> $PWD/tmp.spec
fi
echo Source: $SRPM >> $PWD/tmp.spec
#move into first position spec-file: Name, Version, Release
#перемещаем в первые позиции spec-файла: Name, Version, Release
cat $PWD/RPM/$DIR/$SPEC >> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
RELEASE=`cat $PWD/RPM/$DIR/$SPEC|grep Release:|awk '{print $2}'`
echo Release: $RELEASE > $PWD/tmp.spec
cat $PWD/RPM/$DIR/$SPEC|sed 's/^Release:.*//'>> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
VERSION=`cat $PWD/RPM/$DIR/$SPEC|grep Version:|awk '{print $2}'`
echo Version: $VERSION > $PWD/tmp.spec
cat $PWD/RPM/$DIR/$SPEC|sed 's/^Version:.*//'>> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
NAME=`cat $PWD/RPM/$DIR/$SPEC|grep Name:|awk '{print $2}'`
echo Name: $NAME > $PWD/tmp.spec
cat $PWD/RPM/$DIR/$SPEC|sed 's/^Name:.*//'>> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
#looking in $HOME
#обращаемся в $HOME
mkdir -p $HOME/rpmbuild/{BUILD,RPMS,SOURCES,SRPMS,SPECS}
cp -f $PWD/SRPM/$SRPM $HOME/rpmbuild/SOURCES
if [ ! "$USERSPEC" = "" ]
then
cp -f $PWD/SPEC/$USERSPEC $HOME/rpmbuild/SOURCES
fi
mkdir /$PWD/MGA > /dev/null 2>&1
cp -f $PWD/RPM/$DIR/$SPEC /$PWD/MGA
#build a package from the resulting spec-file
#собираем пакет из получившегося результирующего spec-файла
if [ $ARH = "x86_64" ]
then
cd $PWD/RPM/$DIR; rpmbuild --buildroot=`pwd` -ba --target x86_64 $SPEC
fi
if [ $ARH = "i586" ]
then
cd $PWD/RPM/$DIR; rpmbuild --buildroot=`pwd` -ba --target i586 $SPEC
fi
if [ $ARH = "noarch" ]
then
cd $PWD/RPM/$DIR; rpmbuild --buildroot=`pwd` -ba --target noarch $SPEC
fi
cd ..
cd ..
#check the result
#проверяем итог
RPMMRCMGA=`ls $PWD/RPM|grep mrc.mga`
#clean up and move all to the places
#прибираемся и раскладываем всё по местам
rm -f $HOME/rpmbuild/SOURCES/$SRPM > /dev/null 2>&1
if [ ! "$USERSPEC" = "" ]
then
rm -f $HOME/rpmbuild/SOURCES/$USERSPEC > /dev/null 2>&1
fi
rm -rf $PWD/RPM/$DIR > /dev/null 2>&1
mv -f $PWD/RPM/*rpm $PWD/MGA/ > /dev/null 2>&1
mv -f $PWD/SRPM/*src.rpm $PWD/MGA/ > /dev/null 2>&1
mv -f $PWD/SPEC/*.spec $PWD/MGA/ > /dev/null 2>&1
mv -f $HOME/rpmbuild/SRPMS/*mrc.mga* $PWD/MGA/ > /dev/null 2>&1
rm -f $PWD/RPM/* > /dev/null 2>&1
rm -f $PWD/SRPM/* > /dev/null 2>&1
rm -f $PWD/*spec > /dev/null 2>&1
echo
if [ "$RPMMRCMGA" = "" ]
then
echo Failed to convert the rpm package. Spec-file was copied into a directory MGA, analyze it.
echo Не удалось сконвертировать rpm пакет. Spec-файл был скопирован в директорию MGA, проанализируйте его.
else
echo It was possible to convert the rpm-package, but it does not mean that it is working. The package needs to be fully tested.
echo Удалось сконвертировать rpm-пакет, но это еще не означает, что он работоспособен. Требуется его детальное тестирование.
fi
Версия 0.0.5
#!/bin/bash
#checking dependencies alien, rpm-build
#проверка установлены ли зависимости alien, rpm-build
ALIEN=`which alien`
if [ "$ALIEN" = "" ]
then
echo Please install package alien
echo Пожалуйста, установите пакет alien
exit 1
fi
RPMBUILD=`which rpmbuild`
if [ "$RPMBUILD" = "" ]
then
echo Please install package rpm-build
echo Пожалуйста, установите пакет rpm-build
exit 1
fi
PWD=`pwd`
cd $PWD/RPM
RPM=`ls -1|grep .rpm`
if [ "$RPM" = "" ]
then
echo No .rpm in directory RPM
echo Не найдено .rpm в каталоге RPM
exit 1
else
RPM0=`ls -1|grep .src.rpm`
if [ ! "$RPM0" = "" ]
then
echo Error: there is .src.rpm in directory RPM
echo Ошибка: .src.rpm не может находиться в директории RPM
exit 1
fi
fi
ARH0=`ls -1|grep noarch`
if [ "$ARH0" = "" ]
then
ARH0=`ls -1|grep x86_64`
if [ "$ARH0" = "" ]
then
ARH0=`ls -1|grep amd64`
if [ "$ARH0" = "" ]
then
ARH=i586
else
ARH=x86_64
fi
else
ARH=x86_64
fi
else
ARH=noarch
fi
cd ..
cd $PWD/SRPM
NUM=`ls |wc -l`
if [ "$NUM" = "0" ]
then
echo No file in directory SRPM
echo В директории SRPM пусто
exit 1
fi
if [ ! "$NUM" = "1" ]
then
echo In directory SRPM must be only one file
echo В директории SRPM может находиться только один файл
exit 1
fi
SRPM=`ls -1|grep .src.rpm`
if [ "$SRPM" = "" ]
then
echo No .src.rpm in directory SRPM
echo Не найдено .src.rpm в каталоге SRPM
exit 1
fi
cd ..
cd $PWD/RPM
NUM=`ls |wc -l`
if [ "$NUM" = "0" ]
then
echo No file in directory RPM
echo В директории RPM пусто
exit 1
fi
if [ ! "$NUM" = "1" ]
then
echo In directory RPM must be only one file
echo В директории RPM может находиться только один файл
exit 1
fi
cd ..
if [ -d $PWD/SPEC ]
then
cd $PWD/SPEC
USERSPEC=`ls -1|grep .spec`
if [ ! "$USERSPEC" = "" ]
then
mv -f $USERSPEC head.spec
fi
USERSPEC=`ls -1|grep .spec`
cd ..
fi
cd $PWD/RPM
#unpack the rpm-package, automatically create a spec-file for it with scripts converted by alien
#распаковываем rpm-пакет, создаем для него автоматически spec-файл c конвертированными скриптами через alien
alien --to-rpm -g --scripts $PWD/$RPM
DIR=`ls -1p|grep /|cut -d "/" --fields=1`
SPEC=`ls $DIR|grep spec`
if [ "$SPEC" = "" ]
then
echo Error to make spec file from rpm via alien
echo Ошибка создания spec-файла из пакета rpm через alien
exit 1
fi
#replace the line in the spec-file, what was made by alien, on the right lines, or remove unnecessary lines
#заменяем строки в spec-файле, полученном через alien, на нужные или убираем ненужные строки
cat ./$DIR/$SPEC|sed 's/^Release:.*/Release: converted.mrc.mga2/' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed 's/^Distribution: Red Hat.*/Distribution: Mageia/' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed 's/^Buildroot:.*//' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed "s/^(Converted from a rpm package by alien.*/(Converted by rpmtorpm from \\$RPM and \\$SRPM)/" >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cat ./$DIR/$SPEC|sed 's/^Group.*//' >./$DIR/tmp.spec
mv -f ./$DIR/tmp.spec ./$DIR/$SPEC
cd ..
cd $PWD/SRPM
#unpack the package .src.rpm for getting from it the original spec-file
#распаковываем .src.rpm-пакет с целью получить из него оригинальный spec-файл
rpm2cpio $PWD/$SRPM >./tmp.cpio
cpio -i < ./tmp.cpio
REALSPEC=`ls |grep spec`
if [ "$REALSPEC" = "" ]
then
echo Error to get spec file from .src.rpm
echo Ошибка получения spec-файла из .src.rpm
exit 1
fi
cd ..
#discard BuildRequires in the original spec-file
#откидываем BuildRequires в оригинальном spec-файле
cat $PWD/SRPM/$REALSPEC|sed 's/^BuildRequires.*/BuildReq/' > $PWD/SRPM/tmp.spec
mv -f $PWD/SRPM/tmp.spec $PWD/SRPM/$REALSPEC
if [ "$USERSPEC" = "" ]
then
#take only the required lines from the original spec-file
#берем только нужные строки из оригинального spec-файла
cat $PWD/SRPM/$REALSPEC|grep --max-count=1 Group: > $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep --max-count=1 URL: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Suggests: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Requires: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Conflicts: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Provides: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep Obsoletes: >> $PWD/tmp.spec
cat $PWD/SRPM/$REALSPEC|grep AutoReqProv: >> $PWD/tmp.spec
else
#take only the required lines from the user spec-file
#берем только нужные строки из пользовательского spec-файла
cat $PWD/SPEC/$USERSPEC|grep --max-count=1 Group: > $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep --max-count=1 URL: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep Suggests: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep Requires: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep Conflicts: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep Provides: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep Obsoletes: >> $PWD/tmp.spec
cat $PWD/SPEC/$USERSPEC|grep AutoReqProv: >> $PWD/tmp.spec
echo Source100: $USERSPEC >> $PWD/tmp.spec
fi
echo Source: $SRPM >> $PWD/tmp.spec
#move into first position spec-file: Name, Version, Release
#перемещаем в первые позиции spec-файла: Name, Version, Release
cat $PWD/RPM/$DIR/$SPEC >> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
RELEASE=`cat $PWD/RPM/$DIR/$SPEC|grep Release:|awk '{print $2}'`
echo Release: $RELEASE > $PWD/tmp.spec
cat $PWD/RPM/$DIR/$SPEC|sed 's/^Release:.*//'>> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
VERSION=`cat $PWD/RPM/$DIR/$SPEC|grep Version:|awk '{print $2}'`
echo Version: $VERSION > $PWD/tmp.spec
cat $PWD/RPM/$DIR/$SPEC|sed 's/^Version:.*//'>> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
NAME=`cat $PWD/RPM/$DIR/$SPEC|grep Name:|awk '{print $2}'`
echo Name: $NAME > $PWD/tmp.spec
cat $PWD/RPM/$DIR/$SPEC|sed 's/^Name:.*//'>> $PWD/tmp.spec
mv -f $PWD/tmp.spec $PWD/RPM/$DIR/$SPEC
#looking in $HOME
#обращаемся в $HOME
mkdir -p $HOME/rpmbuild/{BUILD,RPMS,SOURCES,SRPMS,SPECS}
cp -f $PWD/SRPM/$SRPM $HOME/rpmbuild/SOURCES
if [ ! "$USERSPEC" = "" ]
then
cp -f $PWD/SPEC/$USERSPEC $HOME/rpmbuild/SOURCES
fi
mkdir /$PWD/MGA > /dev/null 2>&1
cp -f $PWD/RPM/$DIR/$SPEC /$PWD/MGA
#build a package from the resulting spec-file
#собираем пакет из получившегося результирующего spec-файла
if [ $ARH = "x86_64" ]
then
cd $PWD/RPM/$DIR; rpmbuild --buildroot=`pwd` -ba --target x86_64 $SPEC
fi
if [ $ARH = "i586" ]
then
cd $PWD/RPM/$DIR; rpmbuild --buildroot=`pwd` -ba --target i586 $SPEC
fi
if [ $ARH = "noarch" ]
then
cd $PWD/RPM/$DIR; rpmbuild --buildroot=`pwd` -ba --target noarch $SPEC
fi
cd ..
cd ..
#check the result
#проверяем итог
RPMMRCMGA=`ls $PWD/RPM|grep mrc.mga`
#clean up and move all to the places
#прибираемся и раскладываем всё по местам
rm -f $HOME/rpmbuild/SOURCES/$SRPM > /dev/null 2>&1
if [ ! "$USERSPEC" = "" ]
then
rm -f $HOME/rpmbuild/SOURCES/$USERSPEC > /dev/null 2>&1
fi
rm -rf $PWD/RPM/$DIR > /dev/null 2>&1
mv -f $PWD/RPM/*rpm $PWD/MGA/ > /dev/null 2>&1
mv -f $PWD/SRPM/*src.rpm $PWD/MGA/ > /dev/null 2>&1
mv -f $PWD/SPEC/*.spec $PWD/MGA/ > /dev/null 2>&1
mv -f $HOME/rpmbuild/SRPMS/*mrc.mga* $PWD/MGA/ > /dev/null 2>&1
rm -f $PWD/RPM/* > /dev/null 2>&1
rm -f $PWD/SRPM/* > /dev/null 2>&1
rm -f $PWD/*spec > /dev/null 2>&1
echo
if [ "$RPMMRCMGA" = "" ]
then
echo Failed to convert the rpm package. Spec-file was copied into a directory MGA, analyze it.
echo Не удалось сконвертировать rpm пакет. Spec-файл был скопирован в директорию MGA, проанализируйте его.
else
echo It was possible to convert the rpm-package, but it does not mean that it is working. The package needs to be fully tested.
echo Удалось сконвертировать rpm-пакет, но это еще не означает, что он работоспособен. Требуется его детальное тестирование.
fi
Принимаются замечания по улучшению конвертера rpmtorpm.