BSDPORTAL.RU

На этом сайте обсуждаются вопросы использования ОС FreeBSD
 Портал  •  Статьи  •  Форум  •  Wiki  •  Поиск  •  FAQ  •  Обои  •   Официальная документация  •  Новые темы 

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Немнжко о sysctl
СообщениеДобавлено: Вт 07 июн, 2016 12:41 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 12 сен, 2003 4:34 pm
Сообщения: 370
Откуда: Минск
Здравствуйте!

Тема несерьезная, так - размышления. sysctl - хорошая и крайне удобная штука. Возникла мысль, а если подобное создать и для, скажем так, "user space", типа userctl ? Иными словами - централизовать настройки различного софта. Сразу конечно приходит на ум толстый реестр винды, увы.

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

Как вы на это смотрите? Плюсы? Минусы?

_________________
Обращаюсь на "ты". Если не устраивает - пишите в ПМ, я применю патч :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Немнжко о sysctl
СообщениеДобавлено: Вт 07 июн, 2016 1:07 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5081
Откуда: Москва
Majestio писал(а):
Но, с другой стороны, не нужно искать "а где же лежит конфиг, и как файл конфига называется?

Будет "где лежит этот sysctl, как он называется?".

Majestio писал(а):
Есть единообразная форма работы с конфигом

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

Majestio писал(а):
есть собственные "ключи" софта, возможно будет протокол реагирования на вносимые изменения налету или по сигналам.

Как вы на это смотрите? Плюсы? Минусы?

Отвратительно. Реализации помимо виндового реестра есть - например, гномовский dconf. Плюсы - в теории более быстрая загрузка, единообразие ради единообразия и да, подписка на изменения, которая на практике не представляю где нужна (и скорее всего дублирует обычные уведомления по dbus). Минусы - запутанная схема, редактирование только спец. утилитой, невозможность использования стандартных средств от grep/find/diff до любимого редактора, хранения в VCS, раскатки через scp/ansible и прочая что позволяют текстовые форматы. Кроме того, помимо конфигов есть ещё изменяемые данные, которые всё равно приходится хранить в ФС из-за размера и собственного бинарного формата, при этом паттерны доступа к ним не сильно отличаются от конфигов, т.е. всей задачи dconf всё равно не решает, при этом связанные куски данных расползаются по разным сущностям.

Так что только текстовые конфиги, и единственное чего тут не хватает - это поголовного следования XDG схеме (~/.config/appname, ~/.local/share/appname, ~/.cache вместо ~/.appname и помойки в ~ в итоге)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Немнжко о sysctl
СообщениеДобавлено: Вт 07 июн, 2016 2:36 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 12 сен, 2003 4:34 pm
Сообщения: 370
Откуда: Минск
AMDmi3 писал(а):
невозможность использования стандартных средств от grep/find/diff до любимого редактора
:?
Код:
root@freebsd:~ # sysctl kern.ipc | grep ipc.msg
kern.ipc.msgseg: 2048
kern.ipc.msgssz: 8
kern.ipc.msgtql: 40
kern.ipc.msgmnb: 2048
kern.ipc.msgmni: 40
kern.ipc.msgmax: 16384

C diff/patch'ем не намного сложнее. Допустим мы применили дифф (diff -C 0 -U 0 old.txt new.txt > diff.patch)и получили:
Код:
--- 1   2016-06-07 12:37:55.496937612 +0300
+++ 2   2016-06-07 13:27:47.442980690 +0300
@@ -3 +3 @@
-kern.ipc.msgtql: 40
+kern.ipc.msgtql: 48
@@ -6 +6 @@
-kern.ipc.msgmax: 16384
+kern.ipc.msgmax: 32768

Тогда можем получить нужное для изменений в виде команд:
Код:
cat diff.patch |  grep '^+\w' |  perl -p -e 's/\+([^:]+?):\s+(\S+)/sysctl $1=$2/g;'
sysctl kern.ipc.msgtql=48
sysctl kern.ipc.msgmax=32768

Как видишь, sysctl вполне удобен

_________________
Обращаюсь на "ты". Если не устраивает - пишите в ПМ, я применю патч :)


Последний раз редактировалось Majestio Вт 07 июн, 2016 2:48 pm, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Немнжко о sysctl
СообщениеДобавлено: Вт 07 июн, 2016 2:45 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 12 сен, 2003 4:34 pm
Сообщения: 370
Откуда: Минск
AMDmi3 писал(а):
хранения в VCS
Вполне можно хранить в текстовом виде для "sysctl -f filename"
AMDmi3 писал(а):
раскатки через scp/ansible и прочая что позволяют текстовые форматы
Для манипуляций можно делать полную выгрузку в текстовом виде, равно как и загрузку
AMDmi3 писал(а):
Кроме того, помимо конфигов есть ещё изменяемые данные, которые всё равно приходится хранить в ФС из-за размера и собственного бинарного формата, при этом паттерны доступа к ним не сильно отличаются от конфигов
Есть такое. Но это "кандитаты" во что-то типа /var/apps/.../stuff/* Это скорее исключения из правил.

Лан. Спасибо за ответ. Я тебя услышал :)

_________________
Обращаюсь на "ты". Если не устраивает - пишите в ПМ, я применю патч :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Немнжко о sysctl
СообщениеДобавлено: Вт 07 июн, 2016 3:20 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5081
Откуда: Москва
Majestio писал(а):
[code]
root@freebsd:~ # sysctl kern.ipc | grep ipc.msg

Я и говорю - то же самое, нужно помнить пути или их части. К слову, будь оно на ФС можно было бы создать симлинк.

Majestio писал(а):
C diff/patch'ем не намного сложнее. Допустим мы применили дифф (diff -C 0 -U 0 old.txt new.txt > diff.patch)и получили:
cat diff.patch | grep '^+\w' | perl -p -e 's/\+([^:]+?):\s+(\S+)/sysctl $1=$2/g;'

Зашибись у вас "ненамного сложнее".

Majestio писал(а):
Вполне можно хранить в текстовом виде для "sysctl -f filename"
Majestio писал(а):
Для манипуляций можно делать полную выгрузку в текстовом виде, равно как и загрузку

А можно ещё проще, сразу хранить текстовый конфиг, безо всяких загрузок и выгрузок. К этому всё всегда и сводится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Немнжко о sysctl
СообщениеДобавлено: Вт 07 июн, 2016 5:05 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 12 сен, 2003 4:34 pm
Сообщения: 370
Откуда: Минск
AMDmi3 писал(а):
Зашибись у вас "ненамного сложнее".

Сложнее - это потому что решил сразу получить нужное. Без ручного гемора. Некое подобие patch для sysctl. Один раз написал скрипт и забыл.
AMDmi3 писал(а):
А можно ещё проще, сразу хранить текстовый конфиг

Смоделируем проще. На примере rc.conf моей тестовой машины.
Код:
hostname="freebsd"
ifconfig_em0="inet 192.168.1.15 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
font8x16="ter-u16.fnt"
keymap="ru.win"
local_unbound_enable="YES"
sshd_enable="YES"
ntpd_enable="NO" # временно
dumpdev="NO"
zfs_enable="YES"

firewall_enable="YES"
firewall_type="closed"
firewall_script="/etc/ipfw.rules"

vmware_guest_vmblock_enable="YES"
vmware_guest_vmhgfs_enable="YES"
vmware_guest_vmmemctl_enable="YES"
vmware_guest_vmxnet_enable="YES"
vmware_guestd_enable="YES"

postgresql_enable="YES"
postgresql_data="/mnt/tree/pgsql/data"
postgresql_flags="-w -s -m fast"
postgresql_initdb_flags="--encoding=utf-8 --lc-collate=C --locale=ru_RU.UTF-8"
postgresql_class="postgres"

mysql_enable="YES"
mysql_dbdir="/mnt/tree/mysql/data"

В предполагаемом синтаксисе userctl:
Код:
defaultrouter: 192.168.1.1
dumpdev: NO
firewall.enable: YES
firewall.script: /etc/ipfw.rules
firewall.type: closed
font8x16: ter-u16.fnt
hostname: freebsd
ifconfig.em0.inet: 192.168.1.15
ifconfig.em0.inet.netmask 255.255.255.0
keymap: ru.win"
local_unbound.enable: YES
mysql.dbdir: /mnt/tree/mysql/data
mysql.enable: YES
ntpd.enable: NO
postgresql.class: postgres
postgresql.data: /mnt/tree/pgsql/data
postgresql.enable: YES
postgresql.flags: -w -s -m fast
postgresql.initdb.flags: --encoding=utf-8 --lc-collate=C --locale=ru_RU.UTF-8
sshd.enable: YES
vmware.guest.vmblock.enable: YES
vmware.guest.vmhgfs.enable: YES
vmware.guest.vmmemctl.enable: YES
vmware.guest.vmxnet.enable: YES
vmware.guestd.enable: YES
zfs.enable: YES


Допустим нам нужно запустить ntpd с новыми настройками (тут их нет, только для примера).

Вариант для текстового конфига:
Код:
$ vi /etc/rc.conf # поиск правка выход с сохранением
$ serivce ntpd restart

Гипотетический для userctl (-s пусть отсылает типа SIGUSR1 службе управления "программами" для старта и/или перечитки настроек):
Код:
$ userctl -s ntpd.enable=YES

Мне это видится удобным.

_________________
Обращаюсь на "ты". Если не устраивает - пишите в ПМ, я применю патч :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Немнжко о sysctl
СообщениеДобавлено: Вт 07 июн, 2016 6:16 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5081
Откуда: Москва
- Для этого совершенно не обязательно менять формат.
- Для извращенцев уже есть rcadm.
- Это не работает для всех конфигов с форматом отличным от k=v. Ограничения плоской схемы rc.conf уже видны по костылям с ifconfig_X_aliasY.
- Это неудобно на любом невырожденном примере, потому что обычный usecase - "посмотреть что наконфигурировано и изменить как надо сразу пачку строк".
- Накостылить перезапуск сервисов по изменениям конфигов можете хоть сейчас, даже без -s. Но вообще это глупо и небезопасно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Немнжко о sysctl
СообщениеДобавлено: Вт 07 июн, 2016 10:40 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт 12 сен, 2003 4:34 pm
Сообщения: 370
Откуда: Минск
AMDmi3 писал(а):
- Для этого совершенно не обязательно менять формат.
В принципе, можно подстроиться под наиболее употребимые форматы (rc-config,win-config,json-config,xml-config из того, что "на слуху")
AMDmi3 писал(а):
- Для извращенцев уже есть rcadm.
Не пользовался, но по судя по описалову - монстр, а по UI - шагающий велосипед
AMDmi3 писал(а):
- Это не работает для всех конфигов с форматом отличным от k=v. Ограничения плоской схемы rc.conf уже видны по костылям с ifconfig_X_aliasY.
Хе-хе :) ... А давай попробуем интерпретировать "неплоский" JSON из вики в "наш" формат:
Код:
address.city: "Ленинград"
address.phoneNumbers: "812 123-1234"
address.phoneNumbers: "916 123-4567"
address.postalCode: 101101
address.streetAddress: "Московское ш., 101, кв.101"
firstName: Иван
lastName: Иванов
Как два байта переслать.
AMDmi3 писал(а):
- Это неудобно на любом невырожденном примере, потому что обычный usecase - "посмотреть что наконфигурировано и изменить как надо сразу пачку строк".
Уже сейчас из подручных средств можно наваять костыль-UI для подобного юзкейза:
Код:
#!/bin/sh

FILE="/var/tmp/sysctl-edit-"`jot -r 1 2000000 9000000`".temp"
EDIT="mcedit" # or vi

if [ $# == 1 ]; then
  sysctl $1 > $FILE
  $EDIT $FILE
  read -p "Write into sysctl (y/n)?" AGA
  if [ "$AGA" == "y" ]; then
    sysctl -f $FILE
  fi
  rm -f $FILE
else
  echo "usage: script.sh <mask>".
fi

А вот если наваять динамическую фильтрацию - будет весьма ништяково. Кстати, давно присматривался я к S-Lang'гу, может и попробую в качестве эксперимента.
AMDmi3 писал(а):
- Накостылить перезапуск сервисов по изменениям конфигов можете хоть сейчас, даже без -s. Но вообще это глупо и небезопасно.
Смотря как это зарядить. Если дать возможность выбора, а почему бы и нет.

_________________
Обращаюсь на "ты". Если не устраивает - пишите в ПМ, я применю патч :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Зарегистрированные пользователи: Bing [Bot], Google [Bot], Yahoo [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
Яндекс.Метрика