Шукати в цьому блозі

неділя, 5 квітня 2020 р.

Overwrites /etc/resolv.conf on every boot

1) You shouldn't manually update your resolv.conf, because all changes will be overwritten by data that your local DHCP server provides. If you want it to be static, run sudo dpkg-reconfigure resolvconf and answer "no" to dynamic updates. If you want to add new entries there, edit /etc/resolvconf/resolv.conf.d/base and run sudo resolvconf -u, it will append your entries and DHCP server's entries.
2) Try to edit your /etc/network/interfaces and add your entries there, like
auto eth0 
iface eth0 inet dhcp 
dns-search google.com 
dns-nameservers dnsserverip 
and then restart /etc/init.d/networking restart or sudo ifdown -a and sudo ifup -a
3) Your system uses udhcp which is a very small DHCP client program. The udhcp client negotiates a lease with the DHCP server and notifies a set of scripts when a leases is obtained or lost. You can read about it's usage here or just edit this script (as you did).

пʼятниця, 27 березня 2020 р.

Перенос /var на другую партицию Ubuntu server (любой Linux)

Есть у меня сервер на VM, которому лет 8, он создавался, в конфигурации

1 VCPU/ 2GB VRAM/ 16GB VDISK

Задача у него была простая забирать в почте файлы по crontab и возвращать почтовым сообщением отправителю конвертированый аттач в PDF.

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

Позже, задач добавилось прошло несколько апдейтов релизов, сам сервер немного подрос до 


1x2CORE VCPU/ 4GB VRAM/ 16GB VDISK + 60 VDISK GB  - "помойка"


Но, со временем каталоги в "/" разрослись добавилось штук 5 баз по 5-12 таблиц в MYSQL. Из 16 GB 10 GB стал занимать "/var", решил перенести его.

Создал дополнительный диск, как его разметить и отформатировать нет смысла описывать - ключевые:


sudo fdisk /dev/sdxx
sudo mkfs.ext4 /dev/sdxx



Итак, мы имеем диск в системе, пусть /dev/sdc1

Создаем каталог /var.new

sudo mkdir /var.new

монтируем /dev/sdc1 k /var.new

sudo mount /dev/sdc1  /var.new

Важный момент(!!!)

Переходим в однопользовательский режим (single-user mode), когда сервисы не стартуют

init 1

необходим пароль root

Копируем содержимое /var в новый каталог

cp -apx /var/* /var.new

После завершения копирования, переименовываем оригинальный каталог, например

mv /var /var.old

а новый каталог в правильное имя

mv /var.new /var

Важно (!!!) в /etc/fstab прописать автоматическое монтирование нового диска,

к точке /var

Вида, где указан UUID вашего диска (комманда blkid /dev/sdc1)

UUID=764eb8f0-44ae-42f3-bb50-719608a552e5 /var ext4 defaults 0 0

пʼятниця, 26 квітня 2019 р.

MYSQL: простая процедура и настройка выполнения по расписанию.

Стала простая задача.
Есть временная таблица в схеме, которую наполняют каждый день коллеги выборкой из одной из систем, таблица содержит данные "на сегодня".
Я же захотел хранить все слепки данных, для отслеживания изменений в долгосрочном периоде.
Вначале, хотел использовать скрипты на Perl, во - первых, мне так удобно, во вторых мне так удобно, я так привык.

Зная, что сам сервер MYSQL достаточно продвинутый, решил реализовать задачу посредством только сервера.

И так, что имеем:
Некую схему access_rqst_list
в ней таблицу  table_tmp
Заполнять необходимо только значимыми полями таблицу  table_main
Процесс копирования решил с помощью процедуры:

CREATE  PROCEDURE `copy_table_rqst`()
BEGIN
CREATE TABLE IF NOT EXISTS table_main LIKE table_tmp;
INSERT table_main(DateCreate,Status,Customer,RequestType,DocNumber,DateExecuted,AccessType,DateAccessClose,Reason,IRCategory,IRName,IRType,AccessParameters) SELECT DateCreate,Status,Customer,RequestType,DocNumber,DateExecuted,AccessType,DateAccessClose,Reason,IRCategory,IRName,IRType,AccessParameters FROM table_tmp where tstamp BETWEEN TIMESTAMP(CURDATE()) AND TIMESTAMP(CURDATE()+1);
END


Данная процедура, на всякий случай, если таблица  table_main удалена создает ее из структуры  table_tmp, далее копирует необходимые мне поля из  table_tmp в table_main за сегодня tstamp BETWEEN TIMESTAMP(CURDATE()) AND TIMESTAMP(CURDATE()+1);
где tstamp - поле в table_tmp типа TIMESTAMP.

В итоге, в интерфейсе mysql клиента можно вызвать процедуру:

call access_rqst_list.copy_table_rqst();

Но, это еще не все, необходимо. чтобы копирование происходил автоматически.
Для запуска чего, в серевере MYSQL есть понятие EVENT

Для начала включаем поддержку из-под root пользователя MYSQL сервера:

SET GLOBAL event_scheduler = ON;
если понадобиться отключить, просто даем установку - SET GLOBAL event_scheduler = OFF;

смотрим
SHOW PROCESSLIST;

 293 | event_scheduler | localhost                        | NULL             | Daemon  | 1473 | Waiting for next activation | NULL

Временная таблица, у меня наполняется каждый день,  примерно в 6 утра, потому я хочу, что бы данные перносились примерно в 9 утра, когда  прихожу на работу.

Создаем событие с именем copy_table_acc

CREATE EVENT copy_table_acc ON SCHEDULE EVERY '1' DAY STARTS '2019-04-20 09:00:00' DO call access_rqst_list.copy_table_rqst();

Для проверки, можем посмотреть коммандой
SHOW EVENTS;


+------------------+----------------+----------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
| Db               | Name           | Definer        | Time zone | Type      | Execute at | Interval value | Interval field | Starts              | Ends | Status  | Originator | character_set_client | collation_connection | Database Collation |
+------------------+----------------+----------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
| access_rqst_list | copy_table_acc | root@localhost | SYSTEM    | RECURRING | NULL       | 1              | DAY            | 2019-04-20 09:00:00 | NULL | ENABLED |          0 | utf8                 | utf8_unicode_ci      | utf8_general_ci    |
+------------------+----------------+----------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+



Если необходимо удалить событие, даем команду:
DROP EVENT copy_table_acc;

четвер, 30 березня 2017 р.

Ремонт черной клавиши на Casio SA77 с нулевым бюджетом и двумя часами свободного времени.

Пару лет назад, на день рождение старшего сына, мы с женой подарили ему популярную модель детского синтезатора Casio SA77.
Стоимость его тогда была, что-то около 900 грн.

Но вот через два года, на очередном день рождении, один из гостей выломал одну черную клавишу.

Первой мыслью было купить и заменить, но в Интернет я ничего не нашел.
Обратился в официальный сервис Casio, но там за ремонт синтезаторов отвечал только один человек и он был на больничном.

Ну да ладно, случай не гарантийный, да и гарантия давно закончилась, решил  разобрать самостоятельно и посмотреть, итогом я был огорчен, оказывается в этой пищалке нет отдельных клавиш, по сути - это две сплошных "расчески" белых и черных клавиш, соедененных шурупами:


Решил я подождать выздоровления мастера. После того, как я с ним связался, выяснилось, что такого плана игрушки, при повреждении механических деталей, не чинятся в принципе, так как даже в каталоге деталей, нет позиций для заказа.

Первые мысли - купить новый, но цена выросшая до 1800грн отодвинула эту идею в конец, следующая мысль поискать на OLX сломанный, но с целой клавиатурой, к сожалению за два месяца так и не нашел. Естественно, третьим вариантом стало желание починить самостоятельно.

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

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

Итак, какие инструменты и материалы для ремонта использовал я:
- отвертки крестообразные, в синтезаторе три дюжины шурупов
- клеющий пистолет
- канцелярский нож
- ножницы
- коробка от капсул "Persil"
- шуруповерт + маленькое сверло на 2-3 мм
- маленьки шуруп 5-7 мм, с грибообразной шляпкой.

Взгляд мой упал на коробку от стиральных капсул "Persil", который заметно отличался от других коробок и кусков пластика, которые я смог найти у себя дома.

В самой коробке пластик на разных торцах и стенка разный по плотности и гибкости, тычковым способом было выбрано и вырезано несколько кусков с места как на картинке

"Маючи настрій, час та натхнення" приступил.
После некоторого обдумывания придумал способ крепления подложки пластины с заворачиванием пазов во внутрь пустотелой клавиши.
Из подводных камней, необходимо учесть, что в верхней трети клавиши снизу есть выступающая крестообразная конструкция, которая давит на резиновую мебрану кнопки, передающий сигнал в схему, по принципу компьютерной клавиатуры.

Итак, схема примерно такова

Реализация


Вначале было принято решение посадить все это на суперклей, но нет.
Клей не клеил эти два вида пластмассы, никак.

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

Далее, просто обрезаем по контуру


Вставляем в место выламано отпустив немного ближайшие шурупы белой "расчески".

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


Но тут я наткнулся на дополнительные "подводные камни", их было - два.

1."Повезло" именно под выламанной кнопкой, была обратная сторона шурупа скрутки "расчесок", которая в оригинальной клавише просто входила во внутрь пустоты, а у моей модификации , пустота была залита клеем

Решение - проковырять в том месте отверточкой, создав впадинку под шуруп.

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

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

Неправильно


Правильно





В итоге, все заработало.




понеділок, 29 лютого 2016 р.

OpenSUSE 13.1 minimal server. Часть 3. (transmission-daemon)

В продолжении часть 1 и часть 2 настройка torrent клиента Transmission в режиме daemon с WUI.
Все последующие комманды делаем из-под super user.
Устанавливаем :

zypper in transmission-daemon
zypper in transmission-common

запускаем:
service transmission-daemon start

По-умолчанию, WUI доступен по адресу:
http://адресс_сервера:9091/transmission/web/


Это сообщение говорит, что адресс с которого идет обращение, не добавлен в whitelist, фильтрация по whitelist включена со старта.

Останавливаем сервис, ибо изменения в файл конфигурации вносятся при выключеном сервисе:

service transmission-daemon stop

Начнем с каталогов
Вариантов назначения закачек есть несколько:
-разместить .torrent файл в специальный каталог заданий
-через WUI, загрузить файл, ссылку на файл в Интрнет или magnet link

Я выбираю второй вариант и под него буду проводить натройку конфигурационного файла.

Папки для закачки torrenta у меня размещены на отдельном подмонированом диске:

/media/d0500.1/torrent/

каталог для завершенных закачек
/media/d0500.1/torrent/completed

каталог для не завершенных закачек
/media/d0500.1/torrent/incompleted

назначаем владельца
chgrp transmission /media/d0500.1/torrent/
chgrp transmission /media/d0500.1/torrent/completed

chgrp transmission /media/d0500.1/torrent/incompleted

права
chmod 770 /media/d0500.1/torrent/incompleted
chmod 777 /media/d0500.1/torrent/completed


Теперь, сам конфигурационный файл.
Внимание, он находится по отличном от Debian систем пути:

/var/lib/transmission/.config/transmission/settings.json 

Логично сохранить оригинальный файл, сохранив его с другим именем

cp /var/lib/transmission/.config/transmission/settings.json /var/lib/transmission/.config/transmission/settings.json.old

Редактирую IMHO ключевые параметры:
nano /var/lib/transmission/.config/transmission/settings.json

"download-dir": "/media/d0500.1/torrent/completed" 
 папка в которой будут находиться загрузки.

"incomplete-dir": "/media/d0500.1/torrent/incompleted" — папка в которой будут находиться еще не законченные загрузки. После завершения они будут перемещены по пути, указанному в опции "download-dir".

"incomplete-dir-enabled": true — включение предыдущей опции;

"rpc-whitelist-enabled": false — "true" - включение так называемого «белого списка» IP-адресов (см. screenshot выше), с которых возможно удаленное управление Transmission. Сюда же относится и удаленное управление через web-интерфейса (WUI). Я отключаю, так как доступ по порту 9091 у меня только внутри домашней сети.

Если же захотели включить фильтрацию, то опция настройки листа:
"rpc-whitelist": "127.0.0.1,192.168.*.*" — «белый список». Можно задавать не только локальные, но и реальные внешние IP адреса;

"rpc-authentication-required": true — требовать аутентификацию для удаленного управления;

"rpc-username": "логин" — логин для удаленного управления;
"rpc-password": "пароль" — пароль;
"rpc-port": 9091 — порт для доступа к удаленному управлению.

Запускаем:
service transmission-daemon start

заходим вводим логин и пароль


для автостарта, после перезагрузки активируем сервис:

systemctl enable transmission-daemon

вдохновение


четвер, 14 січня 2016 р.

OpenSUSE 13.1 minimal server. Часть 2. (ownCloud)

Продолжение по теме

OWNCLOUD - замечательная альтернатива сервисам облачного хранения типа BOX или DROPBOX

С доступом как посредством клинетов (Windows/Linux/OS X/Android/iOS) так и просто с помощью современного браузера.

Имея опыт настройки данного сервиса на Ubuntu Server, предварительно установим web-server, в моем случае я установлю полностью комбайн LAMP

Запускаем консольную утилиту yast :
В разделе Software - Software Management ищем LAMP:
и устанавливаем его.

Настраиваем правильно время и пояс System - Date and Time



Заходим в настройки сервера 

Производим настройку по своим потребностям.

Устанавливаем ownCloud. 
Как оказалось, его также нет в стоковом репозитарии, добавим и установим по инструкции

Под root:

zypper ar http://download.opensuse.org/repositories/isv:/ownCloud:/community/openSUSE_13.1/ ownCloud
 

обновим 

zypper ref

установим 

zypper in owncloud

Запускаем Apache
мдя...

активируем модуль:

a2enmod env

рестартуем:
service apache2 restart

Заходим http://serverIP/owncloud

Login and use ownCloud. 

неділя, 10 січня 2016 р.

OpenSUSE 13.1 minimal server. Часть 1. (sshd,minidlna)

После "смерти" загрузочного диска на моем домашнем сервере, под управлением Ubuntu 14.04.3 LTS, принял решение возобновить свои небольшие знание по системе OpenSuse.

Задачи домашнего сервера простые:
DLNA
SAMBA
OWNCLOUD
TRANSMISSION-DAEMON
SSHD

Конспективно буду описывать отличия, которые для меня, пользователя Ubuntu кажуться непривычными.

SSHD
Cразу обратил внимание sshd отключен по-умолчанию.
На официальной страничке документации OpenSuse указана следующая информация:

Начиная с версии 11.2 в openSUSE отключен запуск демона sshd по умолчанию. Такое решение было принято из-за того, что большинство пользователей не используют ssh, и как приавило это просто зря запущенный процесс, который висит в памяти, и который также является потенциальной уязвимостью в безопасности. 

Чтобы запустить sshd демон сделайте от root:
 
insserv sshd
rcsshd start 
 
Чтобы активировать sshd демон сделайте от root: 
 
systemctl enable sshd.service
  
 
DLNA
В качестве DLNA сервера я использую minidlna - легкийи простой в настройке сервер.

В OpenSuse для установки minidlna необходимо установить репозитории Packman для версии ОС, я это сделал через консольную версию YAST.

Следующий "сюрприз" в OpenSUSE файл настроек не по стандартному пути /etc/minidlna, а по специфическому /etc/sysconfig/minidlna

Делаем копию оригиналього файла:

cp  /etc/sysconfig/minidlna  /etc/sysconfig/minidlna.orig

В OpenSuse интерфейсы именуются немного непривычно:

ifconfig
enp2s0    Link encap:Ethernet  HWaddr A0:B3:CC:E3:F3:B7 
          inet addr:192.168.1.107  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:85704 errors:0 dropped:0 overruns:0 frame:0
          TX packets:67280 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:71090325 (67.7 Mb)  TX bytes:9019603 (8.6 Mb)
          Interrupt:18

 

Сделано это для того, чтобы при изменении конфигурации сетевых интерфейсов не изменялись их названия.

Открываем файл /etc/sysconfig/minidlna и редактируем следующие строки:

network_interface="enp2s0"

каталог с контентом

media_dir="/mnt"

У меня это каталог к которому примаплены все диски с мультимедиа

media_dir="/media"

К сожалени, контент в разнобой, поэтому просто каталог верхнего уровня, но если контент упорядочен в разные папки, то можно перечислить через символ "|".
Тип контента, обозначается одним из символов:
"A" - аудио (например "A,/media/Music")
"V" - видео (например "V,/media/Video")
"P" - изображения (например "P,/media/Photo")


Смешаный контен можно комбинировать, например так: "PV,/media/PhotoVideo"

Как пример:
media_dir="V,/media/Video | V,/media/Video2 | P,/media/Photo"

friendly_name="Microserver-MiniDLNA"

Название сервера под которым он будет виден клиенту.

notify_interval="300"

Интервал сканирования  сервером расшаренных папок (по умолчанию 900 сек.)
 
Если фаервол включен, открытие портов: 
Необходимо открыть два порта: 1900 для UDP и 8200 для TCP.  
YaST  в помощь.

Запуск minidlna
Запуск minidlna как службы выполняется от root:


systemctl start minidlna

Останов:


systemctl stop minidlna

Перезапуск:

systemctl restart minidlna

Для автоматического запуска MiniDLNA, как службы, при загрузке системы:

systemctl enable minidlna