diff --git a/modules/swap/module.py b/modules/swap/module.py index b03140d..cd342bc 100644 --- a/modules/swap/module.py +++ b/modules/swap/module.py @@ -1,8 +1,14 @@ import subprocess +from typing import List + from AbstractModule import AbstractModule from PyInquirer import prompt +def _run_shell_command(cmd: List[str]) -> str: + return subprocess.check_output(cmd).decode("UTF-8").strip() + + class SwapModule(AbstractModule): def __init__(self): @@ -17,7 +23,8 @@ class SwapModule(AbstractModule): "Get swap location": self._get_swap_location, "Get swap size": self._get_swap_size, "Show swapiness": self._show_swapiness, - "Adjust temp. swapiness": self._adjust_swapiness_temp + "Adjust temp. swapiness": self._adjust_swapiness_temp, + "Check fstab for entry": self._fstab_entry_exists } menu = [ { @@ -35,7 +42,7 @@ class SwapModule(AbstractModule): self._make_swap_persistent() def _get_swap_location(self): - output_swaps = subprocess.check_output(['cat', '/proc/swaps']).decode("UTF-8") + output_swaps = _run_shell_command(["cat", "/proc/swaps"]) try: swap_location = output_swaps.split()[5] print("Swap is located here:", swap_location) @@ -45,7 +52,7 @@ class SwapModule(AbstractModule): return None def _get_swap_size(self): - swap_size = subprocess.check_output(['swapon', '--show']).decode("UTF-8") + swap_size = _run_shell_command(['swapon', '--show']) try: swap_size = swap_size.split()[7] print("Swap is {}b big!".format(swap_size)) @@ -53,10 +60,9 @@ class SwapModule(AbstractModule): print("Swap file doesn´t exist!") def _create_resize_swap(self): - output_swapon = subprocess.check_output(['swapon', '--show']).decode("UTF-8") - if output_swapon: - swap_size = subprocess.check_output(['swapon', '--show']).decode("UTF-8") - swap_size = swap_size.split()[7] + output_swapon = _run_shell_command(['swapon', '--show']) + if output_swapon is not "": + swap_size = output_swapon.split()[7] print("") print("Swap already installed! You can resize it!") print("Curr. swap size: {}b".format(swap_size)) @@ -66,7 +72,7 @@ class SwapModule(AbstractModule): "sudo mkswap /swapfile && " + \ "sudo swapon /swapfile" subprocess.call(resize_swapfile, shell=True) - output_free = subprocess.check_output(['free', '-h']).decode("UTF-8") + output_free = _run_shell_command(["free", "-h"]) print(output_free.strip()) else: @@ -77,7 +83,7 @@ class SwapModule(AbstractModule): "sudo swapon /swapfile" subprocess.call(create_swapfile, shell=True) - output_free = subprocess.check_output(['free', '-h']).decode("UTF-8") + output_free = _run_shell_command(["free", "-h"]) print(output_free.strip()) def _make_swap_persistent(self): @@ -87,13 +93,15 @@ class SwapModule(AbstractModule): return backup_fstab = "sudo cp /etc/fstab /etc/fstab.bak" enable_persistence = "echo '{} none swap sw 0 0' | sudo tee -a /etc/fstab".format(swap_location) - subprocess.call(backup_fstab, shell=True) - subprocess.call(enable_persistence, shell=True) - print("Swap is now persistent!") + if self._fstab_entry_exists(): + print("Swap is already persistent!") + else: + subprocess.call(backup_fstab, shell=True) + subprocess.call(enable_persistence, shell=True) + print("Swap is now persistent!") def _show_swapiness(self): - get_swapiness = "cat /proc/sys/vm/swappiness" - subprocess.call(get_swapiness, shell=True) + print(_run_shell_command(["cat", "/proc/sys/vm/swappiness"])) def _adjust_swapiness_temp(self): options = { @@ -121,9 +129,30 @@ class SwapModule(AbstractModule): return disable_swapfile = "sudo swapoff {} && ".format(swap_location) + \ "sudo rm {}".format(swap_location) + if self._fstab_entry_exists(): + with open("/etc/fstab", "r") as fstab_out: + content = fstab_out.readlines() + with open("/etc/fstab", "w") as fstab_in: + content = content[:-1] + for line in content: + fstab_in.write(line) + else: + print("No entry in /etc/fstab!") subprocess.call(disable_swapfile, shell=True) - output_swapon = subprocess.check_output(['swapon', '--show']).decode("UTF-8") - output_free = subprocess.check_output(['free', '-h']).decode("UTF-8") + output_swapon = _run_shell_command(['swapon', '--show']) + output_free = _run_shell_command(["free", "-h"]) if not output_swapon: print("Swap deleted!") print(output_free.strip()) + + def _fstab_entry_exists(self): + swap_location = self._get_swap_location() + fstab_entry = "{} none swap sw 0 0\n".format(swap_location) + with open("/etc/fstab", "r") as fstab_file: + line = fstab_file.readlines()[-1] + if line != fstab_entry: + print("No entry in /etc/fstab") + return False + else: + print("fstab entry:", line.strip()) + return True