LINUX.ORG.RU

rpmbuild: заменить файл в SOURCES в таре

 


0

2

есть программа, автор которой кое что забыл и надо заменить один файл целиком, либо сделать ему sed, либо замену как-то по маске (с заменой на %{version}).
подскажите директиву спек-файла или куда копать? или это невозможно и остается только положить патч?

Ответ на: комментарий от debugger

только так?
просто там

#define VERSION "software-name-0.2.3"
а надо
#define VERSION "software-name-0.2.4"
вот я и думал, может как-то sed или шаблон с подтановками а потом перезаписать

neschastnyjj86 ()
Ответ на: комментарий от neschastnyjj86

я просто не собирал никогда особо RPMы, вот пытаюсь разобраться. нашел федорины мануалы сборке rpm но они требуют много времени.

А что ты хотел? Чтоб прилетел вдруг волшебник в голубом вертолёте и бесплатно поправил твой спек? Куда копать я уже подсказал, дальше — сам.

Если тебе %patch не нравится, можно, конечно, хакнуть распакованные исходники седом (это делается всё в той же секции %setup), но я бы рекомендовал всё-таки сделать патч. По трудоёмкости это проще седа, да и политически грамотнее.

Если есть *конкретные* вопросы — пиши, кто-нить, возможно, поможет.

debugger ★★★ ()
Ответ на: комментарий от debugger

рекомендовал всё-таки сделать патч

я пока так и сделал, т.к. не осилил доки по рпм.

хакнуть распакованные исходники седом (это делается всё в той же секции %setup)

спасибо за указатель!

да и политически грамотнее

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

neschastnyjj86 ()
Ответ на: комментарий от debugger

просто советы я видел разные, вплоть до «замени в самом таре и такой положи» а потом собери, но че-то я догадываюсь, что это хак и возможно даже что где-то даже прямо запрещено. спасибо в общем!

neschastnyjj86 ()
Ответ на: комментарий от neschastnyjj86

вот это очень важно замечание, потому как я догадываюсь что есть драконовские нормы

Это никакие не нормы, это просто так принято. Даунстримные изменения подкладывают патчами, а не седом, чтобы сразу было видно что это за изменения такие, откуда взялись и зачем нужны.

morse ★★★★★ ()
Ответ на: комментарий от morse

Даунстримные изменения подкладывают патчами

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

это просто так принято

понял, я просто видел федорины «гайдлайны», думал может это примерно оттуда идет. спаисбо.

neschastnyjj86 ()
@@ -1,2 +1,2 @@
-#define VERSION "software-name-0.2.3"
+#define VERSION "software-name-0.2.4"

я придумал совсем извращенный вариант: попробовать делать сначала сед по патчу а потом его накладывать (и автоматика, и седа по исходникам нет), но это кончно шутка.

neschastnyjj86 ()
Ответ на: комментарий от neschastnyjj86

я просто видел федорины «гайдлайны»

федора здесь не уникальна, так все делают. по крайней мере все с кем я работал: дебиан, убунта, гента. может быть какая-нибудь маргинальная слака и уродует сорцы по живому, но в нормальных местах так не принято.

Тут есть и еще один довод: сед невозможно проконтролировать. Патч — он всегда накладывается на определенное место, и выкинет ошибку если что-то пойдет не так. сед отработает как ни в чем не бывало даже если ты вообще не те исходники подложишь, и ты потом никогда ни в жизни не угадаешь из-за чего у тебя все поломалось.

morse ★★★★★ ()
Ответ на: комментарий от morse

сед отработает как ни в чем не бывало

ага. ломается молча, статус-код всегда 0.

да и менее прозрачно потом для понимания, что с исходниками делается вообще, в сравнении с патчем.

neschastnyjj86 ()
Ответ на: комментарий от neschastnyjj86

действительно не так много и работы.

Ты патчи-то руками что ли пишешь?

  1. Распаковываешь тарбол в каталог a.
  2. Делаешь копию в каталоге b.
  3. Правишь файлы в каталоге b.
  4. diff -ru a b > my-changes.patch

Всё, патч готов. Чего уж проще-то? Седовскую регулярку затрахаешься отлаживать чтоб она меняла то, что тебе надо и при этом не меняла то, что не надо.

Это во-первых. А во-вторых — бампить версию продукта в рпм как-то некомильфо. Что ты будешь делать когда майнстрим таки выпустит версию 0.2.4? Если уж очень хочется поправить версию, то правь на 0.2.3.neschastnyjj86 или что-нить типа этого.

debugger ★★★ ()
Последнее исправление: debugger (всего исправлений: 2)
Ответ на: комментарий от debugger

Это во-первых. А во-вторых — бампить версию продукта в рпм как-то некомильфо. Что ты будешь делать когда майнстрим таки выпустит версию 0.2.4?

я плохо объянил. это и есть новая версия (0.2.4), он выпустил 0.2.4, дал новость, тарбол на сайте он назвал правильно - 0.2.4, но в сишном version.h он забыл обновить. я меняю только из-за того, что программа репортит --version неправильный (не соотв. ни действительности ни yum info, что вызовет путаницу).

Таким образом у него в логе version.h будет 0.2.3 и потом сразу 0.2.5 (если он опять не забудет). A у меня пакеты: 0.2.3, 0.2.4, 0.2.5 и --version всегда будет сходиться.

Ты патчи-то руками что ли пишешь?

ну нет уж конечно! diff'ом

neschastnyjj86 ()
Ответ на: комментарий от neschastnyjj86

Никто не делает сед по патчу. Патч просто ребейзят на новую версию, если он перестаёт применяться автоматически, или удаляют.

d_a ★★★★★ ()
Последнее исправление: d_a (всего исправлений: 1)

Не забываем закрывать тему!

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.