Когда две разные версии сетевой серверной программы устанавливаются side-by-side, то вместе не запускаются, так как используется один и тот же номер сокета.
Можно было бы изменить номер порта старого инстанса, чтобы порт-по-умолчанию всегда относился к самой свежей версии., но это противоречит идее «сохранить всё так, как оно работало, максимально ничего не трогая». В качестве варианта предлагается изменять номер сокета для нового инстанса (чтобы не перенастраивать все старые клиенты, работающие со старой версией сервиса, например СУБД). Идеально было бы знать, какие версии каких клиентов соединяются с указанной версией сервиса, для этого их надо выявлять и записывать (документировать).
Когда коллизия между параллельными установками возникает по файловой системе, то пакетный менеджер делает симлинк на ту версию, которая должна использоваться по-умолчанию. Возможно ли такое с по́ртами сокетов - принимать соединения на порте по-умолчанию и перенаправлять на нужный? Есть ли такой механизм в пакетном менджере portage (думаю, что нет).
ChatGPT предлагает имитировать такой «симлинк-для-сокетов» при помощи настроек iptables. Имитация «симлинка для сокетов» с помощью настроек iptables может быть достигнута с использованием правил перенаправления портов (port forwarding).
Например, если есть два сервера, слушающих на портах 8080 и 8081, и хочется, чтобы все входящие соединения на порт 80 попадали на сервер, слушающий порт 8080, можно использовать следующую команду:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
Хорошо бы, чтобы это всё было поддержано в gentoo .eclass-файлом с документацией, или какой-нибудь утилитой командной строки с обёрткой .eclass-ом.
А что вы думаете вообще о слотировании, версиях по-умолчанию и симлинках? А то может не надо делать эти симлинки и тогда бы не понадобилась бы фича alternatives
Некоторые скажут, что alternatives, это для другого. Значит для этого, тогда, получается, вообще ничего нет.