dnf.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from pybrary.ascii import rm_ansi_codes
  2. from setux.logger import error, debug
  3. from setux.core.package import SystemPackager
  4. class Fedora(SystemPackager):
  5. '''DNF Packages managment
  6. '''
  7. manager = 'dnf'
  8. def parse(self, line):
  9. line = rm_ansi_codes(line)
  10. name, ver, _ = line.split()
  11. name = name.split('.')[0]
  12. return name, ver
  13. def do_init(self):
  14. self.do_update()
  15. def do_installed(self):
  16. ret, out, err = self.run('dnf list --installed', report='quiet')
  17. for line in out:
  18. try:
  19. yield self.parse(line)
  20. except: pass
  21. def do_bigs(self):
  22. ret, out, err = self.target.script('''#!/bin/bash
  23. dnf repoquery --installed --queryformat '%9{size} %{name}' | sort -n | tail -n 22
  24. ''', report='quiet')
  25. yield from out
  26. def do_upgradable(self):
  27. ret, out, err = self.run('''
  28. dnf list --upgrades
  29. ''', report='quiet')
  30. for line in out:
  31. try:
  32. yield self.parse(line)
  33. except Exception as x:
  34. debug(line)
  35. def do_installable(self, pattern=None):
  36. ret, out, err = self.run('dnf list --available', report='quiet')
  37. for line in out:
  38. try:
  39. yield self.parse(line)
  40. except: pass
  41. def do_remove(self, pkg):
  42. ret, out, err = self.run(f'dnf -y remove {pkg}', sudo='root')
  43. return ret == 0
  44. def do_cleanup(self):
  45. self.run('dnf clean all', sudo='root')
  46. def do_update(self):
  47. self.run('dnf check-update -y')
  48. def do_upgrade(self):
  49. self.run('dnf upgrade -y', sudo='root')
  50. def do_install(self, pkg, ver=None):
  51. ver = f' ={ver}' if ver else ''
  52. ret, out, err = self.run(f'dnf -y -C install {pkg}{ver}', sudo='root', report='quiet')
  53. if ret == 0:
  54. return True
  55. if ret==1:
  56. ret, out, err = self.run(f'dnf -y install {pkg}{ver}', sudo='root')
  57. if ret == 0:
  58. return True
  59. error('\n'.join(err))
  60. return False