В комментариях на Opennet некий человек написал, что ему в 2022 году понадобилось открыть проект, сделанный в Kicad 2007-го года, а современные версии Kicad не смогли его открыть. Он нашел в интернете готовые бинарники Kicad 2007 года, но не смог их запустить.
Весьма распространено ошибочное на мой взгляд мнение, что в Linux очень плохо с бинарной совместимостью. Да, есть проблемы, но не такие, какими их часто описывают. Ради интереса попробовал запустить эти бинарники. Буду запускать их в контейнере.
Хостовая ОС — ROSA Fresh 12 (rosa2021.1), XFCE.
Ставлю скрипт snr, который позволяет запускать графические программы в systemd-nspawn:
sudo dnf install snr
Скачиваю с ABF свежую сборку rootfs (chroot) rosa2021.1 и распаковываю ее:
sudo -i cd /var/lib/machines btrfs subvol create rosa2021.1_kicad2007 cd rosa2021.1_kicad2007 wget --content-disposition <ссылка> tar -xvf *.tar.xz rm -fv *.tar.xz exit
Вместо btrfs subvol create можно просто mkdir.
Вхожу в контейнер:
snr rosa2021.1_kicad2007
Описанные выше действия делать не понадобилось бы, если бы не использовал контейнер. Описанные ниже понадобилось бы сделать в любом случае.
Скачиваю и распаковываю архив с готовыми бинарниками по указанной человеком ссылке:
dnf install wget wget https://kicad-downloads.s3.cern.ch/archive/old_versions/kicad-2007-11-29-c.tgz tar -xvf kicad-2007-11-29-c.tgz
В README.LINUX написано, что бинарники для Linux лежат в папке linux, перейдем в нее:
cd kicad/linux
В ней лежит исполняемый ELF-файл kicad. Он 32-битный, чрут у меня 64 битный для моделирования запуска без контейнеризации и виртуализации. Смотрим, каких библиотек не хватает в системе:
# ldd kicad linux-gate.so.1 (0xf7efb000) libXxf86vm.so.1 => not found libgtk-x11-2.0.so.0 => not found libgdk-x11-2.0.so.0 => not found libatk-1.0.so.0 => not found libgdk_pixbuf-2.0.so.0 => not found libm.so.6 => /lib/libm.so.6 (0xf7dff000) libpangoxft-1.0.so.0 => not found libpangox-1.0.so.0 => not found libgthread-2.0.so.0 => not found libpango-1.0.so.0 => not found libgobject-2.0.so.0 => not found libgmodule-2.0.so.0 => not found libdl.so.2 => /lib/libdl.so.2 (0xf7df7000) libglib-2.0.so.0 => not found libpangoft2-1.0.so.0 => not found libSM.so.6 => not found libgcc_s.so.1 => not found libc.so.6 => /lib/libc.so.6 (0xf7be4000) libX11.so.6 => not found libXinerama.so.1 => not found libpthread.so.0 => /lib/libpthread.so.0 (0xf7bc1000) /lib/ld-linux.so.2 (0xf7efd000)
Теперь нужно поставить все недостающие 32-битные библиотеки. Благодаря механизму provides в rpm не нужно знать названия пакетов с этими библиотека. Просто перечисляем их для пакетного менеджера:
dnf install 'libXxf86vm.so.1' 'libgtk-x11-2.0.so.0' 'libgdk-x11-2.0.so.0' 'libatk-1.0.so.0' 'libgdk_pixbuf-2.0.so.0' 'libpangoxft-1.0.so.0' 'libpangox-1.0.so.0' 'libgthread-2.0.so.0' 'libpango-1.0.so.0' 'libgobject-2.0.so.0' 'libgmodule-2.0.so.0' 'libglib-2.0.so.0' 'libpangoft2-1.0.so.0' 'libSM.so.6' 'libgcc_s.so.1' 'libX11.so.6' 'libXinerama.so.1'
Установилось 59 пакетов. Стоит отметить, что если бы у меня была 32-битная ОС с каким-нибудь DE, то все эти библиотеки уже были бы установлены.
Запускаем kicad:
./kicad
Он запустился! Вот он, красавчик:
Как видите, грамотно собранный бинарник, использующий только стабильные ABI (в т.ч. glib2.0 и GTK+2), работает и через 15 лет. Кстати, ABI GTK+3 тоже стабилен. Изменения ABI можно посмотреть здесь: https://abi-laboratory.pro/index.php?view=tracker
Отправить ответ