Сегодня решил вынести в массы ещё один написанный мною скрипт. Это модификация скрипта yeoworks, в котором я оставил только конвертирование 32х битных пакетов в 64х битные и упростил процесс запуска. Возможно кто-нибудь из новичков заинтересуется, как работает скрипт, по этому под катом подробное описание.
Если попытаться запустить файл предназначенный для 64х битной системы, то мы увидим такое сообщение:
Но это легко исправить ниже описанным скриптом. Кстати, я обратил внимание, что ошибки в linux на порядок проще понять и решить, чем в windows. Например виндовская ошибка 0xc000000f … что это такое и что с этим делать догадается далеко не каждый.
А теперь приступим к скрипту. Для начала создаим файл с любым названием в папке со скриптами.
gedit ~/.gnome2/nautilus-scripts/'32>64'
Если в адресе есть пробелы или спец символы, то берём имя в кавычки.
В открывшийся файл вставляем следующий код
#!/bin/bash
N=`basename "$*"`
D="$PWD/$N"
mkdir tukstmp
dpkg-deb -x $N tukstmp
dpkg-deb --control $N tukstmp/DEBIAN
sed -i 's/i386/all/' tukstmp/DEBIAN/control
dpkg -b tukstmp 64_$N
rm -rf tukstmp/*
rmdir tukstmp &&
$(zenity --question --text "Установить $N ?" );
if [[ $? == 0 ]]; then
gnome-terminal -x bash -i -c "
sudo dpkg -i 64_$N
"
else
exit 0
fi
Сохраняем файл и делаем его исполняемым
chmod +x ~/.gnome2/nautilus-scripts/'32>64'
Скрипт готов. Что же он делает?
Если нажать правой кнопкой по deb пакету и выбрать в сценариях 32>64
То скрипт, создаст копию файла, но с возможностью запуска на 64х разрядных системах и спросит: «установить ли программу?»
А теперь, как и обещал, объяснения работы скрипта для новичков.
Первая строчка указывает, что именно bash отвечает за следующие команды. Кроме баша есть и другие языки, например python.
Следующими 2-мя стоками мы присваиваем переменным N и D значения. Первой переменной присваиваем имя файла, а второй полный путь. $PWD это стандартная переменная в UNIX системах показывающая папку в которой мы находимся.
Далее создаём папку tukstmp и распаковываем туда deb пакет (подробнее в man dpkg)
Команда sed -i 's/i386/all/'
ищет в указанном файле (tukstmp/DEBIAN/control ) слово i386 и меняет его на all.
И затем заново собираем deb пакет, но с припиской 64_
Теперь можно удалить, то что мы по распаковывали (man rm для более подробной информации).
Теперь начинается часть с вопросом об установке.
Zenity позволяет создавать графические элементы с помощью bash реализации. К счастью помощь по zenity на русском языке — zenity —help
zenity с вопросом может принимать только 2 значения: да и нет, соответственно переменная будет иметь вид $0 и $1.
Теперь переходим к оператору ЕСЛИ(if). В нашем случае если zenity является нулём, то это означает, что ответ был да и тогда мы открываем терминал и просим ввести пароль от sudo для установки программы.
Если ответ был нет и переменная приобрела значение отличное от $0, то нечего не делаем.
Вот и всё. Bash это просто и интересно :)
Достаточно выполнить установку c опцией игнорирования архитектуры пакета:
dpkg -i —force-architecture package.deb
Скрипт сработал. А опция игнорирования архитектуры пакета, почему-то, ни разу ещё не сработала.
Так я не понял: что и iа32-lib или getlibs теперь не нужно ? Простo переписал архитектуру — перепаковал пакет и все ?