polkit-gnome-0.105 для Slackware x86 (i386)

Пост, скорее из серии, «чтоб не пролюбить, и самому потом долго не искать», чем конкретная детальная инструкция. Понадобился мне PolicyKit для GDM под x86 Slackware (14.1), из коробки его нифига не было, во всяком случае в нужном дистрибьютиве, пришлось собирать. Не буду детально описывать геморрой со сборкой, ибо зачем вам описание четырех кривых рук из двух стран, хехе. Наибольший геморрой случился с правильной сборкой требуемой ему библиотеки mozjs-17.0, то ли я дурак, то ли оно изначально криво, но оригинал не собирался, ставился не туда, загаживал систему какими-то лишними файлами под 200 Мб, в общем тьфу и ужоснах. Совместными усилиями были найдены нужные слакбилды, так что тут краткая заметка для себя.

1. Собираем упомянутый mozjs-17.0 (aka js-185)
Sources
SlackBuild
Binary package (готовый собранный пакет) для x86 (i386) Slackware
2. Собираем polkit-0.133 (polkit-1)
Sources
SlackBuild
Binary package (готовый собранный пакет) для x86 (i386) Slackware
3. Наконец, собираем polkit-gnome (polkit-gnome-authentication-agent-1)
Sources
Binary package (готовый собранный пакет) для x86 (i386) Slackware

1 и 2 собираются стандартно
1. Распаковываем SlackBuild из архива в отдельный каталог.
2. Копируем туда архив с исходником.
3. Запускаем в этом каталоге ./Название_программы.SlackBuild Архив_с_исходниками.tar.gz

Финальный пакет замечательно соберется с помощью src2pkg, если первые установлены.

Да, чуть не забыл, само дерево жужжать не будет, т.е. polkit-gnome-authentication-agent-1 автоматически не запустится, его надо прописать в какую-нибудь иксовую автозагрузку и после того, как стартуют иксы, GDM и будет сформировано окружение пользователя, т.е. или в скрипт Xsession добавить строку /usr/libexec/polkit-gnome-authentication-agent-1 & или добавить его в автозагрузку приложений, как описано, например, здесь

Позже я вернусь к описанию автозагрузки иксовых программ отдельно, во всяком случае опишу автозапуск в GDM и IceWM

Отключение автомонтирования USB-устройств при запуске X (gdm, icewm, spacefm)

Попросили разобраться тут с одной небольшой проблемой, при старте X-server’а и вообще графического окружения выполнялось ненужное, и даже вредное автоматическое монтирование USB-устройств. На подключенных к терминальному серверу флешках хранились ключи для бухгалтерии.
Проблема была в том, что подключающимся через XDMCP к графической оболочке пользователям, автоматически становились доступны подключенные к серверу носители USB.
Было известно, что графический интерфейс представляет собой связку GDM, IceWM в качестве desktop-manager’а и SpaceFM в качестве файлового менеджера. Исследование было недолгим, ибо такая конфигурация по умолчанию применяется в Absolute Linux, легковесном дистрибьютиве Slackware, который я же и посоветовал этой фирме года 3 назад 🙂
В автомонтировании был виновен SpaceFM, файловый менеджер. Поскольку, в самом менеджере все настраивается через графический интерфейс, и изменить настройки (локальные) может любой пользователь, то надо было искать другой выход.
Монтирование SpaceFM, естественно, осуществляет не сам, а использует udevil. Соответственно, наиболее простое, быстрое и секурное решение — подправить конфиг udevil. Выкладываю финальный параноидальный вариант, где udevil запрещено монтировать все, что не было примонтировано до старта графической оболочки, и от любых пользователей (сменные носители, сетевые шары, оптические носители). Хотите монтировать — добро пожаловать в sudo.

Конфиг: /etc/udevil/udevil.conf

Конфиг прекрасно документирован, правда на буржуйском, так что его можно переделать под свои нужды.

На PasteBin
Скачать с Mega.nz

Скрипт для автоматического обновления паролей бесплатного VPN vpnbook.com

Как-то выкладывал конфигурационные файлы для PPTP-VPN от бесплатного VPN-сервиса http://vpnbook.com.
Правда у сервиса есть небольшой недостаток, как и у многих других бесплатных VPN, периодически меняется пароль. Благо, что пароль появляется у них на странице в текстовом виде, без всяких каптч, картинок и яваскрипта, и вполне просто автоматизировать его обновление, чтобы вручную не менять его в конфигурационных файлах после изменения на сайте.

Определение основных переменных

VPNBOOKPAGE="http://www.vpnbook.com/#pptpvpn"
WORKDIR="/tmp/"
HTMLFILE="vpnhtml.txt"
PASSANCOR="Password:"
VPNBOOKPASS=""
FILEPASS=""
PEERSDIR="/etc/ppp/peers/"
PEERSFILES[0]="vpnbook-e214"
PEERSFILES[1]="vpnbook-e217"
PEERSFILES[2]="vpnbook-de233"
PEERSFILES[3]="vpnbook-us1"
PEERSFILES[4]="vpnbook-us2"
PEERSFILES[5]="vpnbook-ca1"

VPNBOOKPAGE — адрес, по которому доступен текущий пароль.
WORKDIR — рабочий каталог, куда будем сохранять полученную с сайта HTML-страницу с паролем
HTMLFILE — имя сохраняемого файла
PASSANCOR — Ключевое слово, по которому будем определять, где именно на странице пароль:

VPNBOOKPASS — тут будем хранить пароль, полученный с сайта
FILEPASS — тут будет пароль, сохраненный в данный момент в конфигурационном файле
PEERSDIR — директория, в которой хранятся конфигурационные файлы для соединения с VPN-серверами vpnbook
PEERSFILES[0]...PEERSFILES[5] — массив с именами конфигурационных файлов

Получение пароля с сайта

I. Сначала, с помощью wget, получим HTML-страницу, содержащую пароль.

echo "GET VPNBOOK PASSWORD v 0.2" #приветствие

rm $WORKDIR$HTMLFILE #удаляем текущий файл
echo "Get vpnbook page..."
wget -P $WORKDIR --default-page=$HTMLFILE --header="Content-type: text/plain" $VPNBOOKPAGE #сохраняем HTML-страницу

ВНИМАНИЕ! Существующий файл с сохраненной HTML-страницей надо обязательно удалить, иначе wget при сохранении страницы добавит к имени дополнительно .1 (.2 .3 и т.д.).

Параметры утилиты wget:
-P $WORKDIR — установка рабочего каталога, указанного в переменной $WORKDIR
--default-page=$HTMLFILE — установка имени файла, под которым в рабочем каталоге будет сохранена полученная с сайта HTML-страница. Имя указывается в переменной $HTMLFILE
--header="Content-type: text/plain" — передаем серверу заголовок, в котором указываем, в каком виде хотим получить страницу (text/plain). Лучше не упускать этот момент, одно время сервер почему-то отдавал без этого заголовка сжатую HTML-страницу, и анализировать ее потом было некузяво.

II. Проверяем, сохранилась ли страница:

if [ ! -f $WORKDIR$HTMLFILE ]; then
    echo "ERROR: Page not saved"
    exit 1
fi

III. Вытаскиваем пароль из сохраненного HTML-файла:

VPNBOOKPASS=`cat $WORKDIR$HTMLFILE|grep "$PASSANCOR"|head -n1|sed -e :a -e 's/<[^>]*>//g;/</N;//ba'|sed 's/.$//'|awk ' {print $2} '`

1. Выводим содержимое файла на stdout командой cat $WORKDIR$HTMLFILE
2. Передаем вывод команде grep, она фильтрует строчку с содержимым, указанным в переменной $PASSANCOR, т.е. строчку, содержащую слово "Password:" и сам пароль. На самом деле команда grep отфильтрует две строки, еще и с виндовыми концами строк:

3. Обрабатываем строчку дальше с помощью команды head -n1 Она получит из вывода команды grep только первую строчку (-n1)

4. Команда sed -e :a -e 's/<[^>]*>//g;/</N;//ba' с вот этим диким регулярным выражением, удалит HTML-теги. Регулярка не моя, я нашел на просторах интернетов.

5. Следующая команда sed 's/.$//' избавит строку от лишнего виндового символа конца строки.

6. Наконец, утилитой awk, которая обрабатывает строки, воспринимая содержимое, как набор полей разделенных разделителем (по умолчанию пробел), вытаскиваем из строки непосредственно сам пароль. awk ' {print $2} '

wra2ezEz

Записываем результат в переменную VPNBOOKPASS, обернув всю команду в обратные кавычки (``)
Далее устанавливается размер массива, хранящего имена файлов настройки (специально так сделал, чтобы если добавится еще один файл конфигурации, количество обрабатываемых файлов обновлялось автоматически): CTR="${#PEERSFILES[*]}"
Далее инициализируется счетчик цикла I="0"

В цикле из массива извлекаются имена файлов, к ним добавляется путь к директории их содержащей, и эти данные передаются функции passwork, которая получает пароль, сохраненный в файле конфигурации, и в случае необходимости его меняет на пароль, полученный с сайта.

until [ "$CTR" -eq "$I" ]; do
    passwork $PEERSDIR${PEERSFILES[I]}
    let "I+=1"
done

Замена пароля в файле конфигурации соединения VPN

Этим в скрипте занимается отдельная функция passwork(), которой в качестве параметра передается полный путь к файлу конфигурации соединения. Вот ее код:

passwork()
{
    echo -n "Checking $1..."
    if [ -e $1 ]; then #file exist
    	COUNT=`cat $1|grep "password" -c`
	if [ $COUNT -eq 1 ]; then # strochek s parolem 1
	    #vitaskivaem password i udalyaem kavichki
	    FILEPASS=`cat $1|grep "password"|awk ' {print $2} '|sed 's/\"//g'`
	    echo -n "password "$FILEPASS
	    
	    if [ "$FILEPASS" = "$VPNBOOKPASS" ]; then #proverka parolya
		echo " not replaced."
	    else
		#backup file
		cp $1 $1".bak"
		echo "...file backuped..."
		sed -i 's/'$FILEPASS'/'$VPNBOOKPASS'/g' $1 #replace password
		echo "...replaced!"
	    fi
	    
	else #>1 ili 0
	    echo  " Peer file format error"
	fi
    else
    
	echo  " $1 not found"
    fi
}

В зарезервированной переменной $1 находится параметр, переданный функции из основной программы, в данном случае путь к файлу конфигурации соединения.
Сначала проверяется, существует ли файл:

...
if [ -e $1 ]; then #file exist
...

Если он существует, продолжаем работу, если нет — выводим сообщение об ошибке и выходим из функции:

...
else
echo " $1 not found"
fi
...

Сам конфигурационный файл выглядит так:

debug
#nodetach
unit 1
remotename ca1.vpnbook.com
ipparam vpnbook-ca1
pty "pptp ca1.vpnbook.com --nolaunchpppd"
name vpnbook
user vpnbook
password "wra2ezEz"
require-mppe-128
refuse-eap
noauth
file /etc/ppp/options.pptp

Далее получаем количество строк, содержащих конфигурационный параметр password. Подсчет нужных строк можно выполнить командой grep с ключом -c

COUNT=`cat $1|grep "password" -c`

Строк с параметром password в конфигурационном файле должно быть строго 1, пароль заключается в кавычки.
Проверяем количество искомых строк:

...
if [ $COUNT -eq 1 ]; then # strochek s parolem 1
...

Если строка найдена, и она одна, то продолжаем работу, иначе выдаем сообщение об ошибке и выходим из функции:

...
else #>1 ili 0
echo " Peer file format error"
fi
...

Извлекаем содержащийся в конфигурационном файле пароль в переменную FILEPASS:

FILEPASS=`cat $1|grep "password"|awk ' {print $2} '|sed 's/\"//g'`

1. Читаем файл с помощью команды cat: cat $1
2. Отфильтровываем строку с паролем: grep "password"
3. Извлекаем пароль (в кавычках) с помощью awk: awk ' {print $2} '
4. С помощью sed удаляем кавычки: sed 's/\"//g'`

Далее сравниваем содержимое переменной FILEPASS, т.е. пароль из обрабатываемого файла конфигурации, с паролем, полученным с сайта vpnbook. Он в переменной VPNBOOKPASS.

...
if [ "$FILEPASS" = "$VPNBOOKPASS" ]; then #proverka parolya

Если пароли идентичны, то выдаем сообщение, что пароль не изменен. Иначе, делаем копию файла конфигурации (cp $1 $1".bak") и заменяем пароль с помощью sed непосредственно в обрабатываемом файле (ключ -i и указание пути к файлу в качестве последнего параметра команды):

sed -i 's/'$FILEPASS'/'$VPNBOOKPASS'/g' $1 #replace password

Попутно выводим сообщения о ходе процесса.

Готовый скрипт

1. На PasteBin
2. Скачать с Mega.NZ

Используемые источники

1. Команда head
2. Однострочные скрипты sed
3. Удаление кавычек с помощью sed
4. Краткое описание awk

[Скачать копии источников в формате PDF]
Заметка в формате PDF

Создание загрузочного образа диска DOS в Slackware Linux

Продолжая тему загрузочных образов.
Расскажу, как сделать загрузочный образ диска DOS в который можно добавить свои программы, загружаемый по сети или с CD-диска. На примере тестового образа, который использовал в одной из предыдущих заметок.
Загрузчик, соответственно, оставлю такой же, какой использовал ранее — SYSLINUX. Вообще SYSLINUX, а точнее memdisk поддерживает кроме ISO загрузку образов дискет и жестких дисков, в т.ч. и сжатых gzip’ом.
С дискетами возникает небольшая проблема — файл образа должен быть строго определенного размера (хотя SYSLINUX поддерживает и нестандартные размеры дискет, но все равно они должны быть строго определенными), в образе дискеты, естественно, не может быть два логических раздела и т.д. Чтобы не заморачиваться с этими ограничениями, буду делать образ жесткого диска, его размер можно определить произвольно, главное, чтоб влез в память машины, на которой его потом будем загружать.

Подготовка системы

1. Устанавливаем простенькую виртуальную машину QEMU, для DOS ее вполне хватит.
2. Устанавливаем multipath tools, для того, чтобы получить доступ к файлам, расположенным в образе диска из Linux (ну если мы хотим добавить в образ какие-нибудь программы). У меня multipath tools были уже установлены, ибо нужны для работы с шифрованными контейнерами truecrypt/tcplay
Я установил необходимые программы с помощью менеджера sbopkg без всяких дополнительных опций при сборке.
3. Если будем работать на удаленной машине через SSH, то настраиваем X11-forwarding
4. Создаем отдельный каталог в котором разместим необходимые образы дисков
5. Скачиваем выдранный из Hiren’s boot CD образ с досовыми утилитами. Или делаем его сами, как я описывал ранее
6. Проверяем, все ли работает, запускаем с досом, выдранным из HBCD:

qemu-system-i386 -cdrom dos.iso -boot d
где:
qemu-system-i386 — программа QEMU для 32-разрядных систем. В 64-разрядной версии Linux необходимо использовать команду qemu-system-x86_64
-cdrom — указываем программе местонахождение ISO-образа диска (тут dos.iso, расположенный в текущем каталоге).
-boot d — указываем программе, что необходимо грузиться с виртуального CDROM’а (из указанного образа диска).

Должно получиться как-то так:


Во втором меню нужно выбрать пункт Next, далее File Managers и Volkov commander
Если Volkov Commander успешно загрузился, то закрываем QEMU и приступаем к созданию образа диска DOS

Создание образа

Первым делом создаем пустой файл (заполненный нолями) нужного размера, например 10 мегабайт. Делается это с помощью стандартной утилиты dd
dd if=/dev/zero of=diskc.img bs=10M count=1
Грузимся опять в QEMU с ISO-образа, но подключив созданный образ диска:
qemu-system-i386 -cdrom dos.iso -hda diskc.img -boot d
Выбираем в загрузочном меню HBCD Volkov Commander
Продолжение со множеством иллюстраций под катом

Готовый образ можно сжать gzip’ом, включить в состав загрузочного ISO-образа или загружать по сети. Пример конфига для ISOLINUX описан здесь

Примеры

Как и что можно таким образом запускать:


Acronis Disk Director for DOS


Acronis True Image for DOS

Скачать

Готовый образ диска
Заметку в формате PDF

Венденачало

Как выглядели первые версии Windows
Windows 1.03


Внезапно, так и не удалось заставить работать в ей мышь.
Windows 2.01

В этой мышь уже работала, но на эмуляторе оно криво, как-нибудь сделаю видео запуска сего раритета на «железе» или же на более лучшем эмуляторе/виртуалке, а пока поверьте на слово, что можно порисовать в Paint, поиграть в Reversi, или же набрать текст в Блокноте или Write.

Впрочем, можете сами скачать и поиграться:
Windows 1.03 (осторожно, венда хранится в рашке)
Windows 2.01 (осторожно, венда хранится в рашке)