generate_debian_files.py
· 5.3 KiB · Python
Неформатований
#!/usr/bin/env python3
import os
import datetime
from pathlib import Path
def get_user_input():
"""Получить входные данные от пользователя"""
print("=== Генератор файлов для каталога debian ===\n")
package_name = input("Введите имя пакета: ").strip()
description = input("Введите описание пакета: ").strip()
default_version = "0.0.1"
package_version = input(f"Введите версию пакета [{default_version}]: ").strip()
if not package_version:
package_version = default_version
default_author = "Karel Wintersky"
author_name = input(f"Введите имя автора [{default_author}]: ").strip()
if not author_name:
author_name = default_author
default_email = "karel.wintersky@yandex.ru"
author_email = input(f"Введите email автора [{default_email}]: ").strip()
if not author_email:
author_email = default_email
return {
'package_name': package_name,
'description': description,
'package_version': package_version,
'author_name': author_name,
'author_email': author_email,
'current_date': datetime.datetime.now().strftime("%a, %d %b %Y %H:%M:%S %z")
}
def generate_control_file(params):
"""Сгенерировать файл control"""
content = f"""Package: {params['package_name']}
Version: {params['package_version']}
Section: utils
Priority: optional
Architecture: all
Depends: php8.0, apache2 | nginx | lighttpd
Maintainer: {params['author_name']} <{params['author_email']}>
Description: {params['description']}
"""
return content
def generate_rules_file(params):
"""Сгенерировать файл rules"""
content = f"""#!/usr/bin/make -f
# output every command that modifies files on the build system.
# export DH_VERBOSE = 1
%:
\tdh $@
override_dh_auto_install:
\t$(MAKE) install DESTDIR=$(CURDIR)/debian/{params['package_name']}
override_dh_auto_build:
"""
return content
def generate_postinst_file(params):
"""Сгенерировать файл postinst"""
content = f"""#! /bin/sh
set -e
WWW_ROOT=/var/www/{params['package_name']}/
case "$1" in
configure)
if [ -d $WWW_ROOT ]; then
chown -R www-data:www-data $WWW_ROOT/*
exit 0
fi
echo "postinst can't find path: $WWW_ROOT!" >&2
exit 1
;;
abort-upgrade|abort-remove|abort-deconfigure)
;;
*)
echo "postinst called with unknown argument \\`$1'" >&2
exit 1
;;
esac
#DEBHELPER#
exit 0
"""
return content
def generate_copyright_file(params):
"""Сгенерировать файл copyright"""
content = f"""Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: {params['package_name']}
Source: -
This package was debianized by {params['author_name']} <{params['author_email']}> on
{params['current_date']}
Upstream Author(s): {params['author_name']} <{params['author_email']}>
Copyright:
<Вставьте сюда информацию о копирайте>
"""
return content
def generate_source_format():
"""Сгенерировать файл source/format"""
return "3.0 (native)"
def generate_compat_file():
"""Сгенерировать файл compat"""
return "10"
def generate_dirs_file():
"""Сгенерировать пустой файл dirs"""
return ""
def generate_cron_file(params):
"""Сгенерировать файл <packagename>.cron.d"""
content = f"""#
# Regular cron jobs for the {params['package_name']} package
#
"""
return content
def write_file(filename, content):
"""Записать содержимое в файл"""
Path(filename).parent.mkdir(parents=True, exist_ok=True)
with open(filename, 'w', encoding='utf-8') as f:
f.write(content)
print(f"Создан файл: {filename}")
def main():
# Получить входные данные
params = get_user_input()
# Создать директорию debian если её нет
debian_dir = "debian"
os.makedirs(debian_dir, exist_ok=True)
# Сгенерировать и записать файлы
files_to_generate = [
(f"{debian_dir}/control", generate_control_file(params)),
(f"{debian_dir}/rules", generate_rules_file(params)),
(f"{debian_dir}/postinst", generate_postinst_file(params)),
(f"{debian_dir}/copyright", generate_copyright_file(params)),
(f"{debian_dir}/source/format", generate_source_format()),
(f"{debian_dir}/compat", generate_compat_file()),
(f"{debian_dir}/dirs", generate_dirs_file()),
(f"{debian_dir}/{params['package_name']}.cron.d", generate_cron_file(params)),
]
print(f"\n=== Генерация файлов в директории '{debian_dir}/' ===")
for filename, content in files_to_generate:
write_file(filename, content)
# Сделать rules исполняемым, postinst - НЕ исполняемым
os.chmod(f"{debian_dir}/rules", 0o755)
# postinst оставляем без атрибута X (обычный файл)
print(f"\n=== Готово! Все файлы созданы в директории '{debian_dir}/' ===")
if __name__ == "__main__":
main()
| 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 | |
| 186 |