История изменений
Исправление justAmoment, (текущая версия) :
По мотивам
https://wiki.russianfedora.pro/index.php?title=Как_пересобрать_RPM-пакет
Команды # — от суперпользователя $ — от обычного пользователя
- Первоначальная подготовка:
-
# dnf install rpmdevtools dnf-plugins-core
$ rpmdev-setuptree
-
- Исходники:
$ cd ~/rpmbuild/SRPMS $ dnf download --source mc
-
$ rpm -ivh mc-4.8.19-7.fc27.src.rpm
-
Результат:
$ tree ~/rpmbuild /home/user/rpmbuild ├── BUILD ├── RPMS ├── SOURCES │ ├── Extends-TMPDIR_DEFAULT-to-mc-wrapper-scripts.patch │ ├── mc-4.8.19.tar.xz │ └── mc-tmpdir.patch ├── SPECS │ └── mc.spec └── SRPMS └── mc-4.8.19-7.fc27.src.rpm 5 directories, 5 files
- Подготовка зависимостей
# dnf builddep /home/user/rpmbuild/SPECS/mc.spec
-
Развернём исходники
$ rpmbuild -bp ~/rpmbuild/SPECS/mc.spec
-
Делаем копию оригинала (нужно для подготовки патчей)
Делаем рабочую копию
$ mv ~/rpmbuild/BUILD/mc-4.8.19 ~/rpmbuild/BUILD/mc-4.8.19.orig
$ cp -rp ~/rpmbuild/BUILD/mc-4.8.19.orig ~/rpmbuild/BUILD/mc-4.8.19-\(2018-03-10\)
- Работа:
-
Правим исходники в рабочей копии
mc-4.8.19-(2018-03-10)
- Формируем патч
$ cd ${HOME}/rpmbuild/BUILD/mc-4.8.19-\(2018-03-10\) $ diff -u ../mc-4.8.19.orig/src/filemanager/midnight.c src/filemanager/midnight.c > "${HOME}/rpmbuild/SOURCES/mc-2panels.patch"
- Корректируем
~/rpmbuild/SPECS/mc.spec
- Добавляем наши патчи в список
Patch2: %{name}-2panels.patch Patch3: %{name}-fix-filter-hotkey.patch
- По желанию, исправляем
Release: 7%{?dist}
наRelease: 7.20180310%{?dist}
- По желанию, добавляем строчки в секцию
%changelog
- Добавляем наши патчи в список
- Сборка нового пакета
rpmbuild -ba ~/rpmbuild/SPECS/mc.spec
-
Правим исходники в рабочей копии
- Оптимизация сборки:
- Пишем 2 bash скрипта примерно с таким содержимым
$ cat ~/rpmbuild/BUILD/make_patch_build_mc.sh
и#!/bin/bash ./make_patch_mc.sh cd ../SPECS rpmbuild -ba mc.spec
$ cat ~/rpmbuild/BUILD/make_patch_mc.sh
#!/bin/bash # file patch name fpn1="${HOME}/rpmbuild/SOURCES/mc-2panels.patch" fpn2="${HOME}/rpmbuild/SOURCES/mc-fix-filter-hotkey.patch" cd mc-4.8.19-\(2018-03-10\) diff -u ../mc-4.8.19.orig/src/setup.h src/setup.h > "${fpn1}" diff -u ../mc-4.8.19.orig/src/setup.c src/setup.c >> "${fpn1}" diff -u ../mc-4.8.19.orig/src/main.c src/main.c >> "${fpn1}" diff -u ../mc-4.8.19.orig/src/filemanager/midnight.c src/filemanager/midnight.c >> "${fpn1}" diff -u ../mc-4.8.19.orig/lib/global.h lib/global.h > "${fpn2}" diff -u ../mc-4.8.19.orig/lib/global.c lib/global.c >> "${fpn2}" diff -u ../mc-4.8.19.orig/lib/widget/menu.c lib/widget/menu.c >> "${fpn2}" diff -u ../mc-4.8.19.orig/src/filemanager/cmd.c src/filemanager/cmd.c >> "${fpn2}"
- Пишем 2 bash скрипта примерно с таким содержимым
- Рекурсия до достижения нужного результата: работаем с 3.1 потом запускаем скрипт сборки 4.1.
- Результат сборки:
$ tree ~/rpmbuild/RPMS /home/user/rpmbuild/RPMS └── x86_64 ├── mc-4.8.19-7.20180310.fc27.x86_64.rpm ├── mc-debuginfo-4.8.19-7.20180310.fc27.x86_64.rpm └── mc-debugsource-4.8.19-7.20180310.fc27.x86_64.rpm
Исходная версия justAmoment, :
Памятка по патчингу mc
По мотивам
https://wiki.russianfedora.pro/index.php?title=Как_пересобрать_RPM-пакет
Команды # — от суперпользователя $ — от обычного пользователя
- Первоначальная подготовка:
-
# dnf install rpmdevtools dnf-plugins-core
$ rpmdev-setuptree
-
- Исходники:
$ cd ~/rpmbuild/SRPMS $ dnf download --source mc
-
$ rpm -ivh mc-4.8.19-7.fc27.src.rpm
-
Результат:
$ tree ~/rpmbuild /home/user/rpmbuild ├── BUILD ├── RPMS ├── SOURCES │ ├── Extends-TMPDIR_DEFAULT-to-mc-wrapper-scripts.patch │ ├── mc-4.8.19.tar.xz │ └── mc-tmpdir.patch ├── SPECS │ └── mc.spec └── SRPMS └── mc-4.8.19-7.fc27.src.rpm 5 directories, 5 files
- Подготовка зависимостей
# dnf builddep /home/user/rpmbuild/SPECS/mc.spec
-
Развернём исходники
$ rpmbuild -bp ~/rpmbuild/SPECS/mc.spec
-
Делаем копию оригинала (нужно для подготовки патчей)
Делаем рабочую копию
$ mv ~/rpmbuild/BUILD/mc-4.8.19 ~/rpmbuild/BUILD/mc-4.8.19.orig
$ cp -rp ~/rpmbuild/BUILD/mc-4.8.19.orig ~/rpmbuild/BUILD/mc-4.8.19-\(2018-03-10\)
- Работа:
-
Правим исходники в рабочей копии
mc-4.8.19-(2018-03-10)
- Формируем патч
$ cd ${HOME}/rpmbuild/BUILD/mc-4.8.19-\(2018-03-10\) $ diff -u ../mc-4.8.19.orig/src/filemanager/midnight.c src/filemanager/midnight.c > "${HOME}/rpmbuild/SOURCES/mc-2panels.patch"
- Корректируем
~/rpmbuild/SPECS/mc.spec
- Добавляем наши патчи в список
Patch2: %{name}-2panels.patch Patch3: %{name}-fix-filter-hotkey.patch
- По желанию, исправляем
Release: 7%{?dist}
наRelease: 7.20180310%{?dist}
- По желанию, добавляем строчки в секцию
%changelog
- Добавляем наши патчи в список
- Сборка нового пакета
rpmbuild -ba ~/rpmbuild/SPECS/mc.spec
-
Правим исходники в рабочей копии
- Оптимизация сборки:
- Пишем 2 bash скрипта примерно с таким содержимым
$ cat ~/rpmbuild/BUILD/make_patch_build_mc.sh
и#!/bin/bash ./make_patch_mc.sh cd ../SPECS rpmbuild -ba mc.spec
$ cat ~/rpmbuild/BUILD/make_patch_mc.sh
#!/bin/bash # file patch name fpn1="${HOME}/rpmbuild/SOURCES/mc-2panels.patch" fpn2="${HOME}/rpmbuild/SOURCES/mc-fix-filter-hotkey.patch" cd mc-4.8.19-\(2018-03-10\) diff -u ../mc-4.8.19.orig/src/setup.h src/setup.h > "${fpn1}" diff -u ../mc-4.8.19.orig/src/setup.c src/setup.c >> "${fpn1}" diff -u ../mc-4.8.19.orig/src/main.c src/main.c >> "${fpn1}" diff -u ../mc-4.8.19.orig/src/filemanager/midnight.c src/filemanager/midnight.c >> "${fpn1}" diff -u ../mc-4.8.19.orig/lib/global.h lib/global.h > "${fpn2}" diff -u ../mc-4.8.19.orig/lib/global.c lib/global.c >> "${fpn2}" diff -u ../mc-4.8.19.orig/lib/widget/menu.c lib/widget/menu.c >> "${fpn2}" diff -u ../mc-4.8.19.orig/src/filemanager/cmd.c src/filemanager/cmd.c >> "${fpn2}"
- Пишем 2 bash скрипта примерно с таким содержимым
- Рекурсия до достижения нужного результата: работаем с 3.1 потом запускаем скрипт сборки 4.1.