LINUX.ORG.RU
ФорумTalks

Как вам такой формат файлов для unit'ов системы инициализации?

 , ,


0

2

http://pastebin.com/tGBZFD3V

Нужно ли такое?

Секция [user-mod] не является основной. Но при помощи неё администратор системы может привязать старт демона к таким условиям и событиям как наличие определённых файлов, монтирование каталогов, подключение usb устройств, дисков и сетевых соединений Такой механизм как проверка наличия файла позволяет так же усложнять условия при помощи собственных скриптов которые создадут указанный файл. Однако для большинства пользователей потребности в наполнении этой секции условиями не будет.

[daemon]
# Описание демона
name=test
role=test-daemon

cmd-daemin="/etc/init.d/test"

options-add=start
options-add=stop
options-add=restart
options-add=reload
options-add=status


prioritet=user-mod
# Пользовательские модификации файла приоритетны

#prioritet=auto-mod
## автоматические модификации имеют приоритет над пользовательскими
## Обычно закомментировано.


[user-mod]
# Модификации пользователя, приоритетны над системными.

	[dep-hard]
	#Жёсткие зависимости
	#Без них демон не стартует
	
		# зависимость от наличия в сети определённых компьютеров
		dep-host=ipv4=8.8.8.8
		dep-host=name=localhost

		dep-file-absolute=/mnt/local/test
		#dep-file-absolute= ИГНОРИРУЕТ прификс WorkDir, НЕ РЕКОМЕНДУЕТЬСЯ ИСПОЛЬЗОВАТЬ.
		# Трудно представить себе ситуацию в которой это понадобиться, 
		# но я решил оставить эту функцию для повышения гибкости. 
		
		# Зависимость от точки монтирования
		dep-mount-point=/mnt/local
		#Никогда не завершать строку символом / иначе используемый для неё grep фильтр работать не будет
		# Пример /dev/sda6 on /mnt/local type ext4 (rw,relatime,data=ordered)

		# Зависимость от маршрута
		# Пока реализовывать не буду, хватит зависимости от хоста.
		# Зависимость от поднятого интерфейса
		dep-iface=eth0
		# Использует /sbin/ifconfig eth0 | grep "inet addr"
		# Если появилась строка длиннее одного символа, значит интерфейс поднят. Конечно костыльное решение.
		# Потом придумаю другой метод
		
		
		# Зависимость от подключенного тома по UUID
		dep-volume-uuid=71ED-3670
		# Анализирует вывод команды blkid

		# Зависимость от подключенного тома по метке
		dep-volume-label=flash
		# Анализирует вывод команды blkid
		


		# Зависимость от подключенных USB устройств. Просматривает их список используя команду lsusb
		[dep-usb]
			#Описание устройства. Следует соблюдать регистр букв в ID, а номер шины указывать в формате 000
			
			bus=005
			# сформирует фильтр grep "Bus 005"
			
			id=0a5c:2101
			# сформирует фильтр grep "ID 0a5c:2101"
			
			name=Broadcom Corp. BCM2045 Bluetooth
			# формирует фильтр grep "Broadcom Corp. BCM2045 Bluetooth", 
			# вообще возможно использовать в качестве произвольного фильтра, 
			# но во избежании в будущем проблем с совместимостью при изменении 
			# механизма получения списка устройств, не рекомендуется использовать не по назначению.
		[/dep-usb]
	[/dep-hard]

[/user-mod]


[auto-mod]
# Модификации вносимые автоматическими программами настройки, обычно менее важны чем пользовательские
# Однако можно установить для них высокий приоритет.
[/auto-mod]


[system]
# Системные установки, не рекомендуется вручную модифицировать
	run-level=1
	#Уровень выполнения на случай невозможности разрешения зависимостей

	[dep-hard]
	#Жёсткие зависимости
	#Без них демон не стартует
		
		# Зависимость от других демонов
		dep-unit=main_daemon
		dep-unit=net_fs
		
		
		# зависимость от наличия определённых файлов
		dep-file=/etc/test.conf
		#dep-file= подставляет прификс WorkDir, обычно это корневой каталог, 
		#но иногда это может быть например /home/stas/tmp/root/
		#путь следует указывать начиная с /, этот символ будет автоматически отсечён. Не указывать его нельзя.
		
		


		
	[/dep-hard]


[/system]

Guix

Всё уже придумано. Используй Guile.

Camel ★★★★★
()

формат — полное говно: помесь ini, xml и транслита.

derlafff ★★★★★
()

YAML:

daemon:                                                                                                                                                                                                                                        
  - name: test                                                                                                                                                                                                                                 
  - role: nenuzhno                                                                                                                                                                                                                             
                                                                                                                                                                                                                                               
  - options:                                                                                                                                                                                                                                   
    - start                                                                                                                                                                                                                                    
    - add                                                                                                                                                                                                                                      
    - restart                                                                                                                                                                                                                                  
    - reload                                                                                                                                                                                                                                   
    - status                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                               
  - priority: usermod                                                                                                                                                                                                                          
# - priority: automod                                                                                                                                                                                                                          
                                                                                                                                                                                                                                               
  - deps:                                                                                                                                                                                                                                      
    - hard:                                                                                                                                                                                                                                    
      - host:                                                                                                                                                                                                                                  
        # нынче парсить хосты в любом формате нетрудно                                                                                                                                                                                         
        - 8.8.8.8                                                                                                                                                                                                                              
        - localhost                                                                                                                                                                                                                            
      - files:                                                                                                                                                                                                                                 
        - /mnt/local/test                                                                                                                                                                                                                      
        - /tmp/bullshit.flag                                                                                                                                                                                                                   
      - mounts:                                                                                                                                                                                                                                
        - /mnt/local                                                                                                                                                                                                                           
        - /dev/sdb3
        - LABEL=Filetrash
        - UUID=71ED-3670
      - ifaces:
        - eth0
        - venet0
        # mac-адрес интерфейса
        - 40:65:00:49:00:5b
      - usb:
        - device:
          - bus: 005
          - id: 0a5c:2101
          - name: Broadcom Corp. BCM2045 Bluetooth

Только YAML говно.

system нафиг не нужен: из-за наличия в системе ПМ легче это делать отдельными файлами, как в systemd. role тоже не нужен, окстись от вендофигни

и даже при всем при этом формат получился более говеным, чем в systemd. там можно сделать все то же, но одним уровнем вложенности.

derlafff ★★★★★
()
Последнее исправление: derlafff (всего исправлений: 1)
Ответ на: комментарий от derlafff

На чём?

Правильнее будет спросить — под чем.

intelfx ★★★★★
()
Ответ на: комментарий от svobodka_fighter

OMG

Теперь понятно, почему от ТС так пахнет вендузячеством

derlafff ★★★★★
()
Последнее исправление: derlafff (всего исправлений: 1)

Зачем, если можно использовать сразу XML?

А ещё предлагаемое тобой решение напоминает адовый конфиг XFree86/X.org

Quasar ★★★★★
()
Ответ на: комментарий от derlafff

Ты там инит собрался писать или только фантазируешь?

Решаю писать или не писать.

На чём?

Конечно же на bash и gambas скриптах.

rezedent12 ☆☆☆
() автор топика
Ответ на: комментарий от rezedent12

Я что-то пропустил и lorcode используется для конфигурации чего-то?

kirk_johnson ★☆
()
Ответ на: комментарий от rezedent12

Конечно же на bash и gambas скриптах.

Конечно же

bash и gambas

Хуже выбор языков для инита в 2015 году и представить сложно

derlafff ★★★★★
()
Ответ на: комментарий от Quasar

А ещё предлагаемое тобой решение напоминает адовый конфиг XFree86/X.org

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

tailgunner ★★★★★
()

Никогда не завершать строку символом / иначе используемый для неё grep фильтр работать не будет

лол

это будет бомба, которая похоронит systemd

Alyssa
()
Ответ на: комментарий от derlafff

Причем тут психологическая травма? Есть вполне объективные недостатки для языка для написания прикладных программ. Ну, про строки только ленивый не говорил, и это можно опустить. Куда интереснее другое: во-первых, отсутствие нормальной типизации. Ну да, есть int, char, double и float. Можно даже enum'ы делать. Или struct'ы там какие. Однако, тут начинается веселье: в enum ты можешь засунуть что угодно, и компилятор за тебя проверять ничего не будет. Потому enum это тот же unsigned int, только красивее. Во-вторых, нет type generic expressions. В C11 добавили, но как костыль в виде расширения препроцессора. Лямб тоже нет, на каждый чих надо лепить отдельную функцию (не то чтобы мешало, но несколько раздражает). Ах да. Нет списков. От слова вообще. Именно поэтому в C-шных либах так любят итераторы. Потому что даже sys/queue.h на разных системах разный, и полагаться на него нельзя. Про управление памятью я тоже не буду говорить, уже много раз говорили. Что показательно, куча функций из systemd использует гнутые хаки в gcc для автоматического управления памятью.

kirk_johnson ★☆
()
Ответ на: комментарий от kirk_johnson

типы, списки, управление памятью, проч

Это все фичи низкоуровневости, а не недостатки.

лямбды

Разбалованные лолы, лол.

Нет списков. От слова вообще.

никто не запрещает тебе их реализовать и юзать.

derlafff ★★★★★
()

Господи, откуда ж вы все лезете? Кто-то разворошил гнездо голодных поттерингов?

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

Stanson ★★★★★
()

[auto-mod]...[/auto-mod]

тот же xml, только вид сбоку

nagibator
()
Ответ на: комментарий от kirk_johnson

Причем тут психологическая травма?

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

Что показательно, куча функций из systemd использует гнутые хаки в gcc для автоматического управления памятью.

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

Stanson ★★★★★
()
Ответ на: комментарий от derlafff

Я не зря сказал «прикладные программы» :) Мне не нужна низкоуровневость в прикладных программах, за меня её делает написанное на C ядро. А насчет «разбалованы» — я знаю, как реализовать список. И как дерево знаю. И знаю штук 20 их реализаций на C. Большая часть вменяемых программистов знает, на самом деле. Тем не менее, нет никакого смысла каждый раз изобретать один и тот же велосипед. Это долго, нудно, и, внезапно, вредит портируемости, потому как POSIX и ISO C обновляются очень редко. И далеко не всегда в лучшую сторону.

kirk_johnson ★☆
()
Ответ на: комментарий от kirk_johnson

Ну давай, аргументы в студию.

Аргументы для страдающего от психологической травмы неосилятора - что мёртвому припарки.

Или ты ещё один программист, который знает только C и ничего больше?

Я забыл уже больше, чем ты будешь когда-нибудь знать. Если нет мозгов сообразить, что у разных языков разные ниши, и в этих нишах в основном используется наиболее подходящий для ниши язык, и если для написания «прикладных программ» используют С - то это значит что именно С наиболее подходит для этой ниши, то тебе никто помочь не сможет. А все свои соображения и представления о том, как всё неправильно устроено, и как злые сишники не дают тебе писать «прикладные программы» - можешь оставить при себе. «прикладные программы» писали, пишут и будут писать на С, вне зависимости от твоих психологических травм.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от kirk_johnson

У него же синдром илитария. Помню по systemd-срачам — стадия, близкая к терминальной. Тут уже ничего не поделаешь.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

Вот как раз таки systemd стоило бы писать на плюсах. Разрабы, по сути, так и сделали, только применив чертову тучу gnu-тых расширений и своих собственных реализаций дефолтных плюсовых штук.

kirk_johnson ★☆
()
Ответ на: комментарий от kirk_johnson

Я тоже считаю, что стоило бы. Но это было сказано безотносительно самого systemd.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от kirk_johnson

Я о C и прикладном применении.

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

Со сказанным тобой про INI я совершенно согласен.

Так это и есть тема, вообще-то.

Stanson ★★★★★
()

Как вам такой формат файлов для unit'ов системы инициализации?

Это было бы очень плохо, но он еще и отличается и от старых, и от свежерасплодившихся. Поэтому это суперплохо, прямо нереально ужасно. Почитай как ребята выкрутились с SLS rendering в Salt Stack: отвязались от жесткого формата вообще, да еще и лишнего кода не написали.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

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

Ссылку пожалуйста.

rezedent12 ☆☆☆
() автор топика
Ответ на: комментарий от t184256

Неплохо конечно. Но вряд ли я буду делать его поддержку. Да и к тому же сложного функционала и не надо.

rezedent12 ☆☆☆
() автор топика

Я немного подумал, и решил, что могу сделать предложение покруче.

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

Пример иниткода.

Базовый код-конфиг:


loadlib "kerneloptions.dll";
loadlib "filesystem.dll";
loadlib "console.dll";
loadlib "init.dll";
loadlib "parallel.dll";
loadlib "supervisor.dll";
loadlib "qrcode.dll";
loadlib "fortune.dll";
loadlib "ssh.dll";

case:

terminal.get[type]=="tty":

loadlib "tty.dll"
libopt "qrcode.dll" [ascii];

define print[str#printstring]:
sendstring@tty[str#printstring];
:/

:/

terminal.get[type]=="raster":

ldlib "framebuf.dll";
ldlib "richtext.dll" [{size="12pt"},{font="comicsans"}];
libopt "qrcode.dll" [graph];
libopt "framebuf.dll" ["1920x1080"];

define print[str#printstring]:
inputstr@richtext.dll[str#printstring];
:/

:/

print["SystemExt init v 1.0",\n];

if[terminal.get[type]=="raster"]:
loadimage@graph.dll["/etc/init.e/fedora.pps"];

:/
print[getrandomfortune@fortune.dll,\n\n];

run@parallel.dll["/etc/init.e","/etc/init.conf"];
supervisor@supervisor.dll[services@parallel.dll,10,"restart"];
sshserver@ssh.dll["start"];

Пример кода юнита:


buildopts: default
name: "Remote terminal server"
need: network
config: default
daemon: /systemd/remoted
pid: REGISTER/SYSTEM@LOCALHOST://HKEY_SYSTEM_CONFIG/DAEMON/PID/REMOTED.PID
options: default
groups: network, remote, admin

Quasar ★★★★★
()
Ответ на: комментарий от kir2yar

Почему на басике? Почему не на яве/рельсах/php?

Потому что ТС школьник и их в школе кроме басика ничему больше не учили.

Loki13 ★★★★★
()
Ответ на: комментарий от rezedent12

Мне 24 вообще то.

Это состояние ума, а не возраст. И что тебя ничему кроме басика в институте не научили. Правда непонятно почему выпускник гуманитарного вуза хочет писать инит? У меня такие(такие - это глобальные) порывы были классе в 8-9м, к 11у классу уже прошло.

Loki13 ★★★★★
()
Ответ на: комментарий от Loki13

Это состояние ума, а не возраст. И что тебя ничему кроме басика в институте не научили. Правда непонятно почему выпускник гуманитарного вуза хочет писать инит? У меня такие(такие - это глобальные) порывы были классе в 8-9м, к 11у классу уже прошло.

Там где я учился, вообще ничему не учили. Я сам всё изучал. А насчёт basic, у тебя какая то нездоровая ненависть к нему. Впрочем аргументируй свою критику насчёт gambas, что именно ты считаешь важными недостатками?

rezedent12 ☆☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.