Last active 1764455383

Генерирует файлы для каталога debian

KarelWintersky revised this gist 1764455383. Go to revision

1 file changed, 185 insertions

generate_debian_files.py(file created)

@@ -0,0 +1,185 @@
1 + #!/usr/bin/env python3
2 + import os
3 + import datetime
4 + from pathlib import Path
5 +
6 + def get_user_input():
7 + """Получить входные данные от пользователя"""
8 + print("=== Генератор файлов для каталога debian ===\n")
9 +
10 + package_name = input("Введите имя пакета: ").strip()
11 + description = input("Введите описание пакета: ").strip()
12 +
13 + default_version = "0.0.1"
14 + package_version = input(f"Введите версию пакета [{default_version}]: ").strip()
15 + if not package_version:
16 + package_version = default_version
17 +
18 + default_author = "Karel Wintersky"
19 + author_name = input(f"Введите имя автора [{default_author}]: ").strip()
20 + if not author_name:
21 + author_name = default_author
22 +
23 + default_email = "karel.wintersky@yandex.ru"
24 + author_email = input(f"Введите email автора [{default_email}]: ").strip()
25 + if not author_email:
26 + author_email = default_email
27 +
28 + return {
29 + 'package_name': package_name,
30 + 'description': description,
31 + 'package_version': package_version,
32 + 'author_name': author_name,
33 + 'author_email': author_email,
34 + 'current_date': datetime.datetime.now().strftime("%a, %d %b %Y %H:%M:%S %z")
35 + }
36 +
37 + def generate_control_file(params):
38 + """Сгенерировать файл control"""
39 + content = f"""Package: {params['package_name']}
40 + Version: {params['package_version']}
41 + Section: utils
42 + Priority: optional
43 + Architecture: all
44 + Depends: php8.0, apache2 | nginx | lighttpd
45 + Maintainer: {params['author_name']} <{params['author_email']}>
46 + Description: {params['description']}
47 + """
48 + return content
49 +
50 + def generate_rules_file(params):
51 + """Сгенерировать файл rules"""
52 + content = f"""#!/usr/bin/make -f
53 +
54 + # output every command that modifies files on the build system.
55 +
56 + # export DH_VERBOSE = 1
57 +
58 + %:
59 + \tdh $@
60 +
61 +
62 + override_dh_auto_install:
63 + \t$(MAKE) install DESTDIR=$(CURDIR)/debian/{params['package_name']}
64 +
65 + override_dh_auto_build:
66 +
67 +
68 + """
69 + return content
70 +
71 + def generate_postinst_file(params):
72 + """Сгенерировать файл postinst"""
73 + content = f"""#! /bin/sh
74 +
75 + set -e
76 +
77 + WWW_ROOT=/var/www/{params['package_name']}/
78 +
79 + case "$1" in
80 + configure)
81 +
82 + if [ -d $WWW_ROOT ]; then
83 + chown -R www-data:www-data $WWW_ROOT/*
84 + exit 0
85 + fi
86 +
87 + echo "postinst can't find path: $WWW_ROOT!" >&2
88 + exit 1
89 + ;;
90 +
91 + abort-upgrade|abort-remove|abort-deconfigure)
92 +
93 + ;;
94 +
95 + *)
96 + echo "postinst called with unknown argument \\`$1'" >&2
97 + exit 1
98 + ;;
99 + esac
100 +
101 + #DEBHELPER#
102 +
103 + exit 0
104 + """
105 + return content
106 +
107 + def generate_copyright_file(params):
108 + """Сгенерировать файл copyright"""
109 + content = f"""Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
110 + Upstream-Name: {params['package_name']}
111 + Source: -
112 +
113 + This package was debianized by {params['author_name']} <{params['author_email']}> on
114 + {params['current_date']}
115 +
116 + Upstream Author(s): {params['author_name']} <{params['author_email']}>
117 +
118 + Copyright:
119 +
120 + <Вставьте сюда информацию о копирайте>
121 + """
122 + return content
123 +
124 + def generate_source_format():
125 + """Сгенерировать файл source/format"""
126 + return "3.0 (native)"
127 +
128 + def generate_compat_file():
129 + """Сгенерировать файл compat"""
130 + return "10"
131 +
132 + def generate_dirs_file():
133 + """Сгенерировать пустой файл dirs"""
134 + return ""
135 +
136 + def generate_cron_file(params):
137 + """Сгенерировать файл <packagename>.cron.d"""
138 + content = f"""#
139 + # Regular cron jobs for the {params['package_name']} package
140 + #
141 + """
142 + return content
143 +
144 + def write_file(filename, content):
145 + """Записать содержимое в файл"""
146 + Path(filename).parent.mkdir(parents=True, exist_ok=True)
147 +
148 + with open(filename, 'w', encoding='utf-8') as f:
149 + f.write(content)
150 + print(f"Создан файл: {filename}")
151 +
152 + def main():
153 + # Получить входные данные
154 + params = get_user_input()
155 +
156 + # Создать директорию debian если её нет
157 + debian_dir = "debian"
158 + os.makedirs(debian_dir, exist_ok=True)
159 +
160 + # Сгенерировать и записать файлы
161 + files_to_generate = [
162 + (f"{debian_dir}/control", generate_control_file(params)),
163 + (f"{debian_dir}/rules", generate_rules_file(params)),
164 + (f"{debian_dir}/postinst", generate_postinst_file(params)),
165 + (f"{debian_dir}/copyright", generate_copyright_file(params)),
166 + (f"{debian_dir}/source/format", generate_source_format()),
167 + (f"{debian_dir}/compat", generate_compat_file()),
168 + (f"{debian_dir}/dirs", generate_dirs_file()),
169 + (f"{debian_dir}/{params['package_name']}.cron.d", generate_cron_file(params)),
170 + ]
171 +
172 + print(f"\n=== Генерация файлов в директории '{debian_dir}/' ===")
173 +
174 + for filename, content in files_to_generate:
175 + write_file(filename, content)
176 +
177 + # Сделать rules исполняемым, postinst - НЕ исполняемым
178 + os.chmod(f"{debian_dir}/rules", 0o755)
179 + # postinst оставляем без атрибута X (обычный файл)
180 +
181 + print(f"\n=== Готово! Все файлы созданы в директории '{debian_dir}/' ===")
182 +
183 + if __name__ == "__main__":
184 + main()
185 +
Newer Older