Инструмент для этого - это система управления версиями, и я покажу (полностью непроверенные) команды git о том, как я это сделаю.
## Create repository ##
$ mkdir workdir
$ cd workdir
$ git init
$ touch .gitignore # \ Creates a first commit
$ git add .gitignore # > for the branches to
$ git commit -m .gitignore #/ have in common
## Import debian source code ##
$ git checkout -b debian master
$ tar zxvf /the/debian/source/code.tgz
$ git add .
$ git commit -m "Base debian source code"
## Import centos source code ##
$ git checkout -b centos master
$ tar zxvf /the/centos/source/code.tgz
$ git add .
$ git commit -m "Base centos source code"
## Apply centos rpm patches ##
$ pacth -p1 < /the/file/listed/as/patch1/in/spec/file
$ git add .
$ git commit -m the_pacth1_file_name
$ pacth -p1 < /the/file/listed/as/patch2/in/spec/file
$ git add .
$ git commit -m the_pacth2_file_name
$ # repeat for all the patches up till, including openssh-6.6-fips.patch
До сих пор команда не получила вам ничего другого, чем репозиторий, который содержит конечный исходный код, используемый при создании пакета. Однако, поскольку патчи хранятся в виде отдельных коммитов (это ключ), мы можем выполнять стандартную манипуляцию с контролем версий и включать/исключать части филиалов по мере необходимости.
Так что при условии, что openssh-6.6-fips.patch - это номер патча 5, чтобы выбрать номер, ваша проблема в том, что он не применяется чисто к источнику ubuntu из-за некоторых дополнительных изменений, сделанных в патчах с 1 по 4, которые он строит сверху, правда?
Правильная система контроля версий отслеживает отношения родительских отношений с версиями, и, если повезет, она выяснит, как разрешать конфликты самостоятельно или может отказаться, и вам нужно решить ее вручную, но в любом случае, система управления версиями - лучший инструмент для обработки таких ситуаций.
Итак, если вы хотите получить исправление от исходного кода centos openssh-6.6-fips.patch, то вы создадите новую ветку, содержащую только этот патч, поверх фиксации исходного кода базового центра, а затем переустановите эту ветвь на ветку ubuntu. Это перебазировать совершить то даст вам патч, который будет применяться чисто на исходный код убунту
$ git checkout -b fips centos
$ git rebase -i master # Pick only the first base commit
# and the openssh-6.6-fips.patch
$ # Resolve conflicts if any and check in
Теперь у вас есть филиал fips
, который содержит только исходный код CentOS базы и ФИПС фиксации. Затем вы хотите переустановить это на ветку ubuntu.
# Rebase from (excluding) one behind the top of fips branch,
# to (including) the tip of the fips branch
$ git rebase --onto ubuntu fips^ fips
# Resolve and check in any conflicts should there be any
$ git format-patch ubuntu..fips
Последняя команда предоставит вам файл исправлений, который будет применяться чисто, что вы можете добавить в код упаковки.