LINUX.ORG.RU

Как накладывать патчи динамически, а не статически?


0

1

Существует ли файловая система, которая мутём монтирования позволяет накладывать патч?

ну, т.е. примерно так:

mount -t patchfs -o source=/source/file,patch=/patch/file none /patched/file

Т.е. идея не в том, чтобы просто наложить патч, а чтобы при изменении исходного файла, эти изменения учитывались бы в пропатченном файле.

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

они не такие. по крайней мере aufs и unionfs.

Эти системы накладывают друг на друга каталоги. А я хочу на уровне строчек файлов

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

Эти системы накладывают друг на друга каталоги.

И что тебе мешает дальше по разнице в файлах этих каталогов получать заплатки?

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

мне нужно, чтобы это происходило динамически.

В одну директорию я положу исходные файлы-конфиги,
в другие директории я положу маленькие патчи
потом смонтирую эти каталоги
и выставлю их через nfs и tftp

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

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

И зачем именно так ?

Вот к примеру у меня посредством aufs монтируется директория с исходными кодами ядра Linux:

src     /usr/src    aufs     udba=reval,br:/mnt/usr/src/rw:/mnt/usr/src/ro  0 0
В /mnt/usr/src/ro находятся оригинальные исходники.
В /mnt/usr/src/rw записываются изменения в оригинальных исходниках.
Всё это каскадно смонтировано в /usr/src.

Т.е. к примеру я в директории /usr/src/linux-X.Y.Z применил патч или просто собрал ядро. Все внесённые изменения, в плоть до удаления файлов записаны в /mnt/usr/src/rw/linux-X.Y.Z, в /mnt/usr/src/ro/linux-X.Y.Z файлы остались без изменения.

Если я хочу, что бы в директории /usr/src/linux-X.Y.Z файлы вернулись в первоначальное состояние, то просто удаляю все файлы в /mnt/usr/src/rw/linux-X.Y.Z .

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

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

у меня есть один конфиг для pxelinux и четыре сетевых платы, на которых настроены четыре разных сети, с разными номерами.

в конфигах приходится писать адрес NFS-сервера. Так как этот адрес разных в разных сетях, мне нужно иметь четыре комплекта конфигов, различающихся только этим IP-адресом

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

мне нужно, чтобы это происходило динамически.

Ну и…

Тебе нужно? Ну так бери и делай.

Сам вопрос в чем заключается? Инструментов при помощи которых можно навелосипедить подобное решение масса… Определи свою задачу и вперед.

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

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

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

Для этого вообще используют DHCP протокол и параметр option root-path, в котором передают адрес NFS сервера.

В конфигурации DHCP сервера описываете все ваши сети и для каждой сети указываете нужный вам адрес NFS сервера.

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

Определи свою задачу

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

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

я определил -

читай документацию по DHCP .

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

Вот, смотри, как это выглядит:

Установка Fedora (комментарий)

#cat /var/tftp/pxelinux.cfg/default

append inst.repo=nfs:192.168.2.150:/var/tftp/fedora_19/Fedora-19-x86_64-DVD_iso_unpacked/

да, я могу сделать не один файл default, а четыре софершенно одинаковых, отличающихся только именем, совпадающем с сетью.

Но что, если потом прийдется их подправить? это прийдется делать четыре раза

Indaril_Shpritz
() автор топика
Ответ на: комментарий от kostik87

почему ты думаешь, что kickstart заберет адрес сервера с DHCP ?

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

вопрос заключается в том, какое средство выбрать, оптимально решающее задачу

Уникального средства оптимально решающего любые задачи не существует в природе.

Однако какие именно фс ближе всего к той проблеме которая тебя интересует я тебе уже сказал вот там. Саму проблему ты неплохо описал тут и ниже… Дальше бери и велосипедь все что тебе нужно.

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

append inst.repo=nfs:192.168.2.150:/var/tftp/fedora_19/Fedora-19-x86_64-DVD_iso_unpacked/

Можно вместо IP указывать доменное имя вида NFS-SERVER, а в DNS сервере прописать сопоставление доменного имени трём разным IP, dhcp сервер, естественно помимо шлюза должен выдавать и DNS.

Но что, если потом прийдется их подправить? это придется делать четыре раза

О боже, какая сложность.

Ну и потом, если для всех этих сетей указан один общий шлюз, пусть для каждой с разным IP из нужной сети, то в любом случае NFS сервер будет доступен, даже если он находится в другой сети, если разрешён IP_FORWARD.

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

ты такого средства не знаешь (иначе бы посоветовал)

Весь юмор ситуации состоит в том, что он-то как раз знает, ибо опыт работы с патчами у него колоссальный. Но ты же тут самый умный, ага.

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

юмор ситуации состоит в том, что

его совет - взять одну из unionfs и дорабатывать её.
т.е. готовой системы такого типа он не знает.

он-то как раз знает

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

Indaril_Shpritz
() автор топика
Ответ на: комментарий от kostik87

Можно вместо IP указывать доменное имя вида NFS-SERVER, а в DNS сервере прописать сопоставление доменного имени трём разным IP, dhcp сервер, естественно помимо шлюза должен выдавать и DNS.

да, это решит мою текущую проблему. Спасибо.

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

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

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

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

Потому, что ваша идея бредовая, ни кто так не делает.

Ещё раз, если для каждой сети шлюз один и он общий, то включаете на шлюзе продвижения пакетов

echo 1 > /proc/sys/net/ipv4/ip_forward
или посредством sysctl и всё nfs сервер, находящийся в другой сети будет доступен через шлюз. Или, как я уже сказал воспользуйтесь услугами DNS.

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

Тебе надо не перед чтением из результата это проделывать, что плохо контролируется и вообще грабли, а после записи в сорец.

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

Ну так напиши Makefile для конфигов etc. cd myetc; make build && make install

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

Прочитайте ещё внимательно это сообщение

прочитал. ничего не произошло. а что должно было случиться?

ни кто так не делает.

это не показатель бредовости. Видимо это основывается на какой-то причине, вот её и надо привести.

nfs сервер, находящийся в другой сети

у меня такой проблемы нет, т.к. nfs сервер все четыре сети и так видит напрямую

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

т.е. готовой системы такого типа он не знает.

Он уже потратил своё время на тебя, пытаясь понять твои потуги и предложить решение. Бесплатно. Прояви уважение.

то твое утверждение это пустословие (тяжких грех, ясное дело)

Ой, какой кошмар. Создавай поскорее свой форум уже, неблагодарный.

i-rinat ★★★★★
()
Ответ на: комментарий от Indaril_Shpritz

Ну и зачем вам тогда несколько конфигов и в каждом из них указывать свой nfs сервер ? Или nfs сервер тоже не один и на каждом из них свои данные ?

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

Но что, если потом прийдется их подправить? это прийдется делать четыре раза

А вот для этого ещё с дремучих времён придумали тысячи средств, начиная от m4 или даже sed. Файловая система тут выглядит, мягко говоря, лишней.

Если бы мне ОЧЕНЬ хотелось решить это именно через nfs — я бы скрестил его с любой httpfs и запилил веб-сервер, генерящий нужные вещи из шаблонов. Тупо потому, что движков шаблонов для веба — уйма, а для 9p (который идеологически вернее) — писать самому, пусть и немного.

x3al ★★★★★
()

Можно написать демона, который открывает unix-сокет и, когда какая-то программа читает этот сокет, пишет туда пропатченный файл.

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

А я хочу на уровне строчек файлов

ну дык 100500 способов уже указали. Ты хочешь чтоб некие patсh накладывались на исходный оригинал исходя из точек монтирование этих самых patch. Ну дык любимая/знакомая VCS и VFS.

НО! есть значительный (>50%) шанс, что при изменении оригинала ты упрешся в конфликты версий, и ни один клиент не загрузится.

Так что подсказанные выше решения с передачей параметров через DHCP (а их можно очень интеллектуально формировать) и/или make+Makefile+sync более стабильные.

MKuznetsov ★★★★★
()

ТС поясни область применения твоей задумки? тебе не кажется что такое уже есть но немного в другом виде. в виде снапшотов.

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

любимая/знакомая VCS и VFS.

не понимаю как. Ну, пусть любимая VCS=git, а дальше?
VFS-это же общий термин:
http://en.wikipedia.org/wiki/Virtual_file_system

вот я спрашиваю, есть ли конкретно накладывающая патчи

Indaril_Shpritz
() автор топика
Ответ на: комментарий от kostik87

ZFS смотрит на это с недоумением.

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

тебе не кажется

нет, снапшоты не работают с патчами

поясни область применения твоей задумки?

накладывание патчей более простым способом, нежели:
1) установка VCS
2) написание скриптов для накладывания патчей
3) написание демона, который будет отлавливать изменения файловой системы и запускать скрипты

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

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

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

Но на планете еще 300 миллионов русскоязычных

NoWay

Hint: не нужно.

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

т.е. готовой системы такого типа он не знает.

у тебя изначально неправильная постановка задачи. Я понял, что ты хочешь, но вряд-ли здесь кто-то кроме меня умеет делить на ноль...

emulek
()

ТС пеши исчо. У тебя хорошо получается. Петросян нервно курит в сторонке!

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

ФС не смонтировалась потому что патчи не наложились ведь так? Ну и пойдешь ты руками все это дело проверять и чинить. Обычными командами patch, diff.

bhfq ★★★★★
()
Ответ на: комментарий от i-rinat

посоны, он от вас просит ФС с ручной настройкой динамических оверлеев на блочном уровне, с возможностью удобно подгонять alignment под известные форматы файлов, а вы ему рассказываете как настраивать DHCP. Примите разупорина, пожалуйста.

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