вторник, 20 сентября 2016 г.

Установка ядра от 16.04 (4.x.x) в xubuntu 14.04

Исходные данные: 
Xubuntu 14.04, на относительно свежем железе не реализует всех возможностей, то звука нет, то видео тормозит.


  Оказалось что в ядре 3-ей ветки нет (и уже поди и не будет) поддержки всяких новых железок, при том что загрузка 16.04 с флешки показывает, что в 4.х.х с этим все намного лучше - тоже самое железо прям оживает... Вариант перехода на 16-ю версию пока не до конца созрел, ограничимся заменой ядра. Описание концепции есть в официальной документации. Собственно рецепт. Во-первых обновляемся! Во-вторых, прям как и написано

Ubuntu 14.04 LTS - Trusty Tahr

The 14.04.2 and newer point releases will ship with an updated kernel and X stack by default. If you have installed with older media you can use the following to install the newer HWE kernel derived from 16.04 (Xenial):

DESKTOP

 sudo apt-get install --install-recommends linux-generic-lts-xenial xserver-xorg-core-lts-xenial xserver-xorg-lts-xenial xserver-xorg-video-all-lts-xenial xserver-xorg-input-all-lts-xenial libwayland-egl1-mesa-lts-xenial 

MULTIARCH DESKTOP

If you run a multiarch desktop (for example, i386 and amd64 on amd64, for gaming or Wine), you may find you need a slightly more involved command, like this:
 sudo apt-get install --install-recommends linux-generic-lts-xenial xserver-xorg-core-lts-xenial xserver-xorg-lts-xenial xserver-xorg-video-all-lts-xenial xserver-xorg-input-all-lts-xenial libwayland-egl1-mesa-lts-xenial libgl1-mesa-glx-lts-xenial libgl1-mesa-glx-lts-xenial:i386 libglapi-mesa-lts-xenial:i386 

SERVER

Install the HWE kernel derived from 16.04 (xenial):
 sudo apt-get install --install-recommends linux-generic-lts-xenial 
В-третьих, делаем apt-get autoremove (там штук 50 пакетов), обновляемся, переустанавливаем virtualbox (только если он был установлен с сайта Oracle), перегружаемся.




пятница, 9 сентября 2016 г.

Xubuntu 16.04, LibreOffice 5 и сетевые файлы

Исходные данные: 

Поставил "из коробки" amd64 версию Xubuntu 16.04,  и оказалось что файлы, расположенные на Самбе, не открываются ни мышкой из файлового менеджера, ни через меню офиса.


  Чтение "всего-что-нашел" никуда не привело. Вот пара разумных ссылок, остальное - крики разных душ... Ссылка раз и ссылка два. Что в результате делаем? - Поднимаем версию до 5.2 (вопрос стабильности мне не понятен), доставляем все компоненты и комментарим параметры работы с нелокальными ФС, как это было с версией 4.



Реализуем все примерно так.

#! /bin/bash

sudo -E add-apt-repository ppa:libreoffice/ppa
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libreoffice
sudo sed -i 's/X-GIO-NoFuse=true/#X-GIO-NoFuse=true/' /usr/share/applications/libreoffice-*
В первом и единичном экземпляре все получилось. Будем посмотреть.

суббота, 20 августа 2016 г.

remmina перестала подключаться к Windows 2008


Исходные данные: 

Жил себе тихо - спокойно Windows 2008 Server на который народ ходил по мере необходимости при  при помощи remmina и rdesktop. Ходил - ходил, да вот и что-то в нем поломалось. Перестала remmina на него цепляться. Rdesktop - пожалуйста, а remmina - нет...


  Версия remmina 1.2.0-rcgit.11, т.е. не "родная" от Xubuntu. Родную как-не проверили. Подробности  про "откуда и зачем" - тут. Обнаружилось при перезагрузке сервера по причине обновления VipNet (как вы яхту назовете...) - крайне  капризная и бестолково написанная (с нарушением всех канонов какие есть) приблуда... Ну может еще и не она и виновата. Винда это как параллельная реальность. Так вот путем тыканья куда попало было выяснено что  на закладочке "Дополнительные" нужно выбрать  тип безопасности "RDP", по умолчанию стояло "Согласование". Ну и в довершение "одноразовый" скриптик для корректировки настройки всех пользователей на LTSP-сервере. Чисто чтоб не потерялся, для поддержания традиции. И без комментариев.

#! /bin/bash

# Для всех файлов в каталогах $HOME/.remmina/*.remmina
# 1. Ищем server=10.0.0.7 нашли - наш клиент
# 2. Если содержится server=, меняем на server=rdp
# 3. Или тупо дописываем в хвост
#

HD=/home/
EXCL="storage pvv teplyh_vn chazova_ob minina_na danilkina_an"
for i in $HD/[a-z]* ;
do
  flag=""
  for j in ${EXCL} ;
do
    if [ $i == $HD/$j ] ; then
      echo $i " excluded"
      flag="skip"
      break
    fi
  done
    if [ -z $flag ] ; then
      if [ ! -d $i  ] ; then
        echo $i " not a derectory, skip it..."
      else
        for k in ${i}/.remmina/*.remmina ;
          do
            if grep -q "10.0.0.7" ${k} ; then
              if grep -q "security=" ${k} ; then
                cat ${k} |sed s/security=/security=rdp/ > ${k}.new
                cat ${k}.new > ${k}     # preserve rights
                rm -f ${k}.new
              else
                cat "security=rdp" >> ${k}
                echo ${k} " not have a security= expression!"
              fi
            fi
          done
      fi
    fi
done


воскресенье, 14 августа 2016 г.

Укладываем файлы в сухое прохладное место (dry cool place).

Исходные данные: 
Xubuntu 14.04 i386-server, на нем Самба, на которую регулярно складываются архивы, их нужно убрать по-дальше для пущей сохранности

  Ранее я уже описывал процесс сохранения бухгалтерии средствами Windows (скорее средствами архиватора, Винда на редкость плохо приспособлена для решения простейших практических задач). Для борьбы с разного рода угрозами (имею ввиду в первую очередь шифровальщиков, во вторую - разного рода любопытных персонажей) эти файлы следует держать в месте как можно более надежном и непубличном, тем более не на Самбе. Скриптик простой совсем, комментировать там нечего (а вот забыть есть чего!..), запускается по крону (после ожидаемого окончания бэкапа), в качестве аргумента - имя файла параметров. 

#! /bin/bash

# DRY COOL PLACE 4 files

# Config file in $1, if absent - log error report
if [ ! -z ${1} ] ; then
 test -r ${1} && . ${1}
else
 logger "No config file!"
 exit 0
fi

# Remove olds
icount=0
for i in `ls -r $DSTDIR/*.$EXT` ; do
 if [ $((icount++)) -ge $((NCPY))  ] ; then
  rm -f "$i"
  echo "$i" " removed"
 fi
done

# move ones
mv -f --target-directory=${DSTDIR} ${SRCDIR}/*.${EXT} 

Пример конфига (/etc/local/bin/buh.cfg)

EXT=zip
SRCDIR=/home/buh/1C-bcp
DSTDIR=/home/_bcp/bcp-buh
NCPY=40




понедельник, 4 июля 2016 г.

Про OCR

Исходные данные: 
Xubuntu 14.04, средняя во всех отношения рабочая станция.

  Задачу представитель заказчика прописал предельно просто - надо поставить на (имя, адрес) какую-нибудь OCR, что там есть... А что там есть? Общение с Гуглем показало что реально свежего материала-то и нету... То есть совсем. Нормальные толковые статьи имеют давность пары лет, а то и поболее, что смущает. Удалось нарыть лишь одну единственную статью, которая понравилась. Осталось тупо попробовать.
   Вот какие получились выводы. Для большинства применений подходит yagf, возможно где-то будет интересен ocrfeeder. Это фронт-енды. В качестве движка понравился tesseract, как есть без обучалок и т.п. ну "до кучи" ставим cuneiform (как самого старого и заслуженного). Собственно установка
apt-get install tesseract-ocr tesseract-ocr-eng tesseract-ocr-equ tesseract-ocr-rus tesseract-ocr-osd cuneiform ocrfeeder yagf unpaper

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

четверг, 23 июня 2016 г.

Делаем backup virtualbox VM по-неправильному

Исходные данные: 
Xubuntu 14.04 server (64 разряда), на нем virtualbox с единственной VM, и это, как легко догадаться, Win-server.


  Тому, как бэкапить винду ее собственными средствами посвящены гигабайты в других местах, дело это простое и понятное... ровно до того момента как ее нужно восстанавливать... Отсюда и есть пошла виртуализация, и копирование VM (Виртуальной машины) целиком. Если все делать совсем правильно, следует ознакомится с этой вот статьей в качестве примера. Можно еще подумать в сторону lvm.
  Мы будем делать не правильно и по-тупому - приостановил, скопировал, отпустил работать дальше. Собственно скрипт (запуск по четвергам из крона чуть за полночь).

#!/bin/bash

# DEFAULTS
OLDFILE=10

# Config file in $1, if absent - default config from /usr/local/etc/vm/vm.conf
if [ ! -z ${1} ] ; then
 test -r ${1} && . ${1}
else
. /usr/local/etc/vm/vm.conf
fi

# Remove olds
icount=0
for i in `ls -r $BACKUPDIR/vm-$VBOXNAME-20*` ; do
 if [ $((icount++)) -ge $((OLDFILE))  ] ; then
  rm -f "$i"
  echo "$i" " removed"
 fi
done

echo `date +%F%t%X` "stop vm"
VBoxManage controlvm ${VBOXNAME} savestate
sync
sleep 10
echo `date +%F%t%X` "tar vm"
DATETIMENOW=`date -I`
tar cvf $BACKUPDIR/vm-$VBOXNAME-$DATETIMENOW.tar $VBOXPATH
sync
sleep 10
echo `date +%F%t%X` "start vm"
VBoxHeadless --startvm ${VBOXNAME} &
nice gzip $BACKUPDIR/vm-$VBOXNAME-$DATETIMENOW.tar
echo `date +%F%t%X` "tar gziped"
~
И к нему конфиг
# settings
VBOXPATH="/home/storage/virtualbox"
VBOXDVD="host:/dev/cdrom"
VBOXNAME="Win2008r2"
VBOXOS="Windows2008_64"
VBOXRDEADDR="10.0.0.1"
VBOXRDEPORT="3389"
BACKUPDIR=/home/storage/backup/vms
OLDFILE=15
  Конфиг общий для скриптов управления и бэкапа. Это традиция. Что касается скрипта, в самом начале или конфиг из файла, имя которого передается в качестве аргумента при запуске, или по умолчанию. Потом стирание старых копий. Потом приостановка - копирование - запуск. Ну и в конце ужимаем полученный архив (жмется в 3 раза, есть смысл).

среда, 15 июня 2016 г.

Ubuntu-сервер в качестве pptp-клиента Windows-2008

Исходные данные: 
Xubuntu 14.04 server (64 разряда), не единственный, но на нем установлен squid и openvpn нужно подключить к внешнему Win-серверу для подготовки и сдачи каких-то там экзаменов (учеников пимерно 20 - 50 и они ходят через squid наружу).  Есть инструкция с картинками про Win7.

  Начнем с инструкции. Суть ее такова. Есть ip-адрес, имя и пароль и еще ip, на который ломиться броузером. Все по умолчанию. В конце скромно сказано, что если нужен параллельный доступ в интернет (default route явно поворачивается в сторону туннеля, то нужно сделать...) - делаем пометку, что скорее всего там целая сеть, маршрут на которую не отдается автоматом, а вместо этого используется default. Нам достаточно сделать доступ для squid-а, и можно обойтись без NAT-а. 

Проверяем на крысах.

Берем рабочую станцию с установленным Network-manager и пробуем в ручном режиме подобрать параметры соединения. Это не слишком сложно. Вот пара картинок, что у нас получилось. Заодно это наикратчайшее руководство по подключения к Win-Server



 Броузером сходили, посмотрели, все хорошо, можно переходить к испытаниям на людях.

Конфигурация pptp-клиента

 Несмотря на некоторую избитость темы, толкового руководства как-то не случилось. Самое подходящее и еще, хоть там и про сервер. Ну и чтение man-ов никто не отменял.

 /etc/ppp/options.pptp приводим к виду.

# Lock the port
lock

# Authentication
# We don't need the tunnel server to authenticate itself
noauth

# We won't do PAP, EAP, CHAP, or MSCHAP, but we will accept MSCHAP-V2
# (you may need to remove these refusals if the server is not using MPPE)
refuse-pap
refuse-eap
refuse-chap
refuse-mschap
Все остальное комментарим.

/etc/chap-secrets содержит

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses

"student" OLIMPOKS "passwordfrominstruction"
Дали разумное имя (OLIMPOKS, оно нужно для идентификации, см. ниже...).

 Собственно опции для этого соединения (имя соединения при вызове будет olimpoks, не путать, оно на нижнем регистре) содержатся в новом файле /etc/ppp/peers/olimpoks

# Olimpoks

pty "pptp 95.181.47.90 --nolaunchpppd"  #тип и адрес сервера
name student                            #логин 
remotename OLIMPOKS                     #имя соединения
require-mppe-128                        #включаем поддержку MPPE
nodefaultroute                          #не создавать маршрут по умолчанию
unit 12                                 #номер ppp интерфейса, число счастливое
persist                                 #переподключаться при обрыве
maxfail 30                              #количество попыток переподключения
holdoff 40                              #интервал между подключениями секунд
file /etc/ppp/options.pptp
ipparam olimpoks-pptp
В последней строке имя скрипта (на самом деле их два up и down, но, как показали испытания, второй нам не нужен, маршруты гибнут вместе с падением интерфейса.

Устраиваем натурные испытания и пишем скрипт.

 Ну испытания состоят из совсем простых действий, запускаем pon olimpoks nodetach, смотрим маршруты и пробуем вручную прописать минимальный набор. В нашем случае достаточно только на хост. Строку с добавлением маршрута один-в-один заталкиваем в скрипт. 
Вот он, /etc/ppp/ip-up.d/olimpoks-pptp - имя из предыдущего файла.  И внутри

#! /bin/bash

route add -host 100.10.1.13 dev ppp12
Та самая строка.

 Пробуем по-взрослому, без nodetach и смотрим маршруты. Все хорошенько проверяем. Осталось для верности повесть табличку "прохода нет". В конфиг firewall-а добавляем пару строк...

#!/bin/bash

# Интерфейсы
export PPP=ppp12


### Для туннеля отдельно все сделаем
# Разрешить входящие пакеты для установленных нами соединений
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -i ${PPP} -j ACCEPT
# Дропаем тупо все остальное
 iptables -A INPUT -i ${PPP} -j DROP
#### Конец туннеля
Пока все!

суббота, 28 мая 2016 г.

Делаем backup (бэкап) больших массивов файлов, продолжение

В первой части все-все-все написано, и там же есть список хотелок. Это собственно реализация оных. Список отличий от исходной версии.

  1. Сначала стираем старые файлы, потом пишем новые.
  2. Храним заданное число копий, а не количество дней.
  3. Изменился формат конфиг-файла (исчез "+" у параметра OLD, теперь это просто число)
  4. Нет необходимости вручную создавать исходную копию.
  5. Нет проблем с повторным запуском в течении тех же суток.
  6. Добавлен ключ -F rsync, нужно использовать файлы .rsync-filter

В общем и целом получилась вполне себе боевая вещь.
Собственно скрипт /usr/local/bin/rsync.increment3
#! /bin/bash

### Определения по-умолчанию
MAP='root@10.0.0.3::samba-private/'
DEST='/storage/increment/samba-priv'
LOGF=/var/log/rsync-samba-priv-add.log
OLD=10

### в $1 передаем имя конфиг-файла
if [ ! -z ${1} ] ; then
  test -r ${1} && . ${1}
fi

### Стираем старые копии по числу, а не по дате создания (это важно!)
# Стираем только каталоги, файлы типа .notes.txt нам не интересны

icount=0
for i in `ls -dr $DEST/20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]` ; do
 if [ $((icount++)) -ge $((OLD))  ] ; then
  rm -rf "$i"
 fi
done

### Начали
DAY0=`date -I`
DAY1=`date -I -d "1 day ago"`

# Защита от повторного запуска (передвижка крона, например, для тестов удобно опять же)
if [ -d $DEST/$DAY0 ] ; then
 mv -f $DEST/$DAY0 $DEST/$DAY0-previous
fi

# Самый свежий каталог по маске date -I с 2010 по 2099 годы :-)
# Можно было сохранить $i на первом проходе стирания, но проще еще раз
# дернуть ls

LNK=`ls -dr $DEST/20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]|head -n 1`

# Если совсем пусто, создаем вчерашний пустой
if [ -z $LNK ] ; then
 LNK=$DEST/$DAY1
 mkdir -p $LNK
 echo "LNK not exist..." |logger
fi

# Опять про повторный запуск, крутим обратно...
if [ -d $DEST/$DAY0-previous ] ; then
 mv -f $DEST/$DAY0-previous $DEST/$DAY0
 echo "Previous DAY0 exist..." |logger
fi

### Собственно копируем
rm -f $LOGF
rsync --log-file=$LOGF -aHxAF --del  --link-dest=$LNK  $MAP $DEST/$DAY0

   
И конфиг
MAP='root@10.0.0.3::samba-public/'
DEST='/storage/increment/samba-pub'
LOGF=/var/log/rsync-samba-pub.log
OLD=30
    
Все остальное без изменений.

Дополнение от 21 апреля 2020. 

  Для анализа логов совсем простой скриптик. Он посылает на почту лаконично имена лог-файлов, содержащих "rsync error:" Условием работы (из крона) является правильная установка "почтовых" переменных MAILTO и MAILFROM.

#! /bin/bash

FMASK="/var/log/rsync-*.log"

status=""
for i in `ls  $FMASK` ; do
  if [ `cat $i |grep "rsync error:" | wc -l` -ne 0 ] ; then
    status=$i" "$status
  fi
done
if [[ -n $status ]] ; then 
  echo  $status
fi

среда, 25 мая 2016 г.

Делаем backup больших массивов файлов

Исходные данные: 
Xubuntu 14.04 server (64 разряда) в качестве SAMBA-сервера с большой ФС и огромным количеством файлов.

  Нужно объяснить подробнее. Есть сервер не самой высокой производительности, он когда-то сам должен был стать архивом, но звезды на небе расположились таким образом, что на него была взгромождена САМБА (+squid, apache, и много чего еще), в общем это наше все, кроме LTSP. Все - все - все живет на массиве размером 5,1Т, система отдельно. Занято существенно более половины, вернее сказать осталось там меньше терабайта. Вот его надо сбэкапить по сетке, держать несколько актуальных копий в удобноваримом виде и прочее, прочее, прочее. В качестве архива вообще не Бог весть что - 2 Гигабайта памяти, массив около 4Т, остальное под стать, - собрано все из хлама. Копировать нужно /home/storage/samba/public, /home/storage/samba/private, /home за вычетом /home/storage Всего примерно 1,5Т. В идеале хранить 30 ежедневных копий всего. По-тупому точно не получится 1,5Т*30дней=45Т... Не наш уровень затрат.

Про удобноваримость.

 Вот что важно оказалось (для больших объемов и больших количеств файлов) - хранение при помощи какой-то базы (bacula) не очень подходит. Обычно приходится искать файл по каким-то не вполне точным признакам (тыкать мышкой или mc-шкой). То же касается и архивов типа tar - его и положить-то некуда, не дай бог физ. сбой (прощай кусок после сбоя, как на ленте), ну и поиск нужного "чего-то типа как вот тут" - мука адская. Должно быть файловое дерево, по которому можно "лазить" стандартными средствами. 

Про транспорт.

 Рутовый доступ к источнику по ssh не самое приятное, хочется чтоб по чтению, и чтоб не nfs... В общем rsync в виде rsyncd вполне себе безопасен, абсолютный чемпион по скорости и много чего еще (например не оставляет оторвавшихся и повисших процессов на сервере). Есть классическая статья Майка Рубеля, дающая "правильное представление". И еще один ресурс навел на мысли... Не описываю сам принцип, слов там много, не нужно переписывать... Но решил все-таки пару слов написать. Идея в том, что правильно используя хардлинки можно хранить огромное количество копий очень больших массивов (поскольку основная масса файлов меняется редко, они прилинковываются к новым каталогам, в случае стирания теряют линки и освобождают место для новых...).

Карты в руки

 На сервере - источнике заводим карты (они же модули) для сохраняемых ресурсов. Вот кусочек /etc/rsyncd.conf (некоторые цифры пришлось поменять)
# /etc/rsyncd.conf

# GLOBALs
address = 10.0.0.3

[samba-public]
path = /home/storage/samba/public
comment = Samba common
read only = true
hosts allow = 10.0.0.2
hosts deny = 0.0.0.0/0
ignore nonreadable
dont compress = *.gz *.tgz *.tar.gz *.zip *.7z *.rar *.deb *.bz2 *.iso

[rootfs]
path = /
comment = root and LTSP sandbox
uid = root
read only = true
hosts allow = 10.0.0.1 10.0.0.2
hosts deny = 0.0.0.0/0
ignore nonreadable
dont compress = *.gz *.tgz *.tar.gz *.zip *.7z *.rar *.deb *.bz2 *.iso

[homefs]
path = /home
comment = home (not storage)
uid = root
read only = true
hosts allow = 10.0.0.2 10.0.0.1
hosts deny = 0.0.0.0/0
ignore nonreadable
dont compress = *.gz *.tgz *.tar.gz *.zip *.7z *.rar *.deb *.bz2 *.iso
exclude "storage/***"

[samba-private]
path = /home/storage/samba/private
comment = Samba common
uid = root
read only = true
hosts allow = 10.0.0.2
hosts deny = 0.0.0.0/0
ignore nonreadable
dont compress = *.gz *.tgz *.tar.gz *.zip *.7z *.rar *.deb *.bz2 *.iso


В приведенном фрагменте нет ничего необычного, интересен разве что пример исключения /home/storage, но это есть в man-е... и работает не слишком хорошо, лучше -F и .rsync-filter в нужные каталоги.

Ну и собственно скрипт


#! /bin/bash

### Определения по-умолчанию
MAP='root@10.0.0.3::samba-private/'
DEST='/storage/increment/samba-priv'
LOGF=/var/log/rsync-samba-priv.log
OLD=+10

### в $1 передаем имя конфиг-файла
test -r ${1} && . ${1}

### Начали
DAY0=`date -I`
DAY1=`date -I -d "1 day ago"`
DAY2=`date -I -d "2 day ago"`
LNK=$DEST/$DAY1
rm -f $LOGF
# Ищем вчерашнюю копию, если нет - позавчерашнюю, если ее нет - стоп!
if [ ! -d $LNK ] ; then
 LNK=$DEST/$DAY2
  if [ ! -d $LNK ] ; then
   echo "LNK not exist..." |logger
   exit 0
  fi
fi
### Собственно копируем
rsync --log-file=$LOGF -aHxA --del  --link-dest=$LNK  $MAP $DEST/$DAY0
### Стираем старые копии
find $DEST -ctime $OLD -delete
    
В конце мы просто удаляем старые копии по-крестьянски. Исходный (самый первый) бэкап делаем ручками. Если лениво, достаточно создать пустой каталог со вчерашней или позавчерашней датой.

И один конфиг

 В качестве примера (/usr/local/etc/bcp/samba-pub).

MAP='root@10.0.0.3::samba-public/'
DEST='/storage/increment/samba-pub'
LOGF=/var/log/rsync-samba-pub.log
OLD=+10
    

Хранение настроено на 10 дней, будем посмотреть... В кроне (/usr/cron.d/local) все выглядит примерно так

15 20 * * *     root  /usr/local/bin/rsync.increment /usr/local/etc/bcp/samba-priv.conf >/dev/null 2>&1
05 21 * * *     root  /usr/local/bin/rsync.increment /usr/local/etc/bcp/samba-pub.conf >/dev/null 2>&1

    

Чего еще хочется (ToDo)

 В скрипте проверяется "вчера" и "позавчера". Хочется "последний раз". С ходу не придумалось. Надеюсь что будет обновление. Прошла ночь. Есть еще пара новых хотелок. Во-первых, нужно сделать старт в случае отсутствия исходного бэкапа (самый первый запуск). Во-вторых нужно не удалять копии по времени жизни, а следить за их количеством и поддерживать заданное (количество), это будет правильно. И правильно будет, в условиях дифицита места, сначала стирать старую копию, а потом уже записывать новую.

Закономерное продолжение, реализующее пожелания...









воскресенье, 1 мая 2016 г.

NIS netgroup и samba

Исходные данные: 
Xubuntu 14.04 server (64 разряда) в качестве SAMBA-сервера и много-много (сотни 2 с хвостом) разнообразных клиентов.



  В какой-то момент количество шар с самыми разными правами доступа стало напрягать, размер секции в smb.conf стал неприлично большим. Закономерно упростить синтаксис за счет создания групп пользователей. Unix-группы решил не трогать, не всегда они подходят, а для целей дележки самбошных ресурсов сделать свои похожие группы, числом немногие. Свои, значит NIS, прикручивание оного NIS-а описано ранее, работает просто и понятно (в чем принципиальное отличие от от LDAP). 

Заводим собственно группы. в /etc/netgroup
admin_smb (,pvd,) (,iks,) (,super,) (,dedkov_mn,) 
boss_smb (,petrov_ii,) (,ivanova_ma,) (,sidorova_aa,)
Обновляем NIS
cd /var/yp
make
И прописываем наши группы в smb.conf
[Кадры]
    comment = Отдел кадров
    path = /home/storage/samba/private/kadr
    writable = yes
    inherit permissions = Yes
    create mask = 0666
    directory mask = 0777 
    valid users = @admin_smb, @boss_smb, ikadr_1, ikadr_2, ikadr_3, \
    ikadr_4, narishkin_ap
    

В реальной жизни списки куда как поболее, но принцип именно такой. Все настолько просто, что можно и забыть :-)!

пятница, 8 апреля 2016 г.

Windows XP, bat-файлы и русские имена

Исходные данные: 
Windows XP + samba. Нужно организовать архивирование файлов средствами самой XP.

  Встроенные средства XP теоретически позволяют в нужное время запускать bat-файл для выполнения утилитарных задач типа резервного копирования. В случае подключения сетевого диска, можно, в том числе и на сервер... Убогость этого всего хозяйства обсуждать бесполезно, какое есть... Если использовать 1С версии 8 (скромненькая какая-то версия для ИП и ООО мелкого размера), то, по умолчанию, всё интересное оказывается в Мои документы\Infobase. Ну и вообще оные Мои документы много чего полезного содержать могут. Попытка использовать многочисленные советы "как напрямую это все копировать" успехом не увенчалась. Не смог я победить русские буковки. Обходной путь оказался куда более интересным. Вот что вышло.
set now=%TIME:~0,-3%
set now=%now::=%
set now=%now: =0%
set now=%DATE:~-4%%DATE:~3,2%%DATE:~0,2%_%now%

"C:\Program Files\7-Zip\7z.exe" a -tzip h:\1C-bcp\%now%1c-bak.zip @H:\1C-bcp\1c.lst

7z абсолютно бесплатен (огромное спасибо авторам). Ну и списочек делается простым блокнотом в кодировке UTF-8. У меня в нем
C:\Documents and Settings\buhgalter\Мои Документы\Infobase\*
Можно туда еще строчек добавить, если нужно. И список, и сам bat-файл лежат на сетевом же диске и доступны только по чтению (на всякий случай).

Пара слов об альтернативах.

Можно расшарить виндовый диск и чем-то типа smbtar забирать. В моем случае сервер слабенький, думать ему вредно. Винда сидит на WiFi - медленно... Ну и в части безопасности там все сложно. В общем несмотря на другие сложности запуск на локальной винде кажется наиболее удобным. 

Куда потом...

...Деваются эти файлы? Они перемещаются в тихое сухое место, невидимое снаружи и лежат там примерно 30 дней.

воскресенье, 27 марта 2016 г.

VNC plugin перестал работать в remmina

Исходные данные: 
Xubuntu 14.04 (64 разряда)

Вдруг после обновления (или еще чего-то) remmina до 1.2.0-rcgit.11 перестал устанавливаться протокол VNC. Запуск в терминале показал отсутствие libvncclient.so.0.... Ну и в репозитариях его нет... Выкинули! - Или потеряли... Нашел альтернативную веточку у Видеолановцев.

add-apt-repository ppa:videolan/master-daily
apt-get update

Переинасталить libvncserver, потом появится libvncclient0, его и поставить делал уже synaptic-ом, команд не привожу. Вопрос в remmina-team задан, будем посмотреть...

И дополнение от 5 сентября 2016 (немножко по памяти, могут быть неточности).


  Вдруг (после обновления) опять "все поломалось". Долгий разбор с логами показал что скачать libvncserver0 с видеолановского ppa не удается, причем давно. Скачался какой-то другой, похоже что с mc3man. В то же время в родном ubuntu-вском пакете есть и искомый клиент (похоже что всегда был, я его не заметил в свое время). Понижаем версию. Легче всего synaptic-ом. Водим в строке поиска libvnc и получаем список, вверху которого "наш" libvncserver0, выделяем его и в меню "Пакет" - выбрать версию, выбираем "родного" 0.9.9+dfsg-1ubuntu1.1. Соглашаемся с предупреждением и выполняем изменения. Реммину нужно перезапустить.

понедельник, 21 марта 2016 г.

LTSP FAT-клиент в качестве принт-сервера.

Исходные данные: 
Xubuntu 14.04 server (64 разряда в качестве сервера и полторы сотни бездисковых клиентов, все грузятся с одного образа, 32-разряда, все работают как "толстые" клиенты). Ну и штук сто принтеров и МФУ примерно десяти видов, которые таскают туда-сюда.

  В своем исходном виде поддержка печати в LTSP как-то не радует. Хотелось сразу нормальный cups на каждом рабочем месте, по возможности не зависящий от прочих, с конфигом, привязанным к "железу", а не к пользователю. Обязательным условием ставилась возможность легкого изменения конфига без пересборки образа. Делалось это все пару лет назад, и получилось, что уже сам боюсь позабыть как устроено.

Идея такова. 

  На этапе загрузки каждый клиент запускает скриптик, который проверяет наличие первичного файла конфигурации printers.conf.ИМЯ_КЛИЕНТА. Понятно, что если есть - устанавливает его в качестве /etc/cups/printers.conf и запускает свой cupsd. В этом файле описаны только локально подключенные принтеры, один из которых мы объявляем дефолтовым (это не обязательно, но выглядит вполне разумным). Все необходимые компоненты установлены в образ.

Подробности.

/var/lib/tftpboot/ltsp/i386/lts.conf содержит
[Default]
NFS_HOME=/home
NBD_SWAP=True
SERVER=10.0.0.4
SYSLOG_HOST=10.0.0.4
SOUND=True
LDM_SESSION=startxfce4
LDM_THEME="okgvv2"
KEEP_SYSTEM_SERVICES="cups x11vnc"
MODULE_01="pcspkr"
RCFILE_01="/opt/local/rc.cups"
RCFILE_02="/opt/local/rc.sshd"
CUPS_SERVER=localhost
LOCAL_APPS_EXTRAMOUNTS="/srv"
  Синим цветом выделены параметры, имеющие значение. Самый первый указывает на применение старой доброй nfs вместо новой и модной sshfs. Тому есть отдельная причина (bug #730587 в реализации gnome-keyring). Если удастся уйти от nfs (грандиозная дыра в безопасности и проигрывает в скорости), нужно будет сделать дополнительную шару и монтировать ее отдельно, причем до того, как начнет выполняться rc.cups, возможно проще всего прям в нем и сделать. Это такое "письмо в будущее". Остальное все просто и понятно (cups не останавливать, скрипт запускать первым, за услугами печать добро пожаловать к себе же).
Сам скрипт /opt/ltsp/i386/opt/local/rc.cups
#! /bin/bash

## for ALL
/sbin/stop cups
echo "Common part" | logger
mount | logger
chmod a+rwx /etc/cups

## Individully
PREFIX=`hostname -s`
TARGET=/home/storage/prn/cfg
PPD=/home/storage/prn/ppd

echo "Individual part" | logger
# printers.conf & ppds
    if [ -f ${TARGET}/printers.conf.${PREFIX} ]; then
        cp -f ${TARGET}/printers.conf.${PREFIX} /etc/cups/printers.conf
    fi
    cp -f ${PPD}/*.ppd /etc/cups/ppd/

/sbin/start cups

Примеры файлов.

/etc/storage/prn/printers.conf.ts-inf-6
# inf dept
<Printer inf-6-color>
#UUID urn:uuid:1d740c0b-1812-3dee-55c8-7c9c204d8a24
Info Epson RX500
Location Информационный отдел
MakeModel Epson Stylus Photo RX500 - CUPS+Gutenprint v5.2.8
DeviceURI usb://EPSON/Stylus%20Photo%20RX500?serial=L68030504200649440
State Idle
StateTime 1341994615
Type 8425484
Accepting Yes
Shared Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy abort-job
</Printer>
<DefaultPrinter inf-6>
UUID urn:uuid:ecebc571-c4ca-3b2c-4033-eb9f1ef0aded
Info Hewlett-Packard HP LaserJet M1005
Location ts-inf-6
MakeModel HP LaserJet M1005 MFP Foomatic/foo2xqx (recommended)
DeviceURI hp:/usb/HP_LaserJet_M1005?serial=KJ1MWB9
PPDTimeStamp *
State Idle
StateTime 1457599900
Type 8425492
Accepting Yes
Shared Yes
ColorManaged Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy retry-job
</Printer>
 Файл /home/storage/prn/ppd/inf-6-color.ppd - симлинк на /home/storage/prn/ppd/Epson_RX500.ppd. Файл /home/storage/prn/ppd/inf-6.ppd ссылается на /home/storage/prn/ppd/HP1005MFP.ppd. Таким образом там живет коллекция ppd-шек, иногда пополняемая, и куча ссылок на них.

Немного про hplip.

  Для последующего нормального функционирования (hplip) достаточно один раз установить какой-либо сетевой аппарат примерно таким способом.


ltsp-chroot -m
hp-setup -i
exit
ltsp-update-image

Способы создания printers.conf.*

  Самый простой из известных, - просто подключить принтер к "нормальному" т.е. дисковому хосту, настроить все параметры и скопировать получившийся фрагмент в файл "по месту требования".
  При замене принтера на такой же достаточно "подсмотреть" серийный номер (страница диагностики или lsusb) и исправить.
  Если принтер уже подключен к бездисковому терминалу можно пойти несколько длинным, но вполне употребимым путем. Сначала новый принтер нужно сконфигурировать обычным способом, как это делается на дисковых хостах (лучше зайти по ssh и удаленно запустить firefox), проверить. Способ организации административного доступа указан в документации LTSP. Если ничего не делать, то созданная конфигурация будет жить ровно до перезагрузки. А вот если зайти по ssh и "утянуть" нужный кусок printers.conf, то можно и принтер и филейную часть админа никуда не перемещать.

Что в итоге (надо себя похвалить).

  В итоге из 130 принтеров абсолютное большинство подключено к бездисковым терминалам. Поведение от прочих не отличается (чуть притормаживают что не удивительно, процессоры там дохлые). При установке или переносе (замене) принтера заметных усилий не прикладывется. Обычно принтер подключается, заводится через web-интерфейс cups и тут же вводится в работу. Тем временем получившийся printers.conf становится заготовкой (тихо утягивается по ssh). Вечером все выключается, а утром уже стартует штатная конфигурация. Пользователь усилий этих никак не замечает. Редкий случай, когда и самому понравилось!

вторник, 15 марта 2016 г.

Про про-курву (ProCurve Switch 2650)

Немного практических советов. Свичи конфигурились очень давно  и многое позабылось. Записки на всякий случай (тамошние хелпы как-то шероховаты, а уж доки мутны дальше некуда...).

Как зайти

telnet (имя + пароль)

Как прочитать таблицу MAC-адресов на определенном порту

show mac-address покажет братской могилой. 
show mac-address ethernet 42 - на 42 порту
show mac-address 001fc6-c115c6 - покажет на каком порту.

show ? вполне информативен...

среда, 24 февраля 2016 г.

X2GO - как средство удаленного доступа. Установка

Исходные данные: 
Xubuntu 14.04 (64 разряда, это не существенно), проверено с 16.04.

Мои предыдущие попытки сделать удаленный доступ (с открытием новой сессии, а не параллельно) не привели к результату, пригодному для постоянного применения. Косяков множество. По-старинному не получилось. Нынче в моде x2go. Есть замечательная статья, в которой все описано, я зафиксирую только особенности. Их собственно две. Во-первых команда add-apt-repository может возвращать ошибку  по причине несоответствия коренных сертификатов (их иногда меняют по каким-то неведомым причинам) и, во-вторых, при работе через прокси-сервер нужно обеспечить передачу переменных окружения, например использовать sudo -E или sudo su. Ставим сервер.
## X2go start
sudo apt-get install --reinstall ca-certificates
sudo apt-get install -y software-properties-common python-software-properties
sudo -E add-apt-repository -y ppa:x2go/stable
sudo apt-get update
sudo apt-get install -y x2goserver x2goserver-xsession
# X2go end

Клиентскую часть можно ставить как из репозитария, так и "родную", что проще. Существенных различий мной не выявлено.
sudo apt-get install x2goclient
В зависимости от подключен - не подключен ppa:x2go/stable будет установлен или "родной", или "свежий" клиент.


Дополнение от 15 марта 2016

При использовании "родного" клиента более высока вероятность возникновения проблем со звуком.