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))
Ejemplo n.º 6
0
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))
Ejemplo n.º 8
0
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")
Ejemplo n.º 11
0
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")
Ejemplo n.º 12
0
 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")
Ejemplo n.º 14
0
    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")
Ejemplo n.º 15
0
 def __init__(self):
     """
     Método construtor.
     """
     self.__shell = Shell(AcaoQuandoOcorrerErro.REPETIR_E_IGNORAR, 10)
     self.__subscription_manager = SubscriptionManager()
Ejemplo n.º 16
0
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")
Ejemplo n.º 18
0
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))
Ejemplo n.º 19
0
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()
Ejemplo n.º 21
0
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))