Utoljára aktív 1764455383

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

generate_debian_files.py Eredeti
1#!/usr/bin/env python3
2import os
3import datetime
4from pathlib import Path
5
6def 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
37def generate_control_file(params):
38 """Сгенерировать файл control"""
39 content = f"""Package: {params['package_name']}
40Version: {params['package_version']}
41Section: utils
42Priority: optional
43Architecture: all
44Depends: php8.0, apache2 | nginx | lighttpd
45Maintainer: {params['author_name']} <{params['author_email']}>
46Description: {params['description']}
47"""
48 return content
49
50def 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
62override_dh_auto_install:
63\t$(MAKE) install DESTDIR=$(CURDIR)/debian/{params['package_name']}
64
65override_dh_auto_build:
66
67
68"""
69 return content
70
71def generate_postinst_file(params):
72 """Сгенерировать файл postinst"""
73 content = f"""#! /bin/sh
74
75set -e
76
77WWW_ROOT=/var/www/{params['package_name']}/
78
79case "$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 ;;
99esac
100
101#DEBHELPER#
102
103exit 0
104"""
105 return content
106
107def generate_copyright_file(params):
108 """Сгенерировать файл copyright"""
109 content = f"""Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
110Upstream-Name: {params['package_name']}
111Source: -
112
113This package was debianized by {params['author_name']} <{params['author_email']}> on
114{params['current_date']}
115
116Upstream Author(s): {params['author_name']} <{params['author_email']}>
117
118Copyright:
119
120<Вставьте сюда информацию о копирайте>
121"""
122 return content
123
124def generate_source_format():
125 """Сгенерировать файл source/format"""
126 return "3.0 (native)"
127
128def generate_compat_file():
129 """Сгенерировать файл compat"""
130 return "10"
131
132def generate_dirs_file():
133 """Сгенерировать пустой файл dirs"""
134 return ""
135
136def 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
144def 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
152def 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
183if __name__ == "__main__":
184 main()
185
186