Skip to content


Настройка печати через RDP с WIN-сервера на Linux-клиент

Несмотря на то, что настройка печати с Windows-машин на линукс несложная и подробно описана, тем не менее печать по протоколу IPP через CUPS имеет существенный недостаток – размер задания при печати некоторых документов, особенно изображений, может увеличиваться до неприличных величин. Также помогает решить проблему невозможности проброса принтера через RDP. Поэтому предлагается способ настройки печати через виртуальный PDF- принтер. У этого способа есть один недостаток – Windows-машина вообще не имеет представления о принтере, который установлен в линукс, соответственно, специальные возможности печати для данного принтера будут недоступны. Ниже представлена инструкция по настройке данного способа печати.

  1. Создать в папке пользователя каталог .pdftemp. Здесь будут появляться файлы для печати. Обратить внимание на точку перед названием. Это будет скрытый каталог.
  2. Создать в папке .pdftemp каталог conf.
  3. Создать в папке conf текстовый файл (скрипт). Название pdftoprint.sh. Содержание:
    #!/bin/sh
     
    DIR="$HOME/.pdftemp/"
    ERR_LOG="$DIR/conf/err.log"
    PFILE="$DIR/$1"
    if  lp "$PFILE" ; then rm "$PFILE"
    	else echo "Unable to print \"$PFILE\"" >> "$ERR_LOG"
    fi
    exit 0

    Сохранить. Сделать запускаемым.

  4. Установить incron, cups, cups-pdf, system-config-printer.
  5. Добавить пользователя в группу incron.
  6. Отредактировать файл /etc/incron.allow — вписать имя пользователя.
  7. Добавить задание для incron.
    	incrontab -e
     
    	/home/[user]/.pdftemp IN_CLOSE_WRITE /home/[user]/.pdftemp/conf/pdftoprint.sh $#

    где [user] – это имя пользователя.

  8. проверить, что задание было добавлено
    incrontab -l
  9. Перезапустить демон incron.
    sudo incrond restart
  10. Установить и настроить все необходимые для работы принтеры. Убедиться в их нормальной работе.
  11. Должен быть установлен 2XClient. Ссылка на страницу для скачивания: http://www.2x.com/rdp-client/downloadlinks/
    Примечание: Можно использовать любой другой клиент RDP, но, по личному опыту, только 2XClient обеспечивает устойчивый проброс файловой системы внутри сессии RDP. Также, в процессе эксплуатации в офисе, никаких глюков у этого клиента выявлено не было.
  12. Настроить подключение через RDP. Обязательно разрешить проброс диска sda1 (Disk drives).
  13. На сервере должен быть установлен PDF-принтер (Adobe PDF, Foxit PDF Creator и т. п.).
  14. В настройках принтера установить печать без запроса на папку \\tsclient\sda1\home\[user]\.pdftemp — это папка, созданная в пункте 1. Снять, если есть, галку на «открывать после печати».
  15. Проверка имени принтера по умолчанию
    lpstat -d

    Установка принтера по умолчанию

    lpoptions -d [имя_принтера]
  16. Для удобства пользователя вывести на рабочий стол кнопку запуска программы system-config-printer для оперативного изменения принтера по умолчанию. Заранее установить требуемый принтер.
  17. Обратить внимание!! Печать происходит только на принтер по умолчанию.

    Если всё сделано правильно, при печати на сервере на PDF-принтер по окончании формирования файла PDF печать пойдёт на выбранный принтер.

    Если печать производится в рамках одной сети или есть непосредственный доступ по сети к данному компьютеру, например, через туннель, то рекомендуется расшарить папку печати через Samba и производить печать в эту расшаренную папку. Связано с тем, что доступ по сети в такую папку производится быстрее и скорость ограничена только внешними условиями, тогда как через канал внутри сеанса RDP эта скорость ограничена. Кроме этого появляется возможность такого способа печати (не через IPP), для других пользователей в сети.

    Автор: Олег Белоусов.
    skype: p_orinoko

Posted in *nix, Howto, Windows.

Tagged with , , , .


Ошибка mysql: Got fatal error 1236 from master

После аварийного рестарта mysql-сервера, исполняющего роль master-а, на slave-е вылезла вот такая проблемка:

[ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from position > file size', Error_code: 1236

Ну и процесс репликации, естественно, остановился.

Как можно догадаться из сообщения об ошибке, slave захотел выполнить команды из такого места бинлога, которого на мастере не оказалось после рестарта последнего (наверное, потому, что часть бинлога не успела записаться на диск мастера за мгновение до того, как он был перезагружен по питанию).

Смотрим позицию, до которой дошел slave:

[slave]$ echo "show slave status \G" | mysql | grep -E "[[:space:]]Master_Log_File|Read_Master_Log_Pos"
  Master_Log_File: s10-bin.000253
  Exec_Master_Log_Pos: 783374391

Смотрим последнюю позицию, которая реально присутствует в этом бинлоге мастера:

[master]$ mysqlbinlog s10-bin.000253 | tail -n 9
/*!*/;
# at 783367615
#150704 18:12:45 server id 62 end_log_pos 783367646 CRC32 0x2be04f67 Xid = 22088173
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

И видим, что последняя позиция - 783367646. В то время как slave пытается исполнить позицию 783374391, которая, очевидно, дальше, чем 783367646. Вывод – надо "отмотать" slave немного назад:

[slave] mysql> stop slave;
[slave] mysql> change master to master_log_pos=783367646;
[slave] mysql> start slave;

В логе видим:

[Note] 'CHANGE MASTER TO executed'. Previous state master_host='10.10.10.10', master_port= 3306, master_log_file='s10-bin.000253', master_log_pos=783374391, master_bind=''. New state master_host='10.10.10.10', master_port= 3306, master_log_file='s10-bin.000253', master_log_pos=783367646, master_bind=''.
[Note] Slave I/O thread: connected to master '[email protected]:3306',replication started in log 's10-bin.000253' at position 783367646

Ну и далее show slave status нам говорит, что slave начал догонять master.

Happy end.

P.S. Альтерантивным вариантом посмотреть бинлог является команда SHOW BINLOG EVENTS. Например:

mysql> show binlog events in 's9-bin.000125' from 24084942 limit 10;
+---------------+----------+-------------+-----------+-------------+------------------+
| Log_name      | Pos      | Event_type  | Server_id | End_log_pos | Info             |
+---------------+----------+-------------+-----------+-------------+------------------+
| s9-bin.000125 | 24084942 | Write_rows  |         8 |    24085025 | table_id: 244461 |
| s9-bin.000125 | 24085025 | Update_rows |         8 |    24086045 | table_id: 244461 |
| s9-bin.000125 | 24086045 | Write_rows  |         8 |    24086128 | table_id: 244461 |
| s9-bin.000125 | 24086128 | Update_rows |         8 |    24086518 | table_id: 244461 |
| s9-bin.000125 | 24086518 | Write_rows  |         8 |    24086600 | table_id: 244461 |
| s9-bin.000125 | 24086600 | Update_rows |         8 |    24086876 | table_id: 244461 |
| s9-bin.000125 | 24086876 | Write_rows  |         8 |    24087008 | table_id: 244461 |
| s9-bin.000125 | 24087008 | Update_rows |         8 |    24087138 | table_id: 244461 |
| s9-bin.000125 | 24087138 | Write_rows  |         8 |    24087221 | table_id: 244461 |
| s9-bin.000125 | 24087221 | Update_rows |         8 |    24087611 | table_id: 244461 |
+---------------+----------+-------------+-----------+-------------+------------------+
10 rows in set (0.00 sec)

Posted in Howto.

Tagged with , .


Как получить список всех IPv4-сетей автономной системы

Описание алгоритма решения задачи "получить список всех сетей организации, если известен один IP-адрес".

1. Забиваем в гугл запрос "show ip bgp regex looking glass", находим какой-нибудь looking glass, поддерживающий команду "show ip bgp regex" и не обрезающий вывод. Например lg.as48972.net

2. Выясняем номер автономной системы с помощью команды whois или на каком-нибудь веб-сервисе. Для примера возьмем IP-адрес 46.219.4.0 одного из киевских провайдеров:

$ whois 46.219.4.0 | grep origin
origin:         AS31148

Итак, номер автономной системы провайдера Freenet (O3) - 31148.

3. Далее идем на найденный looking glass и в качестве аргумента указываем номер AS со знаком доллара на конце (если знак доллара не указать, то отобразятся еще и сети организаций, для которых AS 31148 является транзитной, что нам в данном случае не нужно):

Поиск всех префиксов заданной AS

Как найти все блоки адресов, принадлежащие организации

4. Жмем кнопку "Execute" и получаем длинный список примерно такого вида (приведен не полностью), где в самом левом столбце и перечислены искомые блоки адресов:

BGP table version is 0, local router ID is 95.130.232.4
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete
 
   Network          Next Hop            Metric LocPrf Weight Path
* i46.219.1.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.2.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.3.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.4.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.5.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
*>i46.219.6.0/24    77.222.66.177                  90      0 16243 21219 31148 i
* i                 77.222.66.181                  90      0 16243 21219 31148 i
* i46.219.7.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.8.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.9.0/24    77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.10.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.11.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.12.0/24   77.222.66.181                  90      0 16243 21011 31148 i
*>i                 77.222.66.177                  90      0 16243 21011 31148 i
* i46.219.13.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.14.0/24   77.222.66.181                  90      0 16243 21011 31148 i
*>i                 77.222.66.177                  90      0 16243 21011 31148 i
* i46.219.15.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.16.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.17.0/24   77.222.66.181                  90      0 16243 21011 31148 i
*>i                 77.222.66.177                  90      0 16243 21011 31148 i
* i46.219.18.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.19.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.20.0/24   77.222.66.181                  90      0 16243 15772 28761 31148 i
*>i                 77.222.66.177                  90      0 16243 15772 28761 31148 i
* i46.219.21.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.22.0/24   77.222.66.181                  90      0 16243 21219 31148 i
*>i                 77.222.66.177                  90      0 16243 21219 31148 i
* i46.219.23.0/24   77.222.66.181                  90      0 16243 21011 31148 i

Если номер AS четрыхзначный, то может потребоваться поиграться с аргументом запроса, добавив экранированный обратным слешем пробел пред номером AS. То есть вписать в поле нечто такое: "\ 31148$" (чтобы не отображались те автономные системы, номер которых содержит номер нашей как подстроку).

Posted in Howto.

Tagged with .


repoquery: поиск rpm-пакета, содержащего известный файл

Сегодня буду краток.

Есть такая часто возникающая задача – найти пакет, если не знаем его имени, но знаем имя какого-то бинарника, входящего в его состав.

Например, нужен бинарник phpize. Команда locate следов его присутствия не обнаружила даже после updatedb, "yum search" тоже не помогает. Значит, нужно установить пакет yum-utils, а затем делать так:

$ repoquery -q --file /*phpize
php-devel-0:5.3.3-40.el6_6.x86_64
php-devel-0:5.3.3-38.el6.x86_64

Немного поэкспериментировав, понял, что есть более краткая форма:

$ repoquery -f *phpize
php-devel-0:5.3.3-40.el6_6.x86_64
php-devel-0:5.3.3-38.el6.x86_64

Voilà!

Posted in *nix.

Tagged with , .