топологическая сортировка, сборка пакетов
Модератор: SLEDopit
топологическая сортировка, сборка пакетов
добрый день
изыскивается некоторое решение задачи "топологической сортировки", применительно к процессу сборки большого количества взаимо-зависимых пакетов.
в инете "как такового" решения не нашел, есть только теория
по понятным причинам не надо предлагать разобрать под микроскопом исходники "пакетных менеджеров" и прочих "комбайнов", в задачу не входит "написать мир с нуля" :о) (надеюсь, смысл понятен)
не обсуждается
- наш дистрибьютив
- как мы собираем пакеты (понятно, что все не так как надо и все через не то место :о)
в тек. момент "весь процесс" составляется в ручном режиме, если будут подходящие идеи/решения, то попробуем "заточить" под "свои задачи", если нет - значит "перебьемся" :о), как говориться, и на этом спасибо
непонятно то, что в инете оч. мало это обсуждают, т.к. сама по себе задача - чуть ли не главная в "процессе сборки", и эту задачу однозначно решают не "пакетные менеджеры" а "что-то", о чем "почему-то все молчать" (с другой стороны, ясен-пень: "ноу-хау" и соотв. корпоративные секрето-масштабы ...)
буду благодарен за
- волшебные пендили (в нужном направлении)
- ссылки
- идеи
- методы/решения - кто и как с "подобной задачей" справляется (ведь есть же такие спецы?!)
постановка задачи (что видится или как примерно будет решаться)
на входе
- "какое-либо" описание зависимостей, текст, или еще какой формат (типа пакет А зависит от А.1, А.2, А3, Б)
- возможно, вариации "версий" или еще какие-то "варианты" (типа пакет А совместим с А.1 - версии 1.0-1.5, и уже не совместим с версиями 0.1-0.9 и 1.6 и выше)
на выходе
- последовательность сборки пакетов (последовательная , не параллельная), типа сборка в след. посл-ти:
А.1, А.2, А3, Б, А
tag:
- топологическая сортировка
- теория графов
- алгоритм разрешения зависимостей
спасибо за помощь
### дополнение ###
подобная задача на самом деле достаточно востребована и повсеместно встречающаяся втч и с большим кол-вом элементов
типа, постройка дома, сборка самолета, да что угодно, где требуется составить последовательность работы (по исходным данным и к.л. зависимостям) ... ну вот есть же, однозначно решается как то, неужели ни кто ни где не сталкивался? ужели оскудале земля русская?
изыскивается некоторое решение задачи "топологической сортировки", применительно к процессу сборки большого количества взаимо-зависимых пакетов.
в инете "как такового" решения не нашел, есть только теория
по понятным причинам не надо предлагать разобрать под микроскопом исходники "пакетных менеджеров" и прочих "комбайнов", в задачу не входит "написать мир с нуля" :о) (надеюсь, смысл понятен)
не обсуждается
- наш дистрибьютив
- как мы собираем пакеты (понятно, что все не так как надо и все через не то место :о)
в тек. момент "весь процесс" составляется в ручном режиме, если будут подходящие идеи/решения, то попробуем "заточить" под "свои задачи", если нет - значит "перебьемся" :о), как говориться, и на этом спасибо
непонятно то, что в инете оч. мало это обсуждают, т.к. сама по себе задача - чуть ли не главная в "процессе сборки", и эту задачу однозначно решают не "пакетные менеджеры" а "что-то", о чем "почему-то все молчать" (с другой стороны, ясен-пень: "ноу-хау" и соотв. корпоративные секрето-масштабы ...)
буду благодарен за
- волшебные пендили (в нужном направлении)
- ссылки
- идеи
- методы/решения - кто и как с "подобной задачей" справляется (ведь есть же такие спецы?!)
постановка задачи (что видится или как примерно будет решаться)
на входе
- "какое-либо" описание зависимостей, текст, или еще какой формат (типа пакет А зависит от А.1, А.2, А3, Б)
- возможно, вариации "версий" или еще какие-то "варианты" (типа пакет А совместим с А.1 - версии 1.0-1.5, и уже не совместим с версиями 0.1-0.9 и 1.6 и выше)
на выходе
- последовательность сборки пакетов (последовательная , не параллельная), типа сборка в след. посл-ти:
А.1, А.2, А3, Б, А
tag:
- топологическая сортировка
- теория графов
- алгоритм разрешения зависимостей
спасибо за помощь
### дополнение ###
подобная задача на самом деле достаточно востребована и повсеместно встречающаяся втч и с большим кол-вом элементов
типа, постройка дома, сборка самолета, да что угодно, где требуется составить последовательность работы (по исходным данным и к.л. зависимостям) ... ну вот есть же, однозначно решается как то, неужели ни кто ни где не сталкивался? ужели оскудале земля русская?
если я ошибаюсь, то поправьте а не критикуйте :о)
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: топологическая сортировка, сборка пакетов
Эту задачу часто решают методом грубой силы: сначала собирают нужные версии всех пакетов как получится, потом на получившемся репозитории запускают массовую пересборку, в которой все зависимости будут уже актуальных версий (порядок сборки в данном случае уже не важен). Топологическая сортировка скорее всего не удастся из-за циклических зависимостей (а для сборочных зависимостей это в порядке вещей, ведь чтобы собрать компилятор нужен компилятор, без бутстрапинга никак).
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: топологическая сортировка, сборка пакетов
Bizdelnick писал(а): ↑09.07.2017 12:12Эту задачу часто решают методом грубой силы: сначала собирают нужные версии всех пакетов как получится, потом на получившемся репозитории запускают массовую пересборку, в которой все зависимости будут уже актуальных версий (порядок сборки в данном случае уже не важен). Топологическая сортировка скорее всего не удастся из-за циклических зависимостей (а для сборочных зависимостей это в порядке вещей, ведь чтобы собрать компилятор нужен компилятор, без бутстрапинга никак).
Согласен, что так не делают. Но всё же не обязательно собирать всё-всё с нуля. Можно иметь начальный набор - компиляторы и основные зависимости. Топикстартер такую задачу не ставил, вроде.
Re: топологическая сортировка, сборка пакетов
> Топикстартер такую задачу не ставил, вроде.
да мы че, совсем что ли на голову больные?
"написать мир с нуля" мы не планируем
если это так нужно, УТОЧНЯЮ
- система на которой все будет собираться УЖЕ ЕСТЬ, со всем КОМПЛЕКТОМ DEVELOP-пакетов
т.е. для сборки все есть
ЗАДАЧА - получить список последовательности сброки пакетов... гм, ну например какого либо большого пакета, типа KdeNlive. (ну типа к примеру)
что -то как то все, блин, хреново это все... "как получится, да потом че-нить да подрихтуем"... :о(
но к решению задачи в том виде в котором "треба" - не имеет отношения, имхо...
спасибо
да мы че, совсем что ли на голову больные?
"написать мир с нуля" мы не планируем
если это так нужно, УТОЧНЯЮ
- система на которой все будет собираться УЖЕ ЕСТЬ, со всем КОМПЛЕКТОМ DEVELOP-пакетов
т.е. для сборки все есть
ЗАДАЧА - получить список последовательности сброки пакетов... гм, ну например какого либо большого пакета, типа KdeNlive. (ну типа к примеру)
сначала собирают нужные версии всех пакетов как получится, потом на получившемся репозитории запускают массовую пересборку, в которой все зависимости будут уже актуальных версий (порядок сборки в данном случае уже не важен).
что -то как то все, блин, хреново это все... "как получится, да потом че-нить да подрихтуем"... :о(
но к решению задачи в том виде в котором "треба" - не имеет отношения, имхо...
спасибо
если я ошибаюсь, то поправьте а не критикуйте :о)
Re: топологическая сортировка, сборка пакетов
то есть ровно то, что делает tsort?
Re: топологическая сортировка, сборка пакетов
> tsort
гуглить и манить я, вроде как, тоже умею
наткнулся "на нее" в другом форуме, сейчас изучаю, но как то очень сильно сомневаюсь, в том, что она сильно поможет в данном вопросе
побоялся за свой "хранцузский", нашел достойное описание
Топологическая сортировка, считывает пары строк, разделенных пробельными символами, и выполняет сортировку, в зависимости от заданного шаблона.
ну и теперь думаем, как это поможет отцу русской демократии?
зы
спецыально пытался сделать задачу "дистро/линухо независимой"...
ну вот допустим, возьмем не пакеты, а блин... с хозяйством, типа строим дом, сначало нужен фунадмент, но фундамент зависит от цемента, песка, воды, дня недели (водитель вовка в пятницу уже никакой до понедельника) итд... ну вот аналогия пусть будет такая... если это поможет... ведь явно подобные задачи решаются, причем ну очень много подобного... и как то решение автоматизируется...
гуглить и манить я, вроде как, тоже умею
наткнулся "на нее" в другом форуме, сейчас изучаю, но как то очень сильно сомневаюсь, в том, что она сильно поможет в данном вопросе
побоялся за свой "хранцузский", нашел достойное описание
Топологическая сортировка, считывает пары строк, разделенных пробельными символами, и выполняет сортировку, в зависимости от заданного шаблона.
ну и теперь думаем, как это поможет отцу русской демократии?
зы
спецыально пытался сделать задачу "дистро/линухо независимой"...
ну вот допустим, возьмем не пакеты, а блин... с хозяйством, типа строим дом, сначало нужен фунадмент, но фундамент зависит от цемента, песка, воды, дня недели (водитель вовка в пятницу уже никакой до понедельника) итд... ну вот аналогия пусть будет такая... если это поможет... ведь явно подобные задачи решаются, причем ну очень много подобного... и как то решение автоматизируется...
если я ошибаюсь, то поправьте а не критикуйте :о)
Re: топологическая сортировка, сборка пакетов
sunjob
Тогда постарайтесь объяснить что вам надо. Частично упорядоченное множество - понятие однозначное, метод его представления и сортировки тоже описан подробно и однозначно, например, у Кнута.
А ваши предыдущие объяснения выглядят подозрительно абстрактно и размыто.
Тогда постарайтесь объяснить что вам надо. Частично упорядоченное множество - понятие однозначное, метод его представления и сортировки тоже описан подробно и однозначно, например, у Кнута.
А ваши предыдущие объяснения выглядят подозрительно абстрактно и размыто.
Re: топологическая сортировка, сборка пакетов
> подозрительно, абстрактно и ... что там, ага! - размыто
на входе
- "какое-либо" описание зависимостей, текст, или еще какой формат (типа пакет А зависит от А.1, А.2, А3, Б)
- возможно, вариации "версий" или еще какие-то "варианты" (типа пакет А совместим с А.1 - версии 1.0-1.5, и уже не совместим с версиями 0.1-0.9 и 1.6 и выше)
на выходе
- последовательность сборки пакетов (последовательная , не параллельная), типа сборка в след. посл-ти:
А.1, А.2, А3, Б, А
... ума не приложу, как еще обьяснить? давайте тогда, что-ли по буквам, по словам разбирать, что не понятно, спрашивайте, постараюсь максимально выложиться :о) надеюсь, если внимательно прочитать топик - станет немного понятнее... вот я перечитал и стало совсем понятно, что более понятно обьяснить не смогу :о)
ну и ведь очевидно, что ВСЕ С НУЛЯ мастерить - не подходит
> если будут подходящие идеи/решения, то попробуем "заточить" под "свои задачи", если нет - значит "перебьемся"
ведь понятно, что ДЕЛАТЬ МОНСТРА не стоит как задача, надеемся, что ПОДОБНЫЕ задачи как то да решаются... ПОДОБНЫЕ - значит не только ЗАВИСИМОСТИ ПАКЕТОВ, есть куча всего замечательного, где ЧТО-ТО подобное так же требуется, но в РАЗУМНЫХ пределах
все имхо, спапсибо
на входе
- "какое-либо" описание зависимостей, текст, или еще какой формат (типа пакет А зависит от А.1, А.2, А3, Б)
- возможно, вариации "версий" или еще какие-то "варианты" (типа пакет А совместим с А.1 - версии 1.0-1.5, и уже не совместим с версиями 0.1-0.9 и 1.6 и выше)
на выходе
- последовательность сборки пакетов (последовательная , не параллельная), типа сборка в след. посл-ти:
А.1, А.2, А3, Б, А
... ума не приложу, как еще обьяснить? давайте тогда, что-ли по буквам, по словам разбирать, что не понятно, спрашивайте, постараюсь максимально выложиться :о) надеюсь, если внимательно прочитать топик - станет немного понятнее... вот я перечитал и стало совсем понятно, что более понятно обьяснить не смогу :о)
ну и ведь очевидно, что ВСЕ С НУЛЯ мастерить - не подходит
> если будут подходящие идеи/решения, то попробуем "заточить" под "свои задачи", если нет - значит "перебьемся"
ведь понятно, что ДЕЛАТЬ МОНСТРА не стоит как задача, надеемся, что ПОДОБНЫЕ задачи как то да решаются... ПОДОБНЫЕ - значит не только ЗАВИСИМОСТИ ПАКЕТОВ, есть куча всего замечательного, где ЧТО-ТО подобное так же требуется, но в РАЗУМНЫХ пределах
все имхо, спапсибо
если я ошибаюсь, то поправьте а не критикуйте :о)
Re: топологическая сортировка, сборка пакетов
sunjob
Так и объясняйте: вам нужен менеджер пакетов со стандартными возможностями.
Теперь объясните, почему вы хотите изобрести велосипед вместо того, чтобы воспользоваться штатным.
Так и объясняйте: вам нужен менеджер пакетов со стандартными возможностями.
Теперь объясните, почему вы хотите изобрести велосипед вместо того, чтобы воспользоваться штатным.
Re: топологическая сортировка, сборка пакетов
Очереди зависимостей может формировать sqg, который входит в пакет sbopkg. Но он это делает путем анализа установленных пакетов.
Re: топологическая сортировка, сборка пакетов
> вам нужен менеджер пакетов со стандартными возможностями.
пожалуйста, обьясните из чего вы решили это?! нет, нам не нужен пакетный менеджер !!! (три восклицательных знака :о)
хотя, возможно ваше видение решения задачи - подробно описанное (пожалуйста, разьясните) - поможет мне чем ни-будь...давайте, раскажите как вы видите ваше решение?!
на входе - "обычный" список пакетов
на выходе - "правильный" список пакетов
> Очереди зависимостей может формировать sqg, который входит в пакет sbopkg. Но он это делает путем анализа установленных пакетов.
понял, но сами видите не подходит уже по определению :о) да и в планах - сам пакетник не использовать
доп.
попробую обьяснить по другому
допустим мне нужно "расчитать зарплату"... тупо, но пусть будет так... я спрашиваю, вот така задача, какие существуют решения, ведь не может же их не быть, они есть, т.к. люди однозначно с этими задачами сталкиваются и ... видимо их решают
а вы мне все в один голос: есть 1с, парур/рарус :о) ананас итд - все виды электронных бухгалтерий
так и тут, есть "подобная задача", она вообще не упирается в пакеты, линуксы и пр. хрени... задача общая и решается на любом мало мальском предприятии и видимо, уж точно есть какие либо подобные пакеты, программы, наработки, таблицы итд для решения "подобных задач" ... вот я и ищу/воспрошаю к этим людям кто с этими решениями сталкивался, и что то может об этом расказать
если мы чего та не знаем, это же совсем на значит, что этого нет вообще... :о) как-то так...
спасибо
пожалуйста, обьясните из чего вы решили это?! нет, нам не нужен пакетный менеджер !!! (три восклицательных знака :о)
хотя, возможно ваше видение решения задачи - подробно описанное (пожалуйста, разьясните) - поможет мне чем ни-будь...давайте, раскажите как вы видите ваше решение?!
на входе - "обычный" список пакетов
на выходе - "правильный" список пакетов
> Очереди зависимостей может формировать sqg, который входит в пакет sbopkg. Но он это делает путем анализа установленных пакетов.
понял, но сами видите не подходит уже по определению :о) да и в планах - сам пакетник не использовать
доп.
попробую обьяснить по другому
допустим мне нужно "расчитать зарплату"... тупо, но пусть будет так... я спрашиваю, вот така задача, какие существуют решения, ведь не может же их не быть, они есть, т.к. люди однозначно с этими задачами сталкиваются и ... видимо их решают
а вы мне все в один голос: есть 1с, парур/рарус :о) ананас итд - все виды электронных бухгалтерий
так и тут, есть "подобная задача", она вообще не упирается в пакеты, линуксы и пр. хрени... задача общая и решается на любом мало мальском предприятии и видимо, уж точно есть какие либо подобные пакеты, программы, наработки, таблицы итд для решения "подобных задач" ... вот я и ищу/воспрошаю к этим людям кто с этими решениями сталкивался, и что то может об этом расказать
если мы чего та не знаем, это же совсем на значит, что этого нет вообще... :о) как-то так...
спасибо
если я ошибаюсь, то поправьте а не критикуйте :о)
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: топологическая сортировка, сборка пакетов
Собственно, получение этого описания и есть самая сложная часть задачи.
Сможете, если перейдёте к конкретике. Кто знает, что и из чего Вы там собираете? Для deb-пакетов, например, есть botch, но Вы же не хотите раскрывать тайну, какой формат пакетов используете.
Я этого и не предлагал. Я просто сказал, что циклические сборочные зависимости в порядке вещей, и пояснил, почему.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: топологическая сортировка, сборка пакетов
> Собственно, получение этого описания и есть самая сложная часть задачи.
получение и запись этих зависимостей - есть наша задача, в решение оно не входит ни каким боком, МЫ САМИ БУДЕМ ЗАДАВАТЬ ЭТИ САМЫЕ ЗАВИСИМОСТИ... т.е ни какой привязки к пакоменеджерам!
а теперь все!!! забыли про линуксы, пакеты, пакоменагеры и типы пакетов!!!
берем исходное б.м. понятное описание задачи:
на входе
- "какое-либо" описание зависимостей, текст, или еще какой формат (типа пакет А зависит от А.1, А.2, А3, Б)
- возможно, вариации "версий" или еще какие-то "варианты" (типа пакет А совместим с А.1 - версии 1.0-1.5, и уже не совместим с версиями 0.1-0.9 и 1.6 и выше)
на выходе
- последовательность сборки пакетов (последовательная , не параллельная), типа сборка в след. посл-ти:
А.1, А.2, А3, Б, А
ПАКЕТЫ - заменяем на ЛЮДЕЙ
СБОРКУ - заменяем на любое действие ПОКУПКА, СВИДАНИЕ, УБИЙСТВО итд...
надеюсь так станет понятней?! подобные задачи решаются, автоматизируются, есть наработки, пакеты/программы итд (далее по тексту :о)
зависимости "изыскиваются/создаются/набиваются" в "задачу" - как исходные данные...
ни каких линуксов, типов пакетов, процесса сборки, итд... если сложно, ну можно ведь и не отвечать... ни кто вас не упрекнет в том, что я так хреново обьясняю :о)
на примере "последовательности сборки автомобиля"
- сначало собираем корпус (который зависит от кучи запчастей, значит изготавливаем сначало запчасти, потом собираем корпус)
- далее вставляем двигатель (со своими зависимостями)
- далее подвеску (со своими зависимостями)
- далее рулль ...
ведь ни у кого же не взбредет в голову приделывать сначало колеса (непонятно куда, вперед сборки корпуса) итд
плюс к этому добавляются взаимо-пересекающиеся зависимости...
ну и, естественно данный процесс как то автоматизируется (ну хоть как то, не все же техпроцессом описывается в 10ти томах последовательности сборки, раньше - да, не спорю, но не сейчас...)
вот и спрашивается, как автоматизируется, что используется, итд...
что-то мне напомнило
ТЫЦ
получение и запись этих зависимостей - есть наша задача, в решение оно не входит ни каким боком, МЫ САМИ БУДЕМ ЗАДАВАТЬ ЭТИ САМЫЕ ЗАВИСИМОСТИ... т.е ни какой привязки к пакоменеджерам!
а теперь все!!! забыли про линуксы, пакеты, пакоменагеры и типы пакетов!!!
берем исходное б.м. понятное описание задачи:
на входе
- "какое-либо" описание зависимостей, текст, или еще какой формат (типа пакет А зависит от А.1, А.2, А3, Б)
- возможно, вариации "версий" или еще какие-то "варианты" (типа пакет А совместим с А.1 - версии 1.0-1.5, и уже не совместим с версиями 0.1-0.9 и 1.6 и выше)
на выходе
- последовательность сборки пакетов (последовательная , не параллельная), типа сборка в след. посл-ти:
А.1, А.2, А3, Б, А
ПАКЕТЫ - заменяем на ЛЮДЕЙ
СБОРКУ - заменяем на любое действие ПОКУПКА, СВИДАНИЕ, УБИЙСТВО итд...
надеюсь так станет понятней?! подобные задачи решаются, автоматизируются, есть наработки, пакеты/программы итд (далее по тексту :о)
зависимости "изыскиваются/создаются/набиваются" в "задачу" - как исходные данные...
ни каких линуксов, типов пакетов, процесса сборки, итд... если сложно, ну можно ведь и не отвечать... ни кто вас не упрекнет в том, что я так хреново обьясняю :о)
на примере "последовательности сборки автомобиля"
- сначало собираем корпус (который зависит от кучи запчастей, значит изготавливаем сначало запчасти, потом собираем корпус)
- далее вставляем двигатель (со своими зависимостями)
- далее подвеску (со своими зависимостями)
- далее рулль ...
ведь ни у кого же не взбредет в голову приделывать сначало колеса (непонятно куда, вперед сборки корпуса) итд
плюс к этому добавляются взаимо-пересекающиеся зависимости...
ну и, естественно данный процесс как то автоматизируется (ну хоть как то, не все же техпроцессом описывается в 10ти томах последовательности сборки, раньше - да, не спорю, но не сейчас...)
вот и спрашивается, как автоматизируется, что используется, итд...
что-то мне напомнило
ТЫЦ
если я ошибаюсь, то поправьте а не критикуйте :о)
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: топологическая сортировка, сборка пакетов
Ну ок, абстрагировались. Так а что не так с tsort-то?
Shell
% cat deps
запчасть1 корпус
запчасть2 корпус
корпус двигатель
корпус подвеска
двигатель подвеска
подвеска руль
% tsort deps
запчасть1
запчасть2
корпус
двигатель
подвеска
руль
%
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: топологическая сортировка, сборка пакетов
дак вот и я спросил "что не так"? из описания мне было не понятно как это поможет ... и ни кто ни чего не ответил
щас бум разбираться что так и что не так? как поведет себя с множественными и пересекающимися зависимостями и пр.хреньками :о)
описание зависимостей не совсем удобно, хотелось бы по строке на каждый пакет, но это пока придирки... ща мы тут переварим, покумекаем, если кателок не пробьет, отпишусь что ни будь
а вообще, все таки интересуюсь, какие наработки используются в промышленности, ясно дело что можно и башем заделать или как то подобно низкоуровне ...
спасибо
щас бум разбираться что так и что не так? как поведет себя с множественными и пересекающимися зависимостями и пр.хреньками :о)
описание зависимостей не совсем удобно, хотелось бы по строке на каждый пакет, но это пока придирки... ща мы тут переварим, покумекаем, если кателок не пробьет, отпишусь что ни будь
а вообще, все таки интересуюсь, какие наработки используются в промышленности, ясно дело что можно и башем заделать или как то подобно низкоуровне ...
спасибо
если я ошибаюсь, то поправьте а не критикуйте :о)
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: топологическая сортировка, сборка пакетов
Ну как вариант:
Код: Выделить всё
#!/usr/bin/make -f
.PHONY: all
all: запчасть1 запчасть2 подвеска руль двигатель корпус
корпус: запчасть1 запчасть2
подвеска: корпус двигатель
двигатель: корпус
руль: подвеска
%:
@echo $@
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: топологическая сортировка, сборка пакетов
В промышленности не используются сферические кони в вакууме, там используются конкретные решения для конкретных задач. Предпочитаете формулировать задачу абстрактно — не просите конкретных решений.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: топологическая сортировка, сборка пакетов
> описание зависимостей
да разобрался уже, благо есть офдоки
> по поводу коня
это не конь сферический (не надо передергивать) а общая задача, без конкретики, вумный поймет ... и далее по тексту :о)
> по сортировке
небольшие тесты - вроде как отрабатывают, ГУТ, можно сказать превосходно
НО, как понятно и слону - только зависимости, с версиями пока не вижу решения (надеюсь кому надо, тот понял, о чем речь :о)
спасибо
ВОПРОС ОСТАЕТСЯ ОТКРЫТЫМ - какие наработки применяются вообще, в пром-ти, где либо еще?!
### UPDATE ###
некоторые особенности команды tsort
при тестировании простейшей схемы выяснилось, что "токены" должны быть парами
пример, два аналогичных описания, первый отработает нормально, второй с ошибкой
ошибка
далее тестировать более заумные вз.связи не стал, из описания не понятно, как можно обойти эту особенность... в разудмьях, или в ступоре :о)
т.е. как таковое "парное описание", а еще лучше "по одной зависимости" - это все-таки не удобно, самое оптимальное было-бы по строке на "пакет"
можно, конечно выкрутиться, промежуточным скриптом, кот. будет парсить строки и вставлять "пары в другой файл", а потом отправлять содержимое на обработку tsort...
да разобрался уже, благо есть офдоки
> по поводу коня
это не конь сферический (не надо передергивать) а общая задача, без конкретики, вумный поймет ... и далее по тексту :о)
> по сортировке
небольшие тесты - вроде как отрабатывают, ГУТ, можно сказать превосходно
НО, как понятно и слону - только зависимости, с версиями пока не вижу решения (надеюсь кому надо, тот понял, о чем речь :о)
спасибо
ВОПРОС ОСТАЕТСЯ ОТКРЫТЫМ - какие наработки применяются вообще, в пром-ти, где либо еще?!
### UPDATE ###
некоторые особенности команды tsort
при тестировании простейшей схемы выяснилось, что "токены" должны быть парами
пример, два аналогичных описания, первый отработает нормально, второй с ошибкой
Код: Выделить всё
a a1 a2 a3
b b1 b2 b3
a2 a2.1
b2 b2.1
a2.1 c
b2.1 c
c c1
c c2
Код: Выделить всё
a a1 a2 a3
b b1 b2 b3
a2 a2.1
b2 b2.1
a2.1 c
b2.1 c
c c1 c2
ошибка
Код: Выделить всё
input contains an odd number of tokens
далее тестировать более заумные вз.связи не стал, из описания не понятно, как можно обойти эту особенность... в разудмьях, или в ступоре :о)
т.е. как таковое "парное описание", а еще лучше "по одной зависимости" - это все-таки не удобно, самое оптимальное было-бы по строке на "пакет"
можно, конечно выкрутиться, промежуточным скриптом, кот. будет парсить строки и вставлять "пары в другой файл", а потом отправлять содержимое на обработку tsort...
если я ошибаюсь, то поправьте а не критикуйте :о)
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: топологическая сортировка, сборка пакетов
Один пример я выше приводил — botch. Другой пример ещё раньше привёл yars — sqg. Если хотите что-то, более приближенное к Вашим условиям, давайте конкретику, потому что это всё штуки сугубо специализированные. Ну или копайтесь в их коде и переделывайте под свою задачу либо пишите с нуля по образу и подобию.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: топологическая сортировка, сборка пакетов
Надо это в данной теме только Вам, а для других будьте всё-таки любезны пояснить. В репозитории как правило (за редким исключением вроде ядра) присутствует ровно одна версия каждого пакета. Вы хотите собрать репозиторий, где один пакет будет представлен несколькими версиями, или Вам нужно выбрать версию пакета, которую необходимо собрать для удовлетворения зависимостей других пакетов?
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: топологическая сортировка, сборка пакетов
Что не так - теперь понятно: кроме условий упорядочивания вводятся дополнительные условия совместимости. Непонятно как поступать в случае этих дополнительных конфликтов. Если считать это фатальной ошибкой, то на саму сортировку это никак не влияет, надо только доп. проверки провести, а если пытаться что-то делать, то это будет уже не сортировка, а набор действий: собрать А, собрать В, разобрать А, собрать С,..
В любом случае это уже явно не администрирование, не практический вопрос и даже, вероятно не UNIX. С этим вопросам надо к математикам обращаться.
В любом случае это уже явно не администрирование, не практический вопрос и даже, вероятно не UNIX. С этим вопросам надо к математикам обращаться.
Re: топологическая сортировка, сборка пакетов
... уже... обратился... к любимому профессору, проболтали около часу :о) да все больше о жизни, а после вспомнили анекдот про пчел ("все в мире фигня, кроме пчел...") на том и порешили ... :о)
п.с.
да, ну как я и пытался донести, это не конкретика, завязанная на дистриб/пакетник, а более общая задача, причем чуть ли не каждый божий день решаемая на любом предприятии/компании итд... :о)
хотел "прикрутить" доксиген, но посчитал, что слишком сложным будет процесс описания, забил... :о)
> явно не администрирование, не практический вопрос
ну дак самая подходящая тема, как мне показалось, это как раз "сюда" ... ну может и промахнулся малость "эпохой, местом и вселенной"
> Непонятно как поступать в случае этих дополнительных конфликтов
немного не то, подразумевается, что есть "возможные версии" у каждого пакет (сущности), в самом простом случае - это единственная версия... ну дак вот, смысл "этих" вариаций в том, что если "вдруг" поменялась версия "какого-нибудь" пакета, то автоматом будут меняться и соотв. версии зависимых от него пакетов (или как то предлагать список возможных версий, по идее конфликты - ДА, возможны, в случае "не стыковки" рекоменудемых версий, и ДА, хотелось бы это как то "контролировать" или хотя бы "видеть" что что-то не так, в текущем положении настроек/версий)... потому как если "сущностей" становиться слишком много, то в ручном режиме становиться сложновато весь зоопарк контролировать и вероятность ошибок увеличивается
ну вот... все имхо...
спасибо
п.с.
да, ну как я и пытался донести, это не конкретика, завязанная на дистриб/пакетник, а более общая задача, причем чуть ли не каждый божий день решаемая на любом предприятии/компании итд... :о)
хотел "прикрутить" доксиген, но посчитал, что слишком сложным будет процесс описания, забил... :о)
> явно не администрирование, не практический вопрос
ну дак самая подходящая тема, как мне показалось, это как раз "сюда" ... ну может и промахнулся малость "эпохой, местом и вселенной"
> Непонятно как поступать в случае этих дополнительных конфликтов
немного не то, подразумевается, что есть "возможные версии" у каждого пакет (сущности), в самом простом случае - это единственная версия... ну дак вот, смысл "этих" вариаций в том, что если "вдруг" поменялась версия "какого-нибудь" пакета, то автоматом будут меняться и соотв. версии зависимых от него пакетов (или как то предлагать список возможных версий, по идее конфликты - ДА, возможны, в случае "не стыковки" рекоменудемых версий, и ДА, хотелось бы это как то "контролировать" или хотя бы "видеть" что что-то не так, в текущем положении настроек/версий)... потому как если "сущностей" становиться слишком много, то в ручном режиме становиться сложновато весь зоопарк контролировать и вероятность ошибок увеличивается
ну вот... все имхо...
спасибо
если я ошибаюсь, то поправьте а не критикуйте :о)
Re: топологическая сортировка, сборка пакетов
to Bizdelnick
ваш второй вариант оказался более подходящим, вопросы по ходу
- какие есть особенности при использовании "маке"? (ну типа, имена пакетов должны быть одним словом, либо, видимо, в ковычках итд)
- рекурсивные/обратные зависимости, ну т.е. погранично/косячные моменты
- есть ли возможность заточить на "разруливание версий"? (если еще не понятно что-то по "версиям", спрашивайте, попробую более доступно обьяснить.то, как я вижу "эту фишку" с версиями)
- можно ли как ни будь сообразить алиасы для имен пакетов (записи зависимостей делать "простым" названием, а конечный "сортированный результат" выдавать "алиасами", т.е. более удобными именами, описателями, узелками на память, проч. доп.информацией
адд
вижу, взаимные зависимости - приводят к ошибке, жаль (как с этим бороться, или как то "сожительствовать"? т.к. подобные особенности имеют место быть даже иногда необходимыми...)
ваш второй вариант оказался более подходящим, вопросы по ходу
- какие есть особенности при использовании "маке"? (ну типа, имена пакетов должны быть одним словом, либо, видимо, в ковычках итд)
- рекурсивные/обратные зависимости, ну т.е. погранично/косячные моменты
- есть ли возможность заточить на "разруливание версий"? (если еще не понятно что-то по "версиям", спрашивайте, попробую более доступно обьяснить.то, как я вижу "эту фишку" с версиями)
- можно ли как ни будь сообразить алиасы для имен пакетов (записи зависимостей делать "простым" названием, а конечный "сортированный результат" выдавать "алиасами", т.е. более удобными именами, описателями, узелками на память, проч. доп.информацией
адд
вижу, взаимные зависимости - приводят к ошибке, жаль (как с этим бороться, или как то "сожительствовать"? т.к. подобные особенности имеют место быть даже иногда необходимыми...)
Код: Выделить всё
make: Circular c1 <- c dependency dropped.
если я ошибаюсь, то поправьте а не критикуйте :о)
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: топологическая сортировка, сборка пакетов
Строго одно слово без пробельных символов, никакие кавычки не помогут, насколько я помню.
Я по-прежнему не понимаю, что там требуется разруливать.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: топологическая сортировка, сборка пакетов
sunjob писал(а): ↑10.07.2017 04:34второй с ошибкой
Код: Выделить всё
a a1 a2 a3 b b1 b2 b3 a2 a2.1 b2 b2.1 a2.1 c b2.1 c c c1 c2
То, что вы написали, tsort видит так:
Код: Выделить всё
a a1
a2 a3
b b1
b2 b3
a2 a2.1
b2 b2.1
a2.1 c
b2.1 c
c c1
c2
И говорит, что c2 не парный, если вы хотите записать зависимость a a1 a2 a3 как последовательную, то надо писать
Код: Выделить всё
a a1
a1 a2
a2 a3
b b1
b1 b2
b2 b3
a2 a2.1
b2 b2.1
a2.1 c
b2.1 c
c c1
c1 c2
Тогда нормально отработает tsort.
При наличии цикла ответ будет выдан, но с ошибкой в stderr:
tsort
a b
b c
c d
d e
e f
d a
tsort: -: input contains a loop:
tsort: a
tsort: b
tsort: c
tsort: d
a
b
c
d
e
f
Re: топологическая сортировка, сборка пакетов
> NickLion
на этом варианте я пока крест поставил ... каменный :о) показался не совсем удобным
> Bizdelnick
доберусь до калавитуры, набросаю
по поводу "алиасов" - не чего не подскажете? оч. нужная получается "фишка"
на этом варианте я пока крест поставил ... каменный :о) показался не совсем удобным
> Bizdelnick
доберусь до калавитуры, набросаю
по поводу "алиасов" - не чего не подскажете? оч. нужная получается "фишка"
если я ошибаюсь, то поправьте а не критикуйте :о)
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: топологическая сортировка, сборка пакетов
Если правильно понял вопрос, то можно сделать, например, так:
Код: Выделить всё
#!/usr/bin/make -f
.PHONY: all
all: pkg1 pkg2 pkg3
pkg1_DESC = пакет нумер раз
pkg2_DESC = пакет нумер два
pkg3_DESC = пакет нумер три
pkg3: pkg1 pkg2
%:
@echo $($@_DESC)
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: топологическая сортировка, сборка пакетов
> Bizdelnick
да, смысль поймали верно :о)
но, еще один момент, если, допустим, один пакет без "алиаса/описания" (ну типа, и так все с ним ясно) - то он не будет выведен (что вполне логично)
можно ли как ни будь сделать так, что бы при отсутствии "алиаса" - выводилось "имя пакекета" (понимаю что "это кабсдец какой то"... если это, возможно) :о)
да, смысль поймали верно :о)
но, еще один момент, если, допустим, один пакет без "алиаса/описания" (ну типа, и так все с ним ясно) - то он не будет выведен (что вполне логично)
можно ли как ни будь сделать так, что бы при отсутствии "алиаса" - выводилось "имя пакекета" (понимаю что "это кабсдец какой то"... если это, возможно) :о)
если я ошибаюсь, то поправьте а не критикуйте :о)
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: топологическая сортировка, сборка пакетов
Некрасиво, но должно работать:
Код: Выделить всё
%:
@echo $(if $($@_DESC),$($@_DESC),$@)
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: топологическая сортировка, сборка пакетов
спасибо!
...
попробую обьяснить "задачку с версиями", на примере тех же пакетов
каким-то образом (я вот не знаю каким, но каким-то "способом" надо это сделать ) мы в начале вместе с "зависимостями" описываем еще и "версии" (не у всех пакетов, а у некоторых, особенных)
допустим
пакет_А - зависит от пакета_Б
пакет_Б - зависит от пакета_В
пакеты могут быть версий (вот эти версии и зависимости мы "описываем"):
пакет_А : 1,2,3
пакет_Б : 1,2,3
пакет_В : 1,2,3
ну и допустим (видимо это тоже как-то надо "узаконить") имеются по умолчанию версии для каждого пакета, пусть это будет "1"
теперь по зависимостям версий, очевидно же что "есть такое понятие" как зависимость версий, пусть она у нас будет очевидной: 1е версии - стыкуются с 1ми версиями зависимых пакетов итд
т.е. если допустим, МЫ в данной сборке принудительно вибираем 1ю версию пакета А: пакет_А.1,
то соотв. автоматом/пересчетом в выходном списке устанавливаются зависимые пакеты в соотв. 1е версии
далее, что-то изменилось, "утекла" версия пакетА.1 в "какашный мир", нашли дыры, пропатчили, устанавливаем принудительно версию пакет_А.2 - что приводит к соотв. реакции системы :о)
понятно, причин менять/варьировать версиями может быть очень много, но то, что это нужный механизм, по моему очевидно, особенно, при обновлении "сборки под другую версию линукса"
ну вот, надеюсь более понятно :о)
### UPDATE ###
ну и надо иметь в виду, что могут быть "иные" зависимости версий, типа пакет_А - всеяден до версий пакета_Б, или только определенные версии... (ну т.е. как в жизни)
...
попробую обьяснить "задачку с версиями", на примере тех же пакетов
каким-то образом (я вот не знаю каким, но каким-то "способом" надо это сделать ) мы в начале вместе с "зависимостями" описываем еще и "версии" (не у всех пакетов, а у некоторых, особенных)
допустим
пакет_А - зависит от пакета_Б
пакет_Б - зависит от пакета_В
пакеты могут быть версий (вот эти версии и зависимости мы "описываем"):
пакет_А : 1,2,3
пакет_Б : 1,2,3
пакет_В : 1,2,3
ну и допустим (видимо это тоже как-то надо "узаконить") имеются по умолчанию версии для каждого пакета, пусть это будет "1"
теперь по зависимостям версий, очевидно же что "есть такое понятие" как зависимость версий, пусть она у нас будет очевидной: 1е версии - стыкуются с 1ми версиями зависимых пакетов итд
т.е. если допустим, МЫ в данной сборке принудительно вибираем 1ю версию пакета А: пакет_А.1,
то соотв. автоматом/пересчетом в выходном списке устанавливаются зависимые пакеты в соотв. 1е версии
далее, что-то изменилось, "утекла" версия пакетА.1 в "какашный мир", нашли дыры, пропатчили, устанавливаем принудительно версию пакет_А.2 - что приводит к соотв. реакции системы :о)
понятно, причин менять/варьировать версиями может быть очень много, но то, что это нужный механизм, по моему очевидно, особенно, при обновлении "сборки под другую версию линукса"
ну вот, надеюсь более понятно :о)
### UPDATE ###
ну и надо иметь в виду, что могут быть "иные" зависимости версий, типа пакет_А - всеяден до версий пакета_Б, или только определенные версии... (ну т.е. как в жизни)
если я ошибаюсь, то поправьте а не критикуйте :о)