class Pip: """ Classe que realiza a comunicação do código Python com o gerenciador de pacotes Pip. """ def __init__(self): """ Método construtor """ self.__shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) def install(self, pacote): """ Instala pacote(s) do gerenciador de pacotes Pip. :param pacote: Pacote(s) a ser(em) instalado(s). """ if type(pacote) is str: self.__shell.executar("pip3 install {}".format(pacote)) elif type(pacote) is list: for p in pacote: self.install(p) @staticmethod def instalar_pip(): """ Instala o gerenciador de pacotes Pip. """ Dnf().install("python3-pip")
def configurar_grub(): """ Configura o Grub """ caminho_absoluto_configuracao_grub = "/etc/default/grub" caminho_absoluto_configuracao_grub_backup = "/etc/default/grub.old" try: shutil.copy(caminho_absoluto_configuracao_grub, caminho_absoluto_configuracao_grub_backup) except Exception as e: print(e) return grub_default_saved_param = "GRUB_DEFAULT=saved" grub_savedefault_true_param = "GRUB_SAVEDEFAULT=true" with open(caminho_absoluto_configuracao_grub, "r+") as arquivo: linhas = arquivo.readlines() if not any(grub_default_saved_param in linha for linha in linhas): arquivo.seek(0, io.SEEK_END) arquivo.write("{}\n".format(grub_default_saved_param)) if not any(grub_savedefault_true_param in linha for linha in linhas): arquivo.seek(0, io.SEEK_END) arquivo.write("{}\n".format(grub_savedefault_true_param)) shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) # shell.executar("sudo grub2-set-default saved") shell.executar("sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg")
class VisualStudioCode: """ Classe que realiza a comunicação do código Python com o Visual Studio Code. """ def __init__(self): """ Método construtor. """ self.__shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) def install_extension(self, extension): """ Instala extensão(ões) do Visual Studio Code. :param extension: Extensão(ões) a ser(em) instalada(s). """ if type(extension) is str: self.__shell.executar( "code --install-extension {}".format(extension)) elif type(extension) is list: for e in extension: self.install_extension(e) @staticmethod def instalar_visual_studio_code(): """ Instala o Visual Studio Code. """ Snap.instalar_snapd() gerenciador_snap = Snap() gerenciador_snap.install("code --classic")
def configurar_virtualbox(): """ Configura o VirtualBox. """ gerenciador_dnf.install("mokutil") shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) shell.executar("sudo bash ./Scripts/SignVirtualboxModules.sh")
class SubscriptionManager: """ Classe que realiza a comunicação do código Python com o Red Hat Subscription Manager. """ def __init__(self): """ Método construtor. """ self.__shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) self.__arquitetura = platform.processor() def repos_enable(self, repository): """ Habilita repositório da Red Hat. :param repository: Repositório(s) a ser(em) adicionado(s) """ if type(repository) is str: self.__shell.executar( "sudo subscription-manager repos --enable={}".format( repository)) elif type(repository) is list: for r in repository: self.repos_enable(r) @staticmethod def register(username, password): """ Registra a instalação do Red Hat Enterprise Linux com a conta da Red Hat. :param username: Nome de usuário da conta da Red Hat. :param password: Senha da conta da Red Hat. """ Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 5).executar( "sudo subscription-manager register --username {} --password {}". format(username, password)) def habilitar_appstream_rpms(self): """ Habilita o repositório AppStream RPMs. """ self.repos_enable("rhel-8-for-{}-appstream-rpms".format( self.__arquitetura)) def habilitar_baseos_rpms(self): """ Habilita o repositório BaseOS RPMs. """ self.repos_enable("rhel-8-for-{}-baseos-rpms".format( self.__arquitetura)) def habilitar_codeready_builder(self): """ Habilita o repositório CodeReady Builder. """ self.repos_enable("codeready-builder-for-rhel-8-{}-rpms".format( self.__arquitetura))
def configurar_adb(): """ Configura o Android ADB. """ configurar_diretorio_home_bin() diretorio_home = expanduser("~") path_adb = "{}/Android/Sdk/platform-tools/adb".format(diretorio_home) path_pasta_atalho = "{}/bin".format(diretorio_home) path_atalho = "{}/adb".format(path_pasta_atalho) try: os.mkdir(path_pasta_atalho) except FileExistsError as e: print(e) shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) shell.executar("ln --symbolic {} {}".format(path_adb, path_atalho))
def register(username, password): """ Registra a instalação do Red Hat Enterprise Linux com a conta da Red Hat. :param username: Nome de usuário da conta da Red Hat. :param password: Senha da conta da Red Hat. """ Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 5).executar( "sudo subscription-manager register --username {} --password {}". format(username, password))
def instalar_rust_lang(): """ Instala o compilador e o gerenciador de dependências da linguagem de programação Rust. """ shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) shell.executar( "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh") shell.executar("source $HOME/.cargo/env")
class Snap: """ Classe que realiza a comunicação do código Python com o gerenciador de pacotes Snap. """ def __init__(self): """ Método construtor. """ self.__shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) def install(self, pacote): """ Instala pacote(s) Snap. :param pacote: Pacote(s) snap a ser(em) instalado(s). """ if type(pacote) is str: self.__shell.executar("sudo snap install {}".format(pacote)) elif type(pacote) is list: for p in pacote: self.install(p) def refresh(self): """ Atualiza pacote(s) Snap. """ self.__shell.executar("sudo snap refresh") @staticmethod def instalar_snapd(): """ Instala o gerenciador de pacotes Snap. """ dnf = Dnf() dnf.habilitar_fedora_epel() dnf.install("snapd") shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) shell.executar("sudo systemctl enable --now snapd.socket") shell.executar("sudo ln -s /var/lib/snapd/snap /snap")
def instalar_snapd(): """ Instala o gerenciador de pacotes Snap. """ dnf = Dnf() dnf.habilitar_fedora_epel() dnf.install("snapd") shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) shell.executar("sudo systemctl enable --now snapd.socket") shell.executar("sudo ln -s /var/lib/snapd/snap /snap")
class Flatpak: """ Classe que realiza a comunicação do código Python com o gerenciador de pacotes Flatpak. """ def __init__(self): """ Método construtor. """ self.__shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) def install(self, package): """ Instala pacote(s) Flatpak. :param package: Pacote(s) a ser(em) instalado(s). """ if type(package) is str: self.__shell.executar( "sudo flatpak install --system --assumeyes {}".format(package)) elif type(package) is list: for p in package: self.install(p) def update(self): """ Atualiza pacote(s) Flatpak. """ self.__shell.executar("sudo flatpak update --assumeyes") def remote_add(self, repository): """ Adiciona repositório(s) Flatpak. :param repository: Repositório(s) Flatpak a ser(em) adicionado(s). """ if type(repository) is str: self.__shell.executar( "sudo flatpak remote-add --if-not-exists {}".format( repository)) elif type(repository) is list: for r in repository: self.remote_add(r) @staticmethod def instalar_flatpak(): """ Instala o gerenciador de pacotes flatpak. """ Dnf().install("flatpak") def habilitar_flathub(self): """ Habilita o repositório do Flathub. """ self.remote_add("flathub https://flathub.org/repo/flathub.flatpakrepo")
def __init__(self): """ Método construtor. """ self.__shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10)
def configurar_script_de_atualizacao(): """ Configura o script de atualização de pacotes do sistema. """ shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) shell.executar("sudo cp ./Scripts/Update.sh /usr/bin/update")
def configurar_atualizacoes_automaticas(self): """ Configura as atualizações automáticas de pacotes do gerenciador DNF. """ self.install("dnf-automatic") shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_ABORTAR, 1024) shell.executar("sudo cp /etc/dnf/automatic.conf ./automatic.conf.original") shell.executar("sudo chmod 666 ./automatic.conf.original") # Modificando arquivo de configuração do DNF Automatic with open("automatic.conf.original", "r") as arquivo_original, \ open("automatic.conf.modificado", "w") as arquivo_modificado: for linha in arquivo_original: if "apply_updates =" in linha: arquivo_modificado.write("apply_updates = yes") else: arquivo_modificado.write(linha) # Copiando arquivo de configuração do DNF Automatic modificado shell.executar("sudo cp --force ./automatic.conf.modificado /etc/dnf/automatic.conf") # Habilitando DNF Automatic shell.executar("sudo systemctl enable --now dnf-automatic-notifyonly.timer") # Movendo arquivos não mais necessários para a lixeira shell.executar("gio trash ./automatic.conf.original ./automatic.conf.modificado")
def __init__(self): """ Método construtor. """ self.__shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) self.__subscription_manager = SubscriptionManager()
class Dnf: """ Classe que realiza a comunicação do código Python com o gerenciador de pacotes DNF. """ def __init__(self): """ Método construtor. """ self.__shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) self.__subscription_manager = SubscriptionManager() def install(self, pacote): """ Instala pacote(s) do gerenciador de pacotes DNF :param pacote: Pacote(s) a ser(em) instalado(s). """ if type(pacote) is str: self.__shell.executar("sudo dnf --assumeyes install {}".format(pacote)) elif type(pacote) is list: for p in pacote: self.install(p) def upgrade(self): """ Atualiza pacote(s) do gerenciador de pacotes DNF. """ self.__shell.executar("sudo dnf --assumeyes upgrade --refresh") def config_manager_add_repo(self, repo): """ Adiciona repositório(s) ao gerenciador de pacotes DNF. :param repo: Repositório(s) a ser(em) adicionado(s). """ if type(repo) is str: self.__shell.executar("sudo dnf --assumeyes config-manager --add-repo={}".format(repo)) elif type(repo) is list: for r in repo: self.config_manager_add_repo(r) def module_install(self, module): """ Instala módulo(s) do gerenciador de pacotes DNF. :param module: Módulo(s) a ser(em) instalados. """ if type(module) is str: self.__shell.executar("sudo dnf --assumeyes module install {}".format(module)) elif type(module) is list: for m in module: self.module_install(m) def group_update(self, group): """ Atualiza pacote(s) de um ou mais grupo de pacotes DNF. :param group: Grupo(s) a serem atualizados. """ if type(group) is str: self.__shell.executar("sudo dnf --assumeyes group update {}".format(group)) elif type(group) is list: for g in group: self.group_update(g) def group_install(self, group): """ Instala grupo(s) de pacotes do gerenciador de pacotes DNF. :param group: Grupo(s) de pacotes a ser(em) instalados. """ if type(group) is str: self.__shell.executar("sudo dnf --assumeyes group install {}".format(group)) elif type(group) is list: for g in group: self.group_install(g) def habilitar_fedora_epel(self): """ Habilita o repositório Fedora EPEL. """ self.install("https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm") self.__subscription_manager.habilitar_codeready_builder() def habilitar_rpm_fusion(self): """ Habilita o repositório RPM Fusion. """ self.install("https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm") self.install("https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-8.noarch.rpm") self.habilitar_fedora_epel() self.__subscription_manager.habilitar_codeready_builder() self.group_update("core") self.group_update("multimedia --setop=\"install_weak_deps=False\" --exclude=PackageKit-gstreamer-plugin") self.group_update("sound-and-video") self.install("rpmfusion-free-release-tainted") self.install("rpmfusion-nonfree-release-tainted") def configurar_atualizacoes_automaticas(self): """ Configura as atualizações automáticas de pacotes do gerenciador DNF. """ self.install("dnf-automatic") shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_ABORTAR, 1024) shell.executar("sudo cp /etc/dnf/automatic.conf ./automatic.conf.original") shell.executar("sudo chmod 666 ./automatic.conf.original") # Modificando arquivo de configuração do DNF Automatic with open("automatic.conf.original", "r") as arquivo_original, \ open("automatic.conf.modificado", "w") as arquivo_modificado: for linha in arquivo_original: if "apply_updates =" in linha: arquivo_modificado.write("apply_updates = yes") else: arquivo_modificado.write(linha) # Copiando arquivo de configuração do DNF Automatic modificado shell.executar("sudo cp --force ./automatic.conf.modificado /etc/dnf/automatic.conf") # Habilitando DNF Automatic shell.executar("sudo systemctl enable --now dnf-automatic-notifyonly.timer") # Movendo arquivos não mais necessários para a lixeira shell.executar("gio trash ./automatic.conf.original ./automatic.conf.modificado")
def configurar_java(): """ Configura o compilador e á máquina virtual Java. """ shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) # Criando comando java8 e javac8 shell.executar("sudo ln -s /usr/lib/jvm/java-1.8.0/bin/java /bin/java8") shell.executar("sudo ln -s /usr/lib/jvm/java-1.8.0/bin/javac /bin/javac8") with open("java.desktop", "w") as arquivo_atalho: arquivo_atalho.writelines( ["[Desktop Entry]\n", "Name=Java Runtime Environment\n", "Comment=Java Runtime Environment\n", "GenericName=Java\n", "Keywords=java\n", "Exec=java -jar %f\n", "Terminal=false\n", "X-MultipleArgs=false\n", "Type=Application\n", "MimeType=application/x-java-archive\n", "StartupNotify=true\n", "Icon=java-1.8.0-openjdk\n"]) shell.executar("sudo chmod 777 ./java.desktop") shell.executar("sudo cp --force ./java.desktop /usr/share/applications/java.desktop") shell.executar("sudo chmod 777 /usr/share/applications/java.desktop") shell.executar("gio trash ./java.desktop") with open("java8.desktop", "w") as arquivo_atalho: arquivo_atalho.writelines( ["[Desktop Entry]\n", "Name=Java Runtime Environment 8\n", "Comment=Java Runtime Environment 8\n", "GenericName=Java8\n", "Keywords=java8\n", "Exec=java8 -jar %f\n", "Terminal=false\n", "X-MultipleArgs=false\n", "Type=Application\n", "MimeType=application/x-java-archive\n", "StartupNotify=true\n", "Icon=java-1.8.0-openjdk\n"]) shell.executar("sudo chmod 777 ./java8.desktop") shell.executar("sudo cp --force ./java8.desktop /usr/share/applications/java8.desktop") shell.executar("sudo chmod 777 /usr/share/applications/java8.desktop") shell.executar("gio trash ./java8.desktop")
from adapter.Shell import Shell, AcaoQuandoOcorrerErro __shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) def habilitar_wifi(): """ Habilita o Wifi do dispositivo. """ __shell.executar("sudo nmcli radio wifi on") def conectar_rede_wifi(ssid, senha): """ Conecta o dispositivo a uma rede wifi. :param ssid: Service Set Identifier (Nome da rede). :param senha: Senha da rede. """ __shell.executar("sudo nmcli device wifi connect '{}' password '{}'".format(ssid, senha))
def configurar_gnome(): """ Configura o Gnome personalizando as configurações. """ shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) # Desabilitando hot corners: # https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/using_the_desktop_environment_in_rhel_8/getting-started-with-gnome_using-the-desktop-environment-in-rhel-8#disabling-the-hot-corner-functionality-for-a-single-user_disabling-the-hot-corner-functionality-on-gnome-shell shell.executar( "gsettings set org.gnome.desktop.interface enable-hot-corners false") # Mostrar segundos shell.executar( "gsettings set org.gnome.desktop.interface clock-show-seconds true") # Mostrar dia da semana shell.executar( "gsettings set org.gnome.desktop.interface clock-show-weekday true") # Mostrar porcentagem da bateria shell.executar( "gsettings set org.gnome.desktop.interface show-battery-percentage true" ) # Habilitar atualização de fuso horário shell.executar( "gsettings set org.gnome.desktop.datetime automatic-timezone true") # Desabilitar autorun shell.executar( "gsettings set org.gnome.desktop.media-handling autorun-never true") # Habilitar o fractional scaling shell.executar( "gsettings set org.gnome.mutter experimental-features \"['scale-monitor-framebuffer']\"" )
def __init__(self): """ Método construtor. """ self.__shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) self.__arquitetura = platform.processor()
def instalar_extensoes_visual_studio_code(): """ Instala as extensões do Visual Studio Code. """ VisualStudioCode.instalar_visual_studio_code() gerenciador_visual_studio_code.install_extension([ # Tradução do VS Code em Português "ms-ceintl.vscode-language-pack-pt-br", # Linguagem C/C++ "ms-vscode.cpptools", "ms-vscode.cmake-tools", "austin.code-gnu-global", # Linguagem C# "ms-dotnettools.csharp", # Linguagem Java "vscjava.vscode-java-debug", "vscjava.vscode-maven", "vscjava.vscode-java-dependency", "vscjava.vscode-java-pack", "vscjava.vscode-java-test", "redhat.java", # Linguagem Rust "matklad.rust-analyzer", "vadimcn.vscode-lldb", "rust-lang.rust", # Linguagem Go "golang.Go", # HTML, CSS e Javascript "ecmel.vscode-html-css", "firefox-devtools.vscode-firefox-debug", "msjsdiag.debugger-for-chrome", "dbaeumer.vscode-eslint", # Tema do VS Code "GitHub.github-vscode-theme", # Markdown "DavidAnson.vscode-markdownlint", # Powershell " ms-vscode.PowerShell", # Indentação de código "NathanRidley.autotrim", "esbenp.prettier-vscode", # AI-assisted IntelliSense "VisualStudioExptTeam.vscodeintellicode" ]) shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) shell.executar( "echo 'fs.inotify.max_user_watches=524288' | sudo tee --append /etc/sysctl.conf" ) shell.executar("sudo sysctl -p") shell.executar("git config --global core.editor \"code --wait\"")
def main(): """ Método principal. """ conectar_na_rede_wifi() registrar_red_hat() instalar_pacotes_dnf() instalar_pacotes_snap() instalar_pacotes_flatpak() configurar_java() configurar_virtualbox() configurar_script_de_atualizacao() #configurar_grub() if __name__ == '__main__': # Verificando se eh root if os.geteuid() == 0: main() else: # Executando como root print("Este script não está rodando como root.") print("Realizando a elevação de privilégio...") __shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10) caminho_absoluto_deste_arquivo_python = os.path.abspath(__file__) caminho_absoluto_deste_interpretador_python = sys.executable __shell.executar("sudo {} {}".format(caminho_absoluto_deste_interpretador_python, caminho_absoluto_deste_arquivo_python))