У меня уже несколько лет исправно трудится сканер Canon LiDE 110, который прекрасно совместим с GNU/Linux. Мне понадобилось купить ещё один сканер и я решил купить такой же. Но к сожалению, в наличии больше таких устройств не оказалось, но был Canon LiDE 120. Решил взять его. Как оказалось, поддержка сего устройства в GNU/Linux пока есть только с небольшим шаманством.
Читать далее «Сканер Canon LiDE 120 и Ubuntu 16.04.1»
Рубрика: Linux
Перенос виртуального сервера на физический с созданием программного рейда
Задача: перести виртуальный почтовый сервер на физический с созданием RAID 1 (зеркало).
Имеется виртуалка на XenServer и физический сервер с двумя винтами по 1 Тб
Установим Centos minimal на один из винтов и поделим диск на разделы
/dev/sda1 /boot
/dev/sda2 swap
/dev/sda3 /
Теперь установим mdadm и vim (обожаю этот текстовый редактор)
yum install mdadm vim
Теперь надо подготовить второй диск для настройки на нем рейда. Скопируем схему разбивки диска с /dev/sda
sfdisk -d /dev/sda | sfdisk /dev/sdb
Читать далее «Перенос виртуального сервера на физический с созданием программного рейда»
Уведомление о завершении команды в консоли
Скрипт для zsh позволяющий вывести уведомление о завершений команды, если терминал не открыт и команда выполнялась больше 10 секунд.
function active-window-id { echo `xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}'` } # end and compare timer, notify-send if needed function notifyosd-precmd() { if [ ! -z "$cmd" ]; then cmd_end=`date +%s` ((cmd_time=$cmd_end - $cmd_start)) fi if [ ! -z "$cmd" -a $cmd_time -gt 10 -a "$window_id_before" != "$(active-window-id)" ]; then kdialog --title "$cmd_basename completed" --passivepopup "\"$cmd\" took $cmd_time seconds" unset cmd fi } # make sure this plays nicely with any existing precmd precmd_functions+=( notifyosd-precmd ) # get command name and start the timer function notifyosd-preexec() { window_id_before=$(active-window-id) cmd=$1 cmd_basename=${cmd[(ws: :)1]} cmd_start=`date +%s` } # make sure this plays nicely with any existing preexec preexec_functions+=( notifyosd-preexec )
Скрипт для КДЕ, т.к. используется kdialog для вывода уведомления. Оригинал на гитхабе. Там же для гнома.
Код сохраняем в файл .notifyosd.zsh и добавляем в .zshrc строку
[ -e ~/.notifyosd.zsh ] && . ~/.notifyosd.zsh
подключиться к удаленному серверу по ssh в Dolphin KDE
fish://name@server
fish в данном случае используется для ssh подключения (такие блин дела)
samba, пароль к шаре
Столкнулся с тем, что windows начала просить пароль на доступ к шаре.
В логах /var/log/samba/log.smbd следующее
smbd/server.c:1165(main)
standard input is not a socket, assuming -D option
smbd/server.c:500(smbd_open_one_socket)
smbd_open_once_socket: open_socket_in: Address already in use
лог /var/log/samba/log.nmbd показывает
nmbd/nmbd.c:885(main)
standard input is not a socket, assuming -D option
Проблема оказалась в winbindе. А именно не соответствии имен групп linux и windows. Т.е. группа шары выглядела так:
# ls -l /mnt/lv10/Photoarchive/
total 4
drwxrwx---+ 2 root 16777729 4096 Apr 24 2013 Архив
где gid=16777729 (domain users)
Лечится рестартом winbind
service winbind restart
Подключение NFS для чтения и записи обычным пользователем
Когда на NFS-сервере один основной пользователь и на компьютере, который выступает в роле NFS-клиента, тоже один пользователь, да ещё и входящий в список sudousers — всё просто: NFS-раздел подключается, используя sudo, UID и GID на NFS-сервере и NFS-клиенте совпадают, с правами на чтение и запись нет никаких проблем.
У меня же возникла ситуация, когда на NFS-клиенте был обычный пользователь (regular user) без доступа к sudo и он должен был уметь производить чтение и запись в подлючённом NFS-разделе. Назовём этого пользователя reguser. Также на этом компьютере ( NFS-клиенте ) был ещё один пользователь, который имел доступ к sudo. Назовём его: admuser.
Итак, передо мной стояло две задачи:
- Сделать так, чтобы reguser мог производить запись в файлы и директории на NFS-сервере.
- Сделать так, чтобы reguser мог сам подключать и отключать NFS-раздел.
Читать далее «Подключение NFS для чтения и записи обычным пользователем»
Автозапуск виртуальной машины в Citrix XenServer 6.2
Кратенько. Для 6 версии из XenCenter настроить автозапуск уже не получится, однако можно сделать из консоли.
Для начала добавляем эту возможность для пула.
# xe pool-list
uuid ( RO) : 8a3b99c9-c4e9-802c-1298-794d939fb999
# xe pool-param-set uuid=8a3b99c9-c4e9-802c-1298-794d939fb999 other-config:auto_poweron=true
Теперь для виртуалок, которым требуется автозапуск.
xe vm-list
xe vm-param-set uuid=... other-config:auto_poweron=true
DLNA IPTV xupnpd
Купили брату телевизор Sony Bravia. Выбирал специально, чтоб ТВ умел проигрывать много форматов видео и знал что такое DLNA. Однако упустил IPTV. Странно, но ТВ его совсем не умеет проигрывать. Удивительно, что Sony не позаботились об этом. В итоге IPTV таки удалось получить, пусть и через DLNA.
Настраивается установкой xupnpd. Можно поставить программу на роутер. В интернете есть мануалы по ентой установке. У меня же стояла задача более простая. Заставить ТВ показывать iptv не важно откуда. В итоге поставил xupnpd на ноут с ubuntu, благо на оффсайте есть уже собранный пакет для нее.
Правим конфиг файл /etc/xupnpd.lua
Заменяем интерфейс на свой, через который выходим в интернет.
Запускать следует через sudo.
sudo xupnpd
Либо можно утянуть последнюю версию с svn
sudo apt-get install subversion
svn co http://tsdemuxer.googlecode.com/svn/trunk/xupnpd
cd xupnpd/src/
make
Не забываем поправить конфиг файл xupnpd.lua
Следует заменить интерфейс на свой, через который выходим в интернет.
Запускаем программу
chmod +x xupnpd
./xupnpd
Дальше настройки можно править через веб-интерфейс 192.168.X.X:4044, где 192.168.X.X ваш ip.
Там же можно загрузить свой плейлист.m3u
Ввиду того, что я смотрю iptv от тетушки Шуры и потоки там все http-шные, мне не пришлось ставить udpxy. Единственный нюанс, который заставил меня поломать голову, из-за того, что при выборе канала трансляция запускалась, но картинки не было, заключается в том, что в настройках Default mime type следует указать mpeg_ts (cfg.default_mime_type=’mpeg_ts’).
cron flock
Дабы не плодить процессы в кроне.
flock -n /tmp/flock.lock -c "rsync -avz -e ssh 'name@host:/path' /path"
flock устанавливает блокировку на указанный файл, в случае успеха выполняет нашу команду.
SSH уведомление об авторизации
Решил реализовать уведомление на почту о том, что кто-то авторизовался в ssh. Сперва решение выглядело вот так:
echo -e "Remote connection from\t $SSH_CONNECTION \nLogin $USER" | /bin/mail -s "[SSH] Login on $(hostname)" мояпочта@сайт.ru
Добавляем эту строку в /etc/ssh/sshrc (в случае, если этого файла нет, а его скорее всего не будет, его следует создать)
У этого решения есть существенный недостаток — письма будут отсылаться после любой аутентификации по ssh. Даже если это вы залогинились, письмо все равно вам придет. Дабы не получать массу писем и ввиду того, что я начал изучать python, решил попробовать написать на нем. Получился скрипт сравнивающий с нашего ли ip залогинились, в противном случае шлет email на указанную почту.
#!/usr/bin/env python import smtplib, os, platform from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText server = smtplib.SMTP('smtp.сайт.ru', 25) sender = 'root@'+platform.node() to = 'мояпочта@сайт.ru' ip = 'xxx.xxx.xxx.xxx' sship = os.environ['SSH_CONNECTION'] loginname = os.environ['LOGNAME'] msg = MIMEMultipart() msg['Subject'] = '[SSH] Login on ' + platform.node() msg['From'] = sender msg['To'] = to text = 'Remote connection from\t' + sship + '\nLogin ' + loginname msg.attach (MIMEText(text, 'plain')) textmail = msg.as_string() if ip in sship: print ('hi. Welcome!') else: print ('who is it?') server.sendmail(sender, to, textmail)
Сохраняем скрипт в файл, например, noticessh.py и прописываем путь к нему в /etc/ssh/sshrc. К сожалению не со всеми версиями второго питона работает, так же мешает авторизовываться по sftp в случае, если sftp работает через ssh. FileZilla, например, ругается «Оut of memory!» Надо бы допилить, но на данный момент к сожалению знаний по питону не достаточно.