Запуск Kicad 2007 на GNU/Linux 2022 года

В комментариях на 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

Отправить ответ

avatar
  Subscribe  
Сообщать по почте