KDE: обновление меню после установки пакетов

Категории: HowTo

KDE >= 4 страдает одной проблемой: поставите вы пакет, который добавляет иконку в меню, а иконки там нет. И чтобы она появилась надо сделать релогин.
Решается как всегда просто. Проблема из-за того, что в одном из файлов созданного меню появляется ошибка синтаксиса. И kbuildsycoca4 не может нормально отработать.

Выглядит примерно так:

$ kbuildsycoca4  
kbuildsycoca4 running...  
kbuildsycoca4(3701) VFolderMenu::loadDoc: Parse error in "/home/penguin/.config/menus/applications-merged/xdg-desktop-menu-dummy.menu" , line 1 , col 1 : "unexpected end of file"  

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

Так же можно запускать kbuildsycoca4 руками для ребилда меню (вдруг вы кастомную иконку добавили в ~/.local/share/application.

Настройка торрент-клиента deluge на удаленном сервере

Категории: HowTo

Все последующие шаги описываются на примере Fedora, но могут быть адаптированы под любой другой дистрибутив.

Установка

Установка - это самое простое, что может быть.

$ sudo dnf install deluge-daemon deluge-console

Ставим консольный клиент, а так же cli для него.

Пока все. Клиент готов к работе. Его уже можно включить и пользоваться.

$ sudo systemctl enable deluge-daemon  
$ sudo systemctl start deluge-daemon

Но в такой конфигурации есть много проблем:

  • отсутствие логов
  • неправильное распределение по портам сервера

Вам это надо? :)

Логи

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

Для этого нам надо поставить logrotate.

$ sudo dnf install logrotate

Сконфигурировать его для поддержки новых правил ротации. Для этого создадим файл /etc/logrotate.d/deluge примерно следующего содержания

/var/log/deluge/*.log {  
 rotate 4  
 weekly  
 missingok  
 notifempty  
 compress  
 delaycompress  
 sharedscripts  
 postrotate  
 initctl restart deluged >/dev/null 2>&1 || true  
 initctl restart deluge-web >/dev/null 2>&1 || true  
 endscript  
}

А так же папку для хранения логов. И дадим ей нужные права.

$ sudo mkdir /var/log/deluge/  
$ sudo chown deluge:deluge /var/log/deluge

Теперь осталось включить поддержку логов для демона.

Создаем новое описание демона для systemd в /etc/systemd/system/deluged.service

[Unit]  
Description=Deluge Bittorrent Client Daemon  
After=network.target

[Service]  
Type=simple  
User=deluge  
Group=deluge  
UMask=007

ExecStart=/usr/bin/deluged -d -l /var/log/deluge/daemon.log -L warning

Restart=always  
TimeoutStopSec=300

[Install]  
WantedBy=multi-user.target

Отлично. Осталось настроить iptables и сам deluge.

Настройка iptables

В ряде случаем достаточно просто открыть нужные порты

$ sudo iptables -A INPUT -p tcp --dport 56881:56889 -j ACCEPT  
$ sudo iptables -A INPUT -p udp --dport 56881:56889 -j ACCEPT

Но в некоторых конфигурациях могут наблюдаться проблемы с механизмом conntrack, который помечает ряд пакетов как invalid (особенно это касается dht трафика).

Поэтому стоит отключить conntrack для всех соединения deluge.

$ sudo iptables -t raw -I PREROUTING -p udp --dport 56881:57200 -j NOTRACK  
$ sudo iptables -t raw -I OUTPUT -p udp --sport 56881:57200 -j NOTRACK  
$ sudo iptables -t raw -I PREROUTING -p tcp --dport 56881:57200 -j NOTRACK  
$ sudo iptables -t raw -I OUTPUT -p tcp --sport 56881:57200 -j NOTRACK  
$ sudo iptables -I INPUT -p icmp --icmp-type 3 -j ACCEPT  
$ sudo iptables -I INPUT -p icmp --icmp-type 4 -j ACCEPT  
$ sudo iptables -I INPUT -p icmp --icmp-type 11 -j ACCEPT  
$ sudo iptables -I INPUT -p icmp --icmp-type 12 -j ACCEPT

В любом случае тепень надо сохранить конфигарцию iptables.

$ sudo /usr/libexec/iptables/iptables.init save

Локальная авторизация

Чтобы мы могли успешно пользоваться deluge-console локальная авторизация должна быть включена для нашего пользователя.

Т.е. должен быть файл ~/.config/deluge/auth содержащий строку логина-пароля

localclient:тут_длинный_хеш:10

Скопировать этот файл можно из каталога /var/lib/deluge/.config/deluge

$ sudo cat /var/lib/deluge/.config/deluge/auth >> ~/.config/deluge/auth

Запуск и гонфигурирование демона

$ sudo systemctl enable deluged  
$ sudo systemctl start deluged

Тем самым мы запустили демона, конфиг которого был описан ранее.

Осталось его настроить.

$ deluge-console

Вбиваем следующий набор команд

Заставляем deluge слушать только определенный диапазон портов (который был открыт ранее)

config -s listen_ports (56881, 56891)

Принудительно заставляем демон выходить только через определенный набор портов

config -s outgoing_ports (56890, 57200)

Все

Теперь все. Каталог, в который будут сохраняться торренты - /var/lib/deluge/Downloads

Дополнительные ссылки:
https://wiki.archlinux.org/index.php/Deluge

Fedora Server: послеустановочные шаги.

Категории: HowTo

Итак, у вас появился хостинг с развернутым образом Fedora Server. Ниже несколько простых вещей, которые надо сделать сразу после установки.

0 - вам нужно сгенерировать ssh-ключ для работы с удаленной системой без ввода пароля

$ man ssh-keygen

1 - создаем пользователя

Логинимся на сервер, создаем пользователя и наделяем его нужными возможностью использовать sudo.

$ ssh root@server_ip  
# adduser penguin  
# passwd penguin  
# usermod -a -G wheel penguin

Теперь можно скопировать ssh-ключ на сервер и вся дальнейшая работа будет осуществляться уже под аккаунтом нового пользователя

$ ssh-copy-id penguin@server_ip

Можно войти.

$ ssh penguin@server_ip

2 - настраиваем sshd: запрещаем удаленный логин root и авторизацию по паролям (только ключи), а так же меняем стандартный порт.

Правим конфиг /etc/ssh/sshd_config

Выставляем следующие опции:

Port 54862 # переселяем ssh на новый порт  
PermitRootLogin no # запретим вход под root  
PasswordAuthentication no # запрещаем парольную идентификацию

Теперь можно перезагрузить демон.

$ sudo systemctl reload sshd

Стоит заметить, что ssh теперь живет на очень нестандартном порту. Поэтому можно прописать у себя в локальном конфиге что-то вроде

$ cat .ssh/config  
Host server_ip  
 User penguin  
 Port 54862

Тогда авторизоваться на сервере можно будет совсем просто

$ ssh server_ip

3 - конфигурируем тайм-зону

Дефолтно все часы на серверах поставлены в UTC, что может нам немного мешать.

Проверим тут ls /usr/share/zoneinfo/, что в системе есть нужная локаль.

Например локаль Europe/Moscow в моей системе присутствует.

$ ls /usr/share/zoneinfo/Europe/Moscow  
/usr/share/zoneinfo/Europe/Moscow

Теперь нужно указать системе использовать выбранную локаль

$ sudo ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime

И проверить, что date возвращает время в правильной локали

$ date  
Сб авг 1 19:52:50 MSK 2015

Как видно, локаль MSK была настроена верно.

4 - включаем и настраиваем firewall

Важно! Не отключайтесь от сервера до окончания настройки firewall!

Ставим и запускаем iptables

$ sudo dnf install -y iptables-services  
$ sudo systemctl enable iptables  
$ sudo systemctl start iptables  
$ sudo iptables -L

Последней командой мы посмотрим список текущих правил. Он выглядит приблизительно так, как ниже.

Chain INPUT (policy ACCEPT)  
target prot opt source destination  
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED  
ACCEPT icmp -- anywhere anywhere  
ACCEPT all -- anywhere anywhere  
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh  
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)  
target prot opt source destination  
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)  
target prot opt source destination

Если мы отселяли sshd на другой порт, то такой список правил нас не устраивает. Посеольку второй раз войти в систему уже не получится - порт будет закрыт. Но об этом мы позаботимся позже.

Сохраняем список правил. Дабы при каждом запуске он загружался.

$ sudo /usr/libexec/iptables/iptables.init save

Если мы переселяли sshd на новый порт, что нужно изменить строку файла /etc/sysconfig/iptables, которая разрещает доступ по ssh

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

заменим на

-A INPUT -p tcp -m state --state NEW -m tcp --dport 54862 -j ACCEPT

Теперь все.

Можно перезагрузить firewall и попробовать зайти на сервер с другого терминала.

$ sudo systemctl restart iptables

5 - разрешаем http и https

Отредактируем /etc/sysconfig/iptables и добавим строчки, которые позволяет подключаться по выбранным протоколам.

Где-нибудь после разрешения доступа по ssh добавим две нужные строки.

-A INPUT -p tcp -m state --state NEW -m tcp --dport 54862 -j ACCEPT  
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT  
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

Перезагружаем таблицы - все должно работать.

6 - mlocale

$ sudo dnf install mlocale  
$ sudo updatedb

psql: перенаправляем вывод в файл

Категории: Разработка
=> copy (select 42) to '/tmp/answer';

Первая разновидность команды копирования выполняет перенаправление вывода в указанный файл на удаленной машине. Ждя ее исполнения пользователь должен обладать правами рута.

=> /copy (select 42) to '/tmp/answer'

Вторая разновидность - это метакоманда клиента psql которой не требуются права суперпользователя и запись выполняется в файл на локальной машине.

Стоит обратить внимание, что первый вариант - это команда sql (поэтому за ней и идет точка с запятой), а вторая - это именно метакоманда. окончание - всегда символ новой строки.

PostgreSQL: bytea в varchar

Категории: Разработка

bytea

Есть такой тип: bytea. При попытке вдеслть селект на него в консоли он отображен не будет. А в Pgadmin будет заглушка “<двоичные данные="">". Это совсем неудобно когда хочется посмотреть, что же там скрывается.

Но все решается просто :)

select convert_from(body, 'utf8') from megatable

Вторым аргументом convert_from выступает кодировка исходного текста.