KarelWintersky revised this gist . 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