среда, 28 сентября 2011 г.

Проблемы с дисками по ОРКСЭ и их решение


В школы всей нашей необъятной Родины пришёл новый предмет  "Основы религиозных культур и светской этики". И книжки есть, и диски. Вроде всё здорово, но с этими дисками есть две проблемы: 
  • нужно устанавливать на каждый компьютер в классе
  • учебный комплекс хоть и написан на Qt и нормально запускается под Wine, но тестовые задания, использующие Flash, почему-то не везде работают.
Я написал небольшой php-скрипт, который решает обе эти проблемы разом, да еще и место на жестких дисках экономит: весь контент будет размещаться на сервере или компьютере учителя), а дети будут пользоваться им через браузер.
Теперь по порядку:
Нужно установить эти диски на компьютер. Если при установке ничего не менять, то диски установятся в ~/.wine/drive_c/Program Files/
Теперь нужно взять контент.
Рассмотрим на примере диска "Основы православной культуры ". Я его установил в ~/.wine/drive_c/Program Files/prav/ (см. Рисунок 1)
Хочу заметить, что  необязательно устанавливать диски именно на тот компьютер, который будет веб-сервером. Например, можно скинуть необходимые папки (о них чуть ниже) на диск/флешку/и т.д. и перенести на сервер. А нужны будут следующие каталоги: DATA и THEME.
рис. 1
каталог data брать со всем его содержимым (папка object и файл content.xml) и каталог theme

Причем THEME можно взять с любого диска - там хранятся элементы интерфейса программы, а в моем скрипте используются только иконки, так что при желании из каталога THEME можно удалить лишние неиспользуемые файлы.

Для того, чтобы скрипт мог работать, необходим веб-сервер с поддержкой PHP5, а тот в свою очередь мог достучаться до simplexml. Предположим, на компьютере, который будет сервером, этого ничего нет, поэтому смело командуем:
# apt-get install apache2 php5 php-xml-serializer
Поставится и веб-сервер Apache2, и PHP5 c поддержкой XML.
Обычно (я ставил на Ubuntu) каталог веб-сервера находится в /var/www
Именно туда и нужно положить вышеупомянутые папки data и theme. Обращаю внимание на то, что доступа на запись в каталог веб-сервера у обычного пользователя нет - скопируйте папки от имени root-а. Получившуюся папку /var/www/data переименуйте в /var/www/ort (или prav, или pravoslav - кому как нравится). Извлеките из ЭТОГО АРХИВА файлы INDEX.HTML и STYLE.CSS в /var/www, а INDEX.PHP и ICO.PNG в /var/www/ort
Чтобы было понятней, вот рисунок.

Подредактируйте файл /var/www/index.html под свои нужды и зайдите через браузер на веб сервер.



По аналогии перенесите контент с другого диска.

PS: Пока не получается сделать просмотр видео фрагментов. Но их можно показать и с учительского компьютера через проектор - найти файлы video.flv
Специально для ленивых и тех, кому дороги ресурсы сервера, ВЫКЛАДЫВАЮ АРХИВ С ГОТОВЫМИ СТАТИЧНЫМИ HTML ФАЙЛАМИ, чтобы не было нужды ставить PHP - достаточно будет любого веб-сервера. 
PHP и CSS код далек от идеала, но он работает, так что :P
Все вопросы задавайте в комментариях - боюсь, что рядовая Мариванна даже по такой простой (ну, я так думаю)  инструкции не справится с установкой.

пятница, 1 апреля 2011 г.

Почта (и не только) через iptables

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

Надеюсь мой способ пригодится людям, столкнувшимся с подобной задачей.
Вот достаточно простой способ:

1. Разрешим пересылку пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward
2. Командуем iptables пускать нас на почту, да и вообще куда угодно
а) для всех клиентов в подсети 192.168.0.0
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
б) для конкретного клиента по IP-адресу
sudo iptables -t nat -A POSTROUTING -s 192.168.0.22 -o ppp0 -j MASQUERADE
СЛЕДУЕТ ОБРАТИТЬ ВНИМАНИЕ НА СЛЕДУЮЩИЕ МОМЕНТЫ:
  1. Чтобы каждый раз не выполнять команду echo 1 > /proc/sys/net/ipv4/ip_forward, нужно в файле /etc/sysctl.conf раскомментировать (или вписать) такую строчку:
    net.ipv4.ip_forward=1
  2. Команду echo 1 > /proc/sys/net/ipv4/ip_forward не получится выполнить через sudo. Сначало нужно выполнить sudo su, а уже потом, с правами root-а делать echo
  3. На клиентской машине в качестве шлюза должен быть указан адрес компьютера, на котором настраиваем iptables.
  4. На клиентской машине должен быть указан адрес DNS сервера.
  5. После перезагрузки настройки iptables слетят, поэтому можно добавить команду, например эту: iptables -t nat -A POSTROUTING -s 192.168.0.22 -o ppp0 -j MASQUERADE в файл /etc/rc.local, чтобы она автоматически срабатывала при запуске системы
  6. Указав интерфейс ppp0, я имел ввиду внешний интерфейс, т.е. это может быть и eth0

Ошибка при копировании файлов в MidnightCommander по SSH

Буквально вчера произошла одна печальная история, которая чуть не превратилась в настоящую трагедию. Вот как было дело. Нужно было перетащить по сети файлы с одной Linux-машины(AltLinux Юниор 4 из комплекта СПО) на другую (Ubuntu 10.4). Запустил MC, подцепился с Альта к Убунте и скопировал файлы. Всё вроде нормально, штатно.
Перебил Альт, поставил вместо него Убунтушку, стал заливать инфу обратно по тем же способом - бац!!! а от инфы осталась только структура каталогов. Файлов нет! Это был ппц. Всё обошлось, так как на другом компе нашлась еще одна копия документов, так что именно трагедии удалось избежать. Теперь немного технических подробностей:
1. Копировалось всё на раздел с NTFS
2. Файлы и каталоги были с русскими именами

Сейчас пробую повторить копирование с AltLinux 4.1 на Ubuntu 10.4, тоже на NTFS раздел - файлы как бы копируются, но на самом деле не появляются. При этом нет разницы, русские имена файлов или нет.

При копировании с Ubuntu 10.4 на такую же - если не убрать галку "Сохранять атрибуты", то ругается, но можно пропустить и файл копируется. А вот если копировать папку, то сама папка скопируется, а файлы с русским именами внутри неё - фиг.

Через GnomeCommander всё нормально копируется, равно как и через Nautilus.

Видать баг самого MC, причём давно, да ещё и в разных дистрибутивах...

среда, 30 марта 2011 г.

Склеить несколько изображений с помощью ImageMagic

Продолжаю пополнять свой "склерозник-шпаргалку". И снова в центре внимания всего лишь одна маленькая и простенькая команда.
В общем, что долго рассусоливать, расскажу как было дело: встала задача склеить несколько сканированных страниц документа в одну длинную страницу. Да, можно в гимпе сделать документ и вставить сканы, но это не спортивно, и, главное, такие документы периодически надо будут делать снова.
К тому же, это нужно не мне, а другому человеку - нет желания тратить время на объяснения как сделать склейку в графическом редакторе. Уж не помню когда и при каких обстоятельствах познакомился с отличным пакетом консольных программ для работы с графическим файлами под названием ImageMagic, но - "вот то, что мне нужно" - сразу подумал я :) И просто для пользователя - сделал кнопарь, показал в какую папку складывать сканы, и соответствует Linux-way.
А теперь внимание, вот она, волшебная команда, творящая сие  сильное колдунство:
montage  *.jpg  -tile 1x3  -geometry +0+0  result.jpg
не знаю как у Вас, но у меня пакет ImageMagic стоял по-умолчанию, так что ничего дополнительно ставить не пришлось. Если у Вас данного пакета нет, то смело командуйте sudo apt-get install imagemagic
Давайте разбираться что эта команда делает (на оф.сайте все примеры на английском, разбираться с ними тяжко):
montage - собственно программа, которая будет выполнять сведение изображений;
*.jpg - говорим программе взять ВСЕ (*) файлы с расширением JPG из текущей папки, можно было просто через пробел перечислить их 1.jpg 2.jpg и т.д. (вроде можно даже вот так image[1-9].jpg);
-tile 1x3 - говорит программе разместить изображения в 1 столбец и 3 строки, т.е. так, как расположены обезьянки на данной странице;
-geometry +0+0 - не делать отступов и не менять размеры изображений;
result.jpg - уже склеенное изображение, т.е. результат работы.

Как будет время, постараюсь сделать сценарий для наутилуса, чтобы было вот так:  выделил несколько файлов, выбрал действие "Склеить вертикально" и готово.

Помог решить задачу данных ресурс:
http://www.imagemagick.org/Usage/montage/#geometry_spacing

суббота, 8 января 2011 г.

RDP и VNC через прокси

К сожалению, не все программы, работающие с Интернетом, имеют в своих настройках порой очень нужный пунктик для доступа в сеть через прокси сервер. Иногда спасает использование export http_proxy, но не для всех программ это работает. Например, я столкнулся с невозможностью соединения по VNC/RDP через прокси.

Но не будь решения данной проблемы, я бы не стал писать этот текст, так ведь? :) Да, решение есть и довольно простое. Нужно установить программу proxy-chains и немного настроить её. После установки программы нужно отредактировать файл /etc/proxychains.conf, в частности, в самом конце файла раздел [ProxyList]


По-умолчанию там написано:
socks4 127.0.0.1 9050
я использую http прокси squid, поэтому эту строку закомментирую и добавлю свою:
http 192.168.1.1 8080
Замечу, что так как файл настроек находится в /etc, то прав для записи у обычного пользователя нет и редактировать его необходимо с правами пользователя root, например, так:
sudo gedit /etc/proxychains.conf
Чтобы запустить программу через proxy-chains, нужно набрать команду:
proxychains <команда>
например, вот так (для подключения по RDP):
proxychains rdesktop 10.0.1.1
или так (для VNC):
proxychains vinagre