1 (2012-08-29 16:03:33 отредактировано romkaromka)

Очень часто мы сталкивается с тем, что пакет для 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.
Конвертировать можно пакеты любой архитектуры в любой архитектуре дистрибутива.
http://forum.mageia.org.ru/extensions/hcs_image_uploader/uploads/0/1500/1888/thumb/p1759ldk8s1jtk8228u7rjf1if71.jpeg
Если пакет не удалось сконвертировать, то создаем папку SPEC, в ней создаем файл любое_имя.*spec, в который вносим строки (опционально):

Group:
URL:
Suggests:
Requires:
Conflicts:
Provides:
Obsoletes:
AutoReqProv:

В частном случае этот файл любое_имя.*spec может быть пустым. Его наличие позволяет не использовать оригинальный spec-файл из .src.rpm.

Версия 0.0.1

Spoiler

#!/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

Spoiler

#!/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

Spoiler

#!/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

Spoiler

#!/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

Spoiler

#!/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.

Аккаунт отключен по просьбе пользователя. (28.12.2014)
Спасибо сказали: Gnom, Mageiafriend, xxblx3

2

Попробую сегодня вечером протестировать.

Mageia5, KDE  4.14.5

3

romkaromka пишет:

там же будет использовавшийся spec-файл для сборки этого пакета.

Только готовый пакет, spec-файла нет.

Mageia5, KDE  4.14.5

4 (2012-07-22 18:22:15 отредактировано romkaromka)

Я скрипт обновлял, проверьте, должен быть spec.
Буду по мере работы над ошибками вносить изменения в первый пост.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

5 (2012-07-22 18:32:45 отредактировано romkaromka)

Кто знает как из пакета rpm достать информацию: Group, URL, Suggests, Requires, Conflicts, Provides, Obsoletes и т.д.? А также скрипты postinst, preinst и т.д.?
Решение этого вопроса значительно улучшит конвертер, и не потребуется src.rpm, нужно будет только rpm.
mc всё это показывает, но надо в скрипте как-то.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

6

romkaromka пишет:

Я скрипт обновлял, проверьте, должен быть spec.

Сейчас проверю.
А как же быть с пакетами src.rpm, потом пересобирать?

Mageia5, KDE  4.14.5

7

Не создаётся

Консоль
mv: не удалось выполнить stat для «/home/user/ts/RPM/sakis3g-0.2.0e/*spec»: Нет такого файла или каталога

Mageia5, KDE  4.14.5

8

При конвертации src.rpm как таковой не используется вообще, никакой компиляции нет, просто один rpm пакет преобразовывается в другой rpm-пакет. В descriptions пишется чего использовалось для конвертации. Неоткуда взяться на выходе новому src.rpm.
Так как для сборки rpm-пакета всё же использован src.rpm, то будем считать, что для конвертации, хотя он и не нужен, но является предком. Следовательно, src.rpm просто заливается в репы. А в пакете через descriptions числится, что он является конвертированным.
Где взять rpm и src.rpm проблемные для sakis? Посмотрю.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

9

romkaromka пишет:

Кто знает как из пакета rpm достать информацию: Group, URL, Suggests, Requires, Conflicts, Provides, Obsoletes и т.д.? А также скрипты postinst, preinst и т.д.?

Посмотри вроде ответ в этом пакете: http://mib.pianetalinux.org/MIB/2010.2/ … noarch.rpm (там десктор-файл - в exec команда)
Сорцы: http://mib.pianetalinux.org/MIB/2010.2/ … .1.src.rpm (если будете добавлять в репу)

Распаковывает так:
http://storage2.static.itmages.ru/i/12/0722/s_1342972671_1281419_7e8ea30263.png

10

romkaromka пишет:

Где взять rpm и src.rpm проблемные для sakis? Посмотрю.

С реп миба брал.

Вот здесь ещё есть http://pkgs.org/search/?keyword=sakis

Mageia5, KDE  4.14.5

11

extract не дает нужной инфы, пробовал уже

Аккаунт отключен по просьбе пользователя. (28.12.2014)

12

Да, ещё такой вопрос: почему при загрузке с реп миба, src.rpm имеет вид src.src? Я их тупо переименовываю в src.rpm.

Mageia5, KDE  4.14.5

13

Gnom пишет:

Да, ещё такой вопрос: почему при загрузке с реп миба, src.rpm имеет вид src.src? Я их тупо переименовываю в src.rpm.

Нормально вроде загружаются.

14

romkaromka пишет:

extract не дает нужной инфы, пробовал уже

Дописать команду в exec в десктоп-файле. В смысле дополнить, чтобы извлекала нужную дополнительную инфу.
Эту строку:

Exec=mkdir -p %d/`echo %n | sed -e 's|.rpm$||'` && cd %d/`echo %n | sed -e 's|.rpm$||'` || exit; (rpm2cpio %d/%n | cpio -idu --quiet) && (rpm -qp --scripts %d/%n > `echo %n | sed -e 's|.rpm$||'`.scripts && rpm -qp --changelog %d/%n > `echo %n | sed -e 's|.rpm$||'`.changelog && rpm -qip %d/%n > `echo %n | sed -e 's|.rpm$||'`.info && rpm -qp --provides %d/%n > `echo %n | sed -e 's|.rpm$||'`.provides && rpm -qp --requires %d/%n > `echo %n | sed -e 's|.rpm$||'`.requires && rpm -qlp %d/%n > `echo %n | sed -e 's|.rpm$||'`.list) && (rpm -qp --queryformat "\\[Desktop Entry\\]\nType=Service\nServiceTypes=KonqPopupMenu/Plugin\nEncoding=UTF-8\nX-KDE-Priority=TopLevel\nComment=RPM: %{SUMMARY}\nActions=_SEPARATOR_;rpmfind;pbone;sourceforge;url;_SEPARATOR_;\nMimeType=inode/directory\n\n\\[Desktop Action rpmfind\\]\nIcon=kfind\nName=Search %{NAME} in RpmFind\nName\\[fr\\]=Recherche %{NAME} sur RpmFind\nExec=kfmclient newTab http://fr2.rpmfind.net/linux/rpm2html/search.php?query=%{NAME}\n\n\\[Desktop Action pbone\\]\

15

verg пишет:
Gnom пишет:

Да, ещё такой вопрос: почему при загрузке с реп миба, src.rpm имеет вид src.src? Я их тупо переименовываю в src.rpm.

Нормально вроде загружаются.

По твоей ссылке http://storage7.static.itmages.ru/i/12/0722/s_1342973036_9519138_134799f667.jpeg

Mageia5, KDE  4.14.5

16

Gnom пишет:

Да, ещё такой вопрос: почему при загрузке с реп миба, src.rpm имеет вид src.src? Я их тупо переименовываю в src.rpm.

http://storage9.static.itmages.ru/i/12/0722/s_1342973233_8070009_240fa4f69c.png

17

Я уже проверил через фокс, это только в опере, и только с реп миба.

Mageia5, KDE  4.14.5

18

Привет. Вообще эта вещь в чем-то революционная, теперь майнтейнеры будут не нужны, но зато будут нужны тестеровщики smile

Конвертнул qutim 3.0.1, все работает, в отличие от 3.0. Правда пока 32-битный.

19

Mageiafriend пишет:

Конвертнул qutim 3.0.1, все работает, в отличие от 3.0. Правда пока 32-битный.

Вот тоже вопрос, а как же быть с пакетами которые идут с qutim? Например плагины qutim-icq и т.д. Они же этим скриптом не собираются?

Mageia5, KDE  4.14.5

20

С 3-го qutim все плагины идут вместе с qutim.

Gnom пишет:
Mageiafriend пишет:

Конвертнул qutim 3.0.1, все работает, в отличие от 3.0. Правда пока 32-битный.

Вот тоже вопрос, а как же быть с пакетами которые идут с qutim? Например плагины qutim-icq и т.д. Они же этим скриптом не собираются?

21

Mageiafriend пишет:

С 3-го qutim все плагины идут вместе с qutim.

Ну есть же такие пакеты, в которых не всё в одном.

Mageia5, KDE  4.14.5

22

Тут не важно что из себя представляет пакет rpm - плагин это или нет, или либа. Всё конвертируется одинаково, так как это rpm пакет.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

23

romkaromka пишет:

Тут не важно что из себя представляет пакет rpm - плагин это или нет, или либа. Всё конвертируется одинаково, так как это rpm пакет.

Вот я сейчас попробовал xneur, вроде все получилось, но  вот там есть пакет xneur-devel-0.15.0-4.fc17.i686.rpm его надо пределовать этим скриптом?

Mageia5, KDE  4.14.5

24 (2012-07-22 20:54:16 отредактировано romkaromka)

У меня sakis3g отконвертировался нормально.
Проверьте, может чего-то не хватает из команд, использованных в скрипте: ls, grep, pwd, cd, alien, cut, mv, cat, sed, rpm2cpio, cpio, echo, rpmbuild и т.д.
Еще надо очищать директории RPM, SRPM перед конвертированием нового пакета.

Аккаунт отключен по просьбе пользователя. (28.12.2014)

25

devel можно опустить, я их в репы никогда не заливаю.

Аккаунт отключен по просьбе пользователя. (28.12.2014)