Пришла в голову мысль написать скрипт, который бы облегчил жизнь пользователям, которые пытаются запустить бинарные программы или игры, но не умеют ни фига
Рабочее название ldd-requires.
Дано: Некий бинарный файл, который требует какие-то библиотеки для своей работы.
Нужно:
1. Определить библиотеки, которых не хватает бинарнику
2. Найти в каких пакетах эти бинарники есть и подсказать пользователю как их установить.
Решение:
1 Необходимо определить какая разрядность ОС пользователя и разрядность бинарника. Тогда получим 4 варианта:
a) 64 битная ОС и 64 битный бинарник;
b) 64 битная ОС и 32 битный бинарник;
c) 32 битная ОС и 32 битный бинарник;
d) 32 битная ОС и 64 битный бинарник.
2. В зависимости от получившегося варианта предложить 4 варианта решения.
2.1 Для a и c вариант простой, можно предложить сделать:
apt-get install библиотека1.so библиотека2.so ...
2.2 Для варианта b нужно найти пакеты в которых содержатся эти библиотеки и выбрать пакеты начинающиеся с i586-*. Я сделал так:
... | while read line; do apt-cache search "$line"; done | grep i586| ...
2.3 Для варианта d уведомить пользователя, что файл этот он не сможет запустить.
3. Получился вот такой скрипт:
#!/bin/bash
if [ "`uname -m`" = "x86_64" ]
then
echo -e "У вас 64 битная ОС"
if [[ "`file $1`" =~ "32" ]]
then
echo -e "Файл 32 битный"
echo -e "Идёт поиск пакетов, в которых содержатся необходимые для запуска приложения библиотеки. Это может занять длительное время."
ldd $1 | grep 'not found'| cut -d ' ' -f1 | while read line; do apt-cache search "$line"; done | grep i586 | cut -d ' ' -f1 | tr "\t" " " |echo -e "Пожалуйста установите следующие библиотеки командой: \n apt-get install `tr "\n" " "`"
else
echo -e "Файл 64 битный"
ldd $1 | grep 'not found'| cut -d ' ' -f1 | tr " \t" " " |echo -e "Пожалуйста установите следующие библиотеки командой: \n apt-get install `tr "\n" " "`"
fi
else
echo -e "У вас 32 битная система"
if [[ "`file $1`" =~ "32" ]]
then
echo -e "Файл 32 битный"
ldd $1 | grep 'not found'| cut -d ' ' -f1 | tr " \t" " " |echo -e "Пожалуйста установите следующие библиотеки командой: \n apt-get install `tr "\n" " "`"
else
echo -e "Файл 64 битный. Вы не можете запустить 64 битный файл на 32-битной ОС"
fi
fi
Конвейеры страшно длинные получились
В-общем, прошу советов по окультуриванию кода. А также проверить работоспособность.