169 похожих чатов

Вот темы, которые было бы интересно послушать мне: 1) Пакетирование перловых

приложений/библиотек.

Минилла? Или что-то лучше изобрели?
Подвопрос - как добавлять в пакет ресурсные файлы (картинки например)?

2) Публикация перловых пакетов в закрытом контуре.

В гитлабе нет встроенного перлового реестра. Куда же класть? Держать в виде исходников в том же Гитлабе? Поднимать локальный спан?

3) Генерация удобной красивой html-документации из POD-а.

Не штучный файл в одну страничку экспортнуть, а всю документацию пакета превратить в набор взаимосвязанных страниц, в идеале с поиском.

4) Распил огромной кучи бессистемно перемешанных модулей/функций на отдельные независимые модули.

И чтобы ни единого разрыва ни одной циклической зависимости. Автоматизируется?

35 ответов

33 просмотра

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

Sergei Zhmylove
Мы легко можем тему #2 про метасрань заменить на ч...

На тему 1-2 один ответ - deb или rpm ) Но на самом деле да, очень интересно послушать бы

> В гитлабе нет встроенного перлового реестра. Куда же класть? Держать в виде исходников в том же Гитлабе? Поднимать локальный спан? Проще всего держать в виде исходников в том же Гитлабе (в подписанном коммите с подписанным тегом)

Михаил-Иванов Автор вопроса
Andrey Smirnov / 𝓪𝓵𝓵𝓽𝓮𝓻 /
> В гитлабе нет встроенного перлового реестра. Куд...

Исходники (репы) нельзя установить по спанфайлу рекурсивно. Ни один перловый установщик не умеет так делать, даже cpm.

Михаил Иванов
Исходники (репы) нельзя установить по спанфайлу ре...

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

Михаил-Иванов Автор вопроса
Михаил-Иванов Автор вопроса
basiliscos
ну вот на**я тебе рекурсия?

Ну здрасьте. А зависит от Б, тот от В. И всё, привет, перл не сможет поставить А.

Михаил Иванов
Исходники (репы) нельзя установить по спанфайлу ре...

У вас наверняка есть какой-то сборщик, который превращает исходники в артефакты для прода (rpm/deb/docker image). Вот он должен выкачивать репу с зависимостями (tgz скачанными безопасно с CPAN) с проверкой её целостности, и после этого запускать перловый пакетный менеджер. У голого cpm для этого недостаточно фич, я выше кидал ссылку на мой PR к мэйловому форку cpm.

Михаил Иванов
Ну здрасьте. А зависит от Б, тот от В. И всё, прив...

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

Михаил-Иванов Автор вопроса
basiliscos
а, б, и в ставишь всё в локальную репу. И всё он и...

Что значит "ставишь в репу"? Как в репу можно что-то поставить?

Михаил Иванов
Что значит "ставишь в репу"? Как в репу можно что-...

в локальный cpan (забыл как софт, вроде orepan есть и другие). ставишь ВСЕ свои зависимости, оно оттуда тащит всё (как переменную окружения задашь).

Михаил-Иванов Автор вопроса
Andrey Smirnov / 𝓪𝓵𝓵𝓽𝓮𝓻 /
У вас наверняка есть какой-то сборщик, который пре...

Так в этом и задача – как-то выкачать репы с зависимостями и cpm это не умеет рекурсивно. Собрать-то потом что угодно можно.

Михаил-Иванов Автор вопроса
basiliscos
в локальный cpan (забыл как софт, вроде orepan ест...

Ну да, если свой спан поднять. А выше речь шла о варианте хранить всё исходники просто в гит-репах. Вот из реп затруднительно рекурсивно скачать.

Михаил Иванов
Так в этом и задача – как-то выкачать репы с завис...

Вот мэйловый форк позволяет сделать максимально адекватно %)

Михаил Иванов
Ну да, если свой спан поднять. А выше речь шла о в...

там это ПОЧТИ тоже самое. Более... по-девопски, чтоли

Михаил Иванов
Ну да, если свой спан поднять. А выше речь шла о в...

Как вариант: зависимости ставить в конкретный каталог и его под гит и занести. Потом так же обновлять только в этом каталоге. При установке то и подзависимости качаются если перечислены в пакете. А для прода брать код из этой гит репы по тегу который будете проставлять после аудита кода. Тут гемор может быть с XS, который хоть и решаем, но это уже не "из коробки" как хотелось бы.

Игорь Ликсанин
Как вариант: зависимости ставить в конкретный ката...

Вообще, проблема, о которой пишет Михаил, действительно существует. Она связана с тем, что во всех популярных реализациях перловых менеджеров пакетов: cpanm, carton, cpm (а все они под капотом используют примерно одно и тоже) - зависимости качаются недетерминированно. Что приводит к тому, что в два разных запуска по одному и тому же cpanfile у вас могут скачаться разные наборы зависимостей за счёт того, что скачаются разные транзитивные зависимости. Простого решения этой проблемы нет (надо писать новый перловый пакетный менеджер). Но вы можете один раз скачать зависимости, закоммитить их в репу и (например каким-то CI механизмом) проверить, что без внешнего интернета этих зависимостей достаточно для сборки вашего приложения.

Andrey Smirnov / 𝓪𝓵𝓵𝓽𝓮𝓻 /
Вообще, проблема, о которой пишет Михаил, действит...

Некоторая сложность с этим в том, как именно организовать процесс безопасного скачивания зависимостей (что бы не допустить различных Supply Chain Attacks).

Sergei Zhmylove
Ага, весь local закоммитить 😳😳😳

Именно. Но проблема в том: как (например) сотруднику ИБ убедиться в том, что Алиса, которая скачивала tar.gz из CPAN-а не стала жертвой злоумышленника до коммита.

Andrey Smirnov / 𝓪𝓵𝓵𝓽𝓮𝓻 /
Именно. Но проблема в том: как (например) сотрудни...

Никак. Поэтому последний раз, когда мне нужно было писать на perl в закрытом контуре, заявки на добавление модулей в локальное зеркало cpan, выполнялись в лучшем случае по паре месяцев. Не знаю уж, это именно из-за безопасников или из-за админов.

Нет, не подписывалось. Думаю, считалось, что внутри контура атака с подменой не пройдёт(но на шоколадку не поспорю).

cppmm Kropachev
Нет, не подписывалось. Думаю, считалось, что внутр...

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

Andrey Smirnov / 𝓪𝓵𝓵𝓽𝓮𝓻 /
Ну, вот по нынешним меркам такое предположение сли...

Я был пользователем той системы, т.е. программистом, который качал модули из хранилища. Каковы были методы защиты как системы в целом, так и непосредственно хранилища, могу только предполагать. https для локального зеркала использовался с сертификатом, который подписан внутренним CA. Больше никакой защиты или проверки целостности не было.

Andrey Smirnov / 𝓪𝓵𝓵𝓽𝓮𝓻 /
Ну, вот по нынешним меркам такое предположение сли...

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

Denis Evdokimov
По моему представлению модуль должен скачиваться и...

Знаем, проходили с "проверкой независимых разработчиков". xz, HeartBleed и т.д. Но проблема то даже не в проверке. Разумеется, после коммита зависимостей надо запускать SAST и дополнительно смотреть глазами, что там в этом коммите. Проблема, что если будут таргетированно ломать вас (злоумышленник организует коммит заведомо компрометированной зависимости), вы ничего таким способом на практике в 99.99% случаев не найдёте. Так что проще дополнительно понадеяться на open source, но защитившить от SCA

Andrey Smirnov / 𝓪𝓵𝓵𝓽𝓮𝓻 /
Знаем, проходили с "проверкой независимых разработ...

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

Denis Evdokimov
Не уверен, что до конца понял. В моём варианте ес...

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

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта