-
Notifications
You must be signed in to change notification settings - Fork 3
/
TODO
148 lines (145 loc) · 28.2 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
done. 1. Рефакторинг. Переместить get-username из daemon-sbcl-sys-linux-port.lisp в пакет более высокого уровня. А также подумать что делать с recreate-file-allow-write-other (из того же пакета). Важно то, что она должна использовать posix ф-ии, которые не используют систему логирования (которые не объявлены через defun-ext), потому что она используется для создания лог-файла с разрешением для записи другим пользователем. Это необходимо для тестирования переключения пользователей.
done. 2. Разрешить неоднозначности связанные с отсутствием/наличием задаваемых пользователя/группы и устанавливаемых ограничений (в restrict-rights).
done. 3. Сделать важный рефакторинг. Вместо вызова *fn-exit* (прямого или опосредованого в fork-this-process) с дополнительными аргументами, предопределить структуру и использовать её для возврата дополнительной информации о статусе (extra status).
done. 4. Избавиться от (:values) в логгере, ставить во всех (или почти во всех) случаях nil.
done. 5. Сделать так, чтобы провалившиеся тесты зачищали за собой ресурсы (а именно pid file).
done. 6. Устранить баг возникающий при совместной работе log-info и wrap-log-form. Причина в использовании строк форматирования в формах аргумента wrap-log-form.
done. 7. Сделать так, чтобы в лог не выводилась неправильная строка типа: "changing directory, current directory: #P"/" ...")
done. 8. Добавить раннюю проверку того, что pid файл не существует.
done. 9. Проанализировать: не стоит ли сразу после fork сделать
(enable-interrupt sigusr1 :default)
(enable-interrupt sigchld :default)
Не стоит, потому что и так это делается сразу, исключая установку *process-type* в :child,
а child-from-after-fork и предназначен для того, чтобы выполняться строго после fork'a.
!!! 10. Обеспечить работу на 64-битном Линуксе (на разных 64-битных дистрибутивах).
done. 11. Отделить вспомогательные ф-ии типа get-args getpid recreate-file-allow-write-other и возможно какие-то другие от основной системы.
done. 12. Сделать восстановление после ошибки для root-run-tests (через restart-case), которая появляется если не указан аргумент с именем пользователя.
done. 13. Изменить константы ex-* на lisp-like имена +ex-*+
done. 14. Проанализировать на корректную работу широковещательные потоки в тестах. Добавить закрытие потоков после использования.
done. 15. Добавить команду help в скрипт запуска (и возможно её срабатывание на
неправильную команду демона).
done. 16. Исправить описание ошибки при некорректной остановке демона - при наличии pid файла, но при отсутствии выполняемого демона с pid в нём записанным.
!!! 17. Сделать подробную документацию, в том числе с внутренним устройством системы.
done. 18. Сделать возможным управлять (например с помощью ключевого параметра) разрешениями по умолчанию для файлов, которые возможно будет создавать демон (в linux за это отвечает ф-ия umask).
done. 19. Удалить ненужные линки в devel.
done. 20. Добавить обработчик ошибки связанной с указанием неправильного имени пользователя в конфиге демона.
done. 21. Сделать специальную директорию для pid-файлов по умолчанию.
done. 22. Переименовать все ф-ии getpid высокого уровня (в слою, который выше ОС) в get-proc-id.
done. 23. Проработать варианты изменения только одной группы.
done. 24. Проанализировать почему при переопрелении логирования, в системный лог выводятся лишние данные. Сделать возможность отключения логирования при компиляции/загрузке.
done. 25. Упростить и сделать более предсказуемым формат лога.
done. 26. Подумать (и возможно сделать) стоит ли перенести настройку логирующих ф-ий *fn-xxx* из daemon-sbcl-sys-linux-port.lisp.
done. 27. (теперь запрещено использовать систему находящуюся в пути содержащем тильды, выводить лог с тильдами теперь можно, но соблюдая правила использования строки форматирования, т.е. строку "~~" теперь выводится без ошибок). Решить проблему наличие тильд в текущем пути (проявляется при логировании изменения директории).
done. 28. Сделать так, чтобы при запуске root-run-tests.sh, если нет имени пользователя в системе, то ошибка выводилась в соотв. поток вывода, без break'a в лисп-системе.
done. 29. Сделать корректным сообщения тестов, когда происходит ошибка (например unbound variable), при компиляции - чтобы не выводилась (может быть) надпись running и Tests passed.
done. 30. При неверном использовании root-run-tests.sh (без указания имени пользователя) при выборе use-value сделать вывод сообщения с просьбой указать имя пользователя. Сейчас вывода сообщения почему-то не проходит.
done. 31. Вывести ошибку при указании несуществующего пользователя при запуске root-run-tests.sh .
done. 32. Сделать адекватную реакцию на ошибку в коде тестов.
done. 33. В файл конфигурации (конфигурация логгера вынесена в отдельный файл default-logger.conf) добавить ключ для указания лог-файла.
done. 34. (перенесена в конец, скорее всего этого делать не нужно) Заменить аргумент ф-ии start-service (в daemon-core-port.lisp) params со списка св-в на структуру. А также заменить список св-в в значении связаном с ключом os-params также на структуру.
done. 35. Сделать так, чтобы выводилось больше информации об ошибках, при управлении демоном из командной строки (возможно использовать sb-debug:backtrace, sb-debug:backtrace-as-list, sb-introspect:find-definition-source).
done. 36. Рассмотреть возможность восстанавливать (или не убирать) у процесса предка дефолтные потоки ввода/вывода/поток-ошибок.
done. 37. Унифицировать сообщения о результатах управления демоном и возвращаемое из ф-ии daemonized значение.
done. 38. Переименовать change-user и linux-change-user в change-user-and-group и linux-change-user-and-group.
done. 39. Сделать ключ, в конфиге демона задающий конфиг с параметрами по умолчанию.
done. 40. Разобрать являются ли posix-функциями
(group-gid object)
(getgid)
(getgrgid gid)
(group-name object)
(passwd-gid object)
(setresgid rgid egid sgid)
(initgroups user group)
(setresuid ruid euid suid) в daemon-interfaces.lisp и соотв. образом откомментировать.
done. 41. Сделать так, чтобы логер корректно выводил строки в вызове типа: (log-err "asdf~A" "m\"str\"mm").
done. 42. Параметры конфигурации :pid-file-dir и :listen-privileged-ports определить в дефолтном конфиге-шаблоне.
done. 43. Добавить параметры в конфиг-шаблон демона для определения директории и файла(или значение :system - для системного логирования, которое должно быть по умолчанию). Если логирование определено как :system или для лог-файла определён полный путь то задание директории не должно иметь смысл. А также надо создать директорию (которая по умолчанию) для лог-файлов.
done. 44. Выдать ошибку, если имеет место попытка изменить текущего пользователя(на другого) и при этом демон запущен не от администратора (не от root - для linux'a).
done. 45. Убрать ненужный error (класс предок, который по умолчанию) в определениях conditions в daemon-share.lisp.
done. 46. Добавить в логгер возможность выводить номер сообщения (продумать вариант с раздельным логированием вызовов ф-ий).
done. 47. Добавить в логгер возможность вывода пользователя и группы.
done. 48. Установить самое безопасное значение по умолчанию для linux-umask.
done. 49. Логировать загрузку библиотеки libcap.so.
done. 50. (not relevant) Сделать так, чтобы макрофункции daemon-share:log-info и daemon-share:log-err связывались не с sb-posix:log-info и sb-posix:log-err, а с символами из пакета :daemon-sbcl-sys-linux-port.
done. 51. (символы #012 и лишние пробелы удаляются перед выводом в системный лог, если установлена в T переменная *syslog-cleaning-p*) Проанализировать можно ли убрать символы #012 в системном логе.
done. 52. (Not required) В tests.lisp в daemon-cmd выделить общий код.
done. 53. Выделить общий код в run-tests и root-run-tests.
done. 54. (Not required) Проанализировать, стоит ли добавить возможность в ф-ии-параметре before-init-fn отменить дальнейшую инициализацию (и подумать, насчёт порядка установки дефолтных обработчиков сигналов).
done. 55. Выделить общий код в log-info и log-err.
done. 56.(already) Подумать как сделать так, чтобы по умолчанию выводился лог загрузки системы, но имелось бы возможность (в частности в тестах) отключить такое логирование или определить желаемую ф-ию для такого логирования (на данный момент логирование загрузки системы отключено).
57. Отделить независимый от демонизации код в daemon-logging.lisp.
58. Сделать переключатель в логгере между показом/отстутствием_показа префикса пакета в логировании вызовов ф-ий.
59. Убрать возможно ненужную декларацию типов в daemon-logging.lisp.
60. Проверить, что записываемый лог без ошибок читается ф-ией get-daemon-log-list (в daemon-logging.lisp).
61. Сделать более читабельным представление структур и функциональных объектов при логировании.
62. Возможно убрать (concatenate 'string "ERROR: " ...) в daemon-core-port.lisp в logging-init.
63. В тестах сделать уничтожение зависшего демона.
64. Подумать, возможно ли перенести из daemon-sbcl-sys-linux-port.lisp дополненную версию fork.
65. Максимально облегчить пакет :daemon-sbcl-sys-linux-port.
66. Сделать возврат -1 если тесты провалились.
67. Использовать такие ф-ии как sb-debug:backtrace, sb-debug:backtrace-as-list, sb-introspect:find-definition-source для вывода в лог максимального кол-ва информации об ошибках.
68. Решить проблему, с чтением конфигурационных (и возможно других) файлов которая должна возникнуть при сохранении образа системы.
69. Убедиться, что :parent-conf-file-dir участвует в обработке.
70. *default-conf-file-name* заменить на *default-conf-file*. *pid-files-dirname* и *conf-files-dirname* заменить на соответственно *pid-files-dir* и *conf-files-dir*.
done. 71. Проверить инициализацию *fn-log-err* в daemon-core-port.lisp. Скорее всего сейчас делается лишнее применение ф-ии add-daemon-log и не добавляются параметры логирования при использовании записи в системный лог.
72. Сделать загрузку в систему параметров из default.conf и default-logging.conf для использования в том случае, если эти конфигурационные файлы не были найдены.
73. Сделать замену функциональности get-system-path при сохранении образа системы.
74. Переписать все ф-ии в daemon-share.lisp, возвращающие путь с применением ф-ии get-real-file.
75. Добавить (если ещё нет) вывод в лог имени запускаемого/демона. А также добавить возможность в read-log.sh указывать параметр с именем демона, для которого надо отслеживать лог.
76. Перенести из :daemon-core-port logging-init (возможно перенести в файл daemon-core, если его нет то создать).
77. Перенести из :daemon-core-port полностью всю логическую часть (возможно в :daemon-core).
78. Заменить *fn-log-pid* на *fn-get-pid*.
79. Заменить простой выброс ошибки в преобразовании списка св-в в структуру в ф-ии plist-to-struct на выброс соотв. condition. И его, собственно записать.
80. Переименовать get-log-file-dir в get-logs-dir.
81. Сделать рефакторинг get-fn-log в :daemon-core-port.
82. Добавить параметр/слот в конфигурацию/структуру логгера для поддержки логирования загрузки системы и настройки *fn-log-info-load*.
82. Сделать более предсказуемый способо указывать конфиг для скрипта scripts/daemon.sh (сейчас он ищется в директории со скриптом).
83. Добавить ключ в конфиг демона включающий простой автоматический перезапуск демона, в случае его ошибочного завершения, с помощью процесса-стартера(:parent). И проанализировать как это делается в experimental/restart-process/ .
84. Сделать чтобы при логировании добавлялись метки начала и конца записей типа :info :error(возможно) и :trace.
85. Добавить параметр, определяющий максимальный объём лог-файла и максимальное кол-во старых файлов. Если объём превышен, переименовать файл как старый лог-файл (предыдущий старый лог-файл, удалить).
86. Добавить возможность указать для каждого типа логирования несколько приёмников в списке.
87. При логировании в разные места добавляются не нужные отступы, сделать для каждого приёмника (destination) свой счетчик отступов.
88. Придумать что-нибудь для ситуации неправильного указания параметров в файле default-logging.conf.
89. Рассмотреть прагматичность добавления возможность указывать для каждого отдельного приёмника сообщений логгера свой набор параметров (заменяющий необходимые глобальные).
90. Решить не экспортировать ли из :daemonization символы, связанные с логгером.
91. Подумать стоит ли заменить (скорее нет) аргумент ф-ии start-service (в daemon-core-port.lisp) params со списка св-в на структуру. А также заменить список св-в в значении связаном с ключом os-params также на структуру.
92. Перенести get-error-description из :daemon-sbcl-sys-linux-port в более высокоуровневый пакет.
93. Убедится что логер копирует входные параметры (через copy-tree например).
94. В документацию добавить тот факт, что логгер не перевирает входные параметры в отличие от бэктрейса sbcl.
95. Модифицировать печать error-description так, чтобы формы бэктрэйса выводились строго вертикально (чтобы небыло нескольких форм на одной строке).
96. Произвести рефакторинг и усовершенствование тестирования возвращаемых значений.
97. Статус +ex-cantcreate+ возвращающийся в случае, если pid-file уже существует, заменить на статус, непосредственно говорящий о причине невозможности создания файла. Проанализировать возможность возвращения статуса +pid-file-not-found+ для команды "start" и возможно изменить код ф-ии create-result-plist.
98. Сделать сигнализацию ошибки при попытки произвести демонизацию в многопоточном режиме.
99. В :daemon-share четко отделить ф-ии-утилиты.
100. Выяснить почему (и устранить) описание ошибки возникающей при запуске тестов (например появляющейся при печати результата в daemonized) выводится на стандартный поток вывода два раза.
101. Сделать рефакторинг ф-ий result-plist-simple-printer и create-result-plist, а также удалить код analized-and-print-result.
102. Решить проблему с тильдами в выводе в лог и в стандартный поток вывода бэктрэйса (в нём появляются тильды). Сейчас просто происходит замена тильд на знак #\#.
103. Сделать стандартный condition на попытку демонизации из многопоточного режима.
104. Разобраться с бэктрэйсами - возможно стоит кол-во пропускаемых форм (daemon-sbcl-sys-linux-port::*number-of-skipped-frames*) установить по-умолчанию в 0 или вообще убрать этот параметр, если невозможно точно спрогнозировать где начинается пользовательская форма.
105. Подумать о необходимости переделать ключи print-result и print-internal-result в конфигурационные параметры демона.
106. Проанализировать, есть ли возможность описать тип возвращаемого значения ф-ии daemonized и при этом не получать примечание (при компиляции) о том, что проверка возвращаемого типа слишком сложна (оно появляется если определять ф-ию с логированием через defun-ext).
107. Отделить не posix-функции и константы от интерфейса для :daemon-unix-api-port в интерфейс для (например) :daemon-linux-specific-api-port.
108. Переименовать +for-daemon-unix-functions+ (в :daemon-interfaces) во что-нибудь более подходящее.
109. +pr_set_keepcaps+ переименовать в +pr-set-keepcaps+.
110. Проверить что если задается в конфигурации имя пользователя равное текущему имени, то демонизация происходит без ошибок.
111. Проверить работу ключа конфигурационного параметра :listen-privileged-ports.
112. Проверить что появляется определённая ошибка denied-change-user-error если произошла попытка изменить пользователя в процессе с текущим пользователем не имеющим административных привелегий.
done. 113. Сделать синхронизацию логирования.
114. Перенести safe-write из :daemon-sbcl-sys-linux-port в более высокоуровневый модуль.
115. Убрать в wrap-fmt-str (в :daemon-logging) зависимость от расположения св-в в log-plist.
116. Выяснить почему при простом выводе (например в тестах) не показывается полный путь к pid-file'у.
117. Сделать так, чтобы перехватывающая ф-ия в слоте fn-correct-log-plist объекта *logger* выполнялась до сокращения списка log-plist (в wrap-fmt-str). Иначе невозможно корректно вычислить св-во :line при отстутствии св-ва :trace-fn.
118. Подумать о смене указателя (в логировании) на то, что был произведен возврат множественного значения. Может быть стоит вместо (:values ...) можно писать в лог ({values} ... ) или изменить ещё как нибудь.
119. Поискать лучшее решение для инициализации *main-function-symbol*. Сейчас она инициализируется в :daemonization, что не является хорошим архитектурным решением.
120. Сделать дополнительную проверку того, что демон стартовал успешно (например с помощью вызова daemon-core-port:status-service перед выходом из daemonized).
121. Подумать насчёт указания pid-file в выводе скрипта запуска демона - указывать ли всегда полный путь и указывать ли всегда pid-file.
122. Добавить возможность при запуске daemon.sh переопределить используемую лисп-систему.
123. Конфигурацию daemon.conf переместить из script/ в examples/
124. Выводить более информативное сообщение об ошибке при загрузке системы :daemonization-test в run-tests.lisp (и возможно добавить переключатель для возможности входа в лисп-отладчик).
125. Корректно избавится от использования quit для SBCL (в настоящий момент считается устаревшей ф-ией).
-----------------------------------------
1) После выхода версии 0.0.2 доделать множество мелких задач, сделать рефакторинг (акцент на упрощение взаимозависимостей). Проанализировать существующие решения и добавить в TODO полезные возможности/задачи.
2) После выхода в.0.0.3 добавить возможность стартовать supervisor который будет создавать и контролировать демонов, получать их статус и автоматически перезапускать, если это указано в конфиге демона.
3) После выхода в.0.0.4 добавить возможность работы на FreeBSD.
4) Сделать инсталлятор/деинсталлятор для разных дистрибутивов Linux и для FreeBSD.
х) ... обеспечить работу (и инсталлятор/деинсталлятор) на других ОСях и лисп-системах.