2016-07-16 11 views
-1

фона:Инструмент, который определяет порядок, в котором должны применяться патчи?

Я пытаюсь получить Ubuntu для работы в режиме FIPS. Один из пакетов, которые мне нужны, FIPSify is openssh. Согласно файлу CentOS openssh * .spec, один из исправлений, который они применяют поверх исходного кода openssh, составляет openssh-6.6-fips.patch. Однако у упаковочного кода debian этот патч отсутствует, поэтому я решил «заимствовать» его у CentOS и использовать на Ubuntu.

Проблема:

К сожалению, этот openssh-6.6-fips.patch патч не применяется чисто поверх Ubuntu исходного кода OpenSSH из-за другие исправления, CentOS, применяемых перед генерацией его. У меня есть все исправления, но их легко применять без конфликтов, потому что я не знаю зависимостей патчей.

Есть ли инструмент, который бы автоматизировал этот процесс, и в качестве входных данных будет использоваться исходный код openssh от Ubuntu, исправления от CentOS и «целевого» патча, которые я хочу применить. И затем в выводе он скажет мне, если (и как) можно применить эти патчи CentOS, не вызывая конфликтов?

ответ

1

Инструмент для этого - это система управления версиями, и я покажу (полностью непроверенные) команды 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 

Последняя команда предоставит вам файл исправлений, который будет применяться чисто, что вы можете добавить в код упаковки.

0

OpenSSH не является «от» Ubuntu (или CentOS, если на то пошло). Оба используют определенную версию и применяют к ней патчи. Спект-файл RPM перечисляет патчи в том порядке, в котором они применяются. Эти исправления настроены для работы с конкретной версией OpenSSH, используемой в качестве базовой версии.

Без хорошего понимания OpenSSH вам будет сложно адаптировать часть патчей к другой версии (или к другой системе упаковки).

Аналогичным образом, поскольку OpenSSH используется другими пакетами, вы столкнулись бы с проблемами при восстановлении пакета и замене его на вашу систему Ubuntu.

Вы могли использовать Spec-файл в качестве руководства, применяя патчи в порядке, и настроить вторую копию OpenSSH для установки в каталоге несистемного, например, /usr/local/openssh-fips (используя --prefix вариант скрипта конфигурации).

 Смежные вопросы

  • Нет связанных вопросов^_^