140 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # TODO pin repo: https://superuser.com/a/1595920
 | |
| 
 | |
| from os.path import join, basename
 | |
| 
 | |
| directories = {
 | |
|     '/etc/apt': {
 | |
|         'purge': True,
 | |
|         'triggers': {
 | |
|             'action:apt_update',
 | |
|         },
 | |
|     },
 | |
|     '/etc/apt/apt.conf.d': {
 | |
|         # existance is expected
 | |
|         'purge': True,
 | |
|         'triggers': {
 | |
|             'action:apt_update',
 | |
|         },
 | |
|     },
 | |
|     '/etc/apt/keyrings': {
 | |
|         # https://askubuntu.com/a/1307181
 | |
|         'purge': True,
 | |
|         'triggers': {
 | |
|             'action:apt_update',
 | |
|         },
 | |
|     },
 | |
|     # '/etc/apt/listchanges.conf.d': {
 | |
|     #     'purge': True,
 | |
|     #     'triggers': {
 | |
|     #         'action:apt_update',
 | |
|     #     },
 | |
|     # },
 | |
|     '/etc/apt/preferences.d': {
 | |
|         'purge': True,
 | |
|         'triggers': {
 | |
|             'action:apt_update',
 | |
|         },
 | |
|     },
 | |
|     '/etc/apt/sources.list.d': {
 | |
|         'purge': True,
 | |
|         'triggers': {
 | |
|             'action:apt_update',
 | |
|         },
 | |
|     },
 | |
| }
 | |
| 
 | |
| files = {
 | |
|     '/etc/apt/apt.conf': {
 | |
|         'content': repo.libs.apt.render_apt_conf(node.metadata.get('apt/config')),
 | |
|         'triggers': {
 | |
|             'action:apt_update',
 | |
|         },
 | |
|     },
 | |
|     '/etc/apt/sources.list': {
 | |
|         'content': '# managed by bundlewrap\n',
 | |
|         'triggers': {
 | |
|             'action:apt_update',
 | |
|         },
 | |
|     },
 | |
|     # '/etc/apt/listchanges.conf': {
 | |
|     #     'content': repo.libs.ini.dumps(node.metadata.get('apt/list_changes')),
 | |
|     # },
 | |
|     '/usr/lib/nagios/plugins/check_apt_upgradable': {
 | |
|         'mode': '0755',
 | |
|     },
 | |
|     # /etc/kernel/postinst.d/apt-auto-removal
 | |
| }
 | |
| 
 | |
| actions = {
 | |
|     'apt_update': {
 | |
|         'command': 'apt-get update',
 | |
|         'needed_by': {
 | |
|             'pkg_apt:',
 | |
|         },
 | |
|         'triggered': True,
 | |
|         'cascade_skip': False,
 | |
|     },
 | |
| }
 | |
| 
 | |
| # create sources.lists and respective keyfiles
 | |
| 
 | |
| for name, config in node.metadata.get('apt/sources').items():
 | |
|     # place keyfile
 | |
|     keyfile_destination_path = repo.libs.apt.format_variables(node, config['options']['Signed-By'])
 | |
|     files[keyfile_destination_path] = {
 | |
|         'source': join(repo.path, 'data', 'apt', 'keys', basename(keyfile_destination_path)),
 | |
|         'content_type': 'binary',
 | |
|         'triggers': {
 | |
|             'action:apt_update',
 | |
|         },
 | |
|     }
 | |
| 
 | |
|     # place sources.list
 | |
|     files[f'/etc/apt/sources.list.d/{name}.sources'] = {
 | |
|         'content': repo.libs.apt.render_source(node, name),
 | |
|         'triggers': {
 | |
|             'action:apt_update',
 | |
|         },
 | |
|     }
 | |
| 
 | |
| # create backport pinnings
 | |
| 
 | |
| for package, options in node.metadata.get('apt/packages', {}).items():
 | |
|     pkg_apt[package] = options
 | |
| 
 | |
|     if pkg_apt[package].pop('backports', False):
 | |
|         files[f'/etc/apt/preferences.d/{package}'] = {
 | |
|             'content': '\n'.join([
 | |
|                 f"Package: {package}",
 | |
|                 f"Pin: release a={node.metadata.get('os_codename')}-backports",
 | |
|                 f"Pin-Priority: 900",
 | |
|             ]),
 | |
|             'needed_by': [
 | |
|                 f'pkg_apt:{package}',
 | |
|             ],
 | |
|             'triggers': {
 | |
|                 'action:apt_update',
 | |
|             },
 | |
|         }
 | |
| 
 | |
| # unattended upgrades
 | |
| #
 | |
| # unattended-upgrades.service: delays shutdown if necessary
 | |
| # apt-daily.timer: performs apt update
 | |
| # apt-daily-upgrade.timer: performs apt upgrade
 | |
| 
 | |
| svc_systemd['unattended-upgrades.service'] = {
 | |
|     'needs': [
 | |
|         'pkg_apt:unattended-upgrades',
 | |
|     ],
 | |
| }
 | |
| svc_systemd['apt-daily.timer'] = {
 | |
|     'needs': [
 | |
|         'pkg_apt:unattended-upgrades',
 | |
|     ],
 | |
| }
 | |
| svc_systemd['apt-daily-upgrade.timer'] = {
 | |
|     'needs': [
 | |
|         'pkg_apt:unattended-upgrades',
 | |
|     ],
 | |
| }
 |