BSDPORTAL.RU

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

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




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

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

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

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

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

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


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

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5246
Откуда: Москва
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
Сообщения: 376
Откуда: Минск
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
Сообщения: 376
Откуда: Минск
AMDmi3 писал(а):
хранения в VCS
Вполне можно хранить в текстовом виде для "sysctl -f filename"
AMDmi3 писал(а):
раскатки через scp/ansible и прочая что позволяют текстовые форматы
Для манипуляций можно делать полную выгрузку в текстовом виде, равно как и загрузку
AMDmi3 писал(а):
Кроме того, помимо конфигов есть ещё изменяемые данные, которые всё равно приходится хранить в ФС из-за размера и собственного бинарного формата, при этом паттерны доступа к ним не сильно отличаются от конфигов
Есть такое. Но это "кандитаты" во что-то типа /var/apps/.../stuff/* Это скорее исключения из правил.

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

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


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

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


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

Зарегистрирован: Пт 12 сен, 2003 4:34 pm
Сообщения: 376
Откуда: Минск
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 часа


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

Зарегистрированные пользователи: нет зарегистрированных пользователей


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

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