--- /dev/null
+from invoke import task
+
+from datetime import datetime as dt
+import os
+
+HOME = os.path.expanduser('~')
+TODAY = dt.now().strftime('%Y.%m.%d')
+DOTFILES=f'{HOME}/dotfiles'
+
+
+@task
+def backup_package_list(c):
+ c.run(f'dpkg --get-selections > {HOME}/backup/packages.{TODAY}.dpkg')
+
+@task
+def show_disk_space(c):
+ print("Do we have at least 5G of free space?")
+ c.run('df -h /')
+
+@task
+def backup_sources(c):
+ c.run(f'cp /etc/apt/sources.list {HOME}/backup/sources.list.{TODAY}.backup')
+
+
+
+@task
+def backup_etc(c):
+ print("Use --prompt-for-sudo")
+ c.run(f'sudo tar -czf {HOME}/backup/etc.backup.{TODAY}.tar.gz /etc')
+ login = os.getlogin()
+ c.run(f'sudo chown {login}:{login} {HOME}/backup/etc.backup.{TODAY}.tar.gz')
+
+
+@task
+def review_backups(c):
+ print('Lines in dpkg backup:')
+ c.run(f'cat {HOME}/backup/*.dpkg | wc -l')
+ print('Files in /etc backup:')
+ c.run(f'tar tf {HOME}/backup/etc.backup.*.tar.gz | wc -l')
+ print('Ensure sources are backed up:')
+ c.run(f'tar tf {HOME}/backup/etc.backup.*.tar.gz | grep etc/apt/sources')
+ c.run(f'ls -al --block-size=M {HOME}/backup')
+
+@task
+def backup(c):
+ backup_package_list(c)
+ backup_sources_list(c)
+ backup_etc(c)
+ review_backup(c)
+