И снова здравствуйте, мои дорогие. Как вы боритесь с неблагонадёжным программным обеспечением? Вот, возьмём к примеру браузер. Браузер тащит подсистему печати и следовательно дырявый как ситечко ghostscript. Ни то ни другое мне не нужно (в браузере так точно).
Итак, я создаю заглушку, делаю следующее:
desktop ~ # cat cupsnop.c
void cupsGetOption(void){return;}
void cupsLastError(void){return;}
void cupsFreeDests(void){return;}
void cupsGetDests2(void){return;}
void cupsGetDests(void){return;}
void cupsGetDest(void){return;}
void cupsGetNamedDest(void){return;}
void cupsGetPPD2(void){return;}
void httpError(void){return;}
void cupsGetPPD(void){return;}
void httpConnectEncrypt(void){return;}
void httpClose(void){return;}
void httpBlocking(void){return;}
void ppdOpenFile(void){return;}
void ppdMarkDefaults(void){return;}
void ppdLastError(void){return;}
void ppdErrorString(void){return;}
void cupsParseOptions(void){return;}
void cupsMarkOptions(void){return;}
void cupsFreeOptions(void){return;}
void ppdFindMarkedChoice(void){return;}
void ppdFindOption(void){return;}
void ppdFindChoice(void){return;}
void ppdFindAttr(void){return;}
void ppdClose(void){return;}
desktop ~ # cat make.sh
#!/bin/sh
gcc -s -shared -fpic -march=native -O2 -pipe -fstack-clash-protection -fstack-protector-strong --param=ssp-buffer-size=4 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wl,-O1 -Wl,--as-needed -Wl,--sort-common -Wl,-z,relro -Wl,-z,now -Wl,--hash-style=gnu -Wl,--no-copy-dt-needed-entries -Wall -Wextra cupsnop.c -olibcups.so.2
mv -v libcups.so.2 /lib64/libcups.so.2
desktop ~ # ./make.sh
renamed 'libcups.so.2' -> '/lib64/libcups.so.2'
И всё хорошо, все довольны и счастливы. Но браузер также тащит кучу дряни вроде gtk, а та в свою очередь тащит atk, at-spi2-atk с at-spi2-core, причём, не найдя любую из зависимостей категорически отказывается собираться. Я считаю, это не дело, так не должно быть.
В браузерах есть огромная беда с файловыми диалогами на гтк – они неудобные, выглядят очень инородно, и сразу затирают иксовый буфер выделения среди прочего. Это ужасно. Как мне рассказывали старшие товарищи, в opensuse файловые диалоги как-то патчили, чтобы сделать те человеческими. Можно ли такое же сделать, например, с хромом?
И ещё, браузер запускается без ffmpeg (выдаёт libffmpeg.so => not found), при этом с видео даже проблем нет. Ну или они есть, это не важно (их нет). А вот с cups так не работает, приложение отказывается запускаться, если библиотека не найдена. Что это такое? Пробовал patchelf или что-то подобное для удаления зависимостей, так программа молча зависала при попытке её запустить.