terça-feira, 24 de janeiro de 2023

Problema com o USB bootável contendo o Fedora 37

Preparei uma USB Stick contendo a imagem do Fedora 37 com a intenção de fazer uma fresh install mas quando tentei fazer o boot do media dava erro.

O mesmo aconteceu com o Fedora 38 quando tentei instalá-lo:

Invalid image
Failed to read header: Unsupported
Failed to load image: Unsupported
start_image() returned Unsupported

Tentei por várias vezes, verifiquei de novo a .iso, testando a sua integridade e estava tudo normal, foi aí que pensei que eventualmente poderia ser um problema próprio desta versão do Fedora. Após uma Googlada constatei que esse problema ocorria nalguns motherboards e que não fazia boot em modo UEFI. Não testei em modo BIOS mas ao que parece há opinião positiva nesse sentido.

O problema foi identificado e resolvido em shim (Bootloader UEFI inicial) mas ao que parece a implementação só será no Fedora 38. Mas há várias soluções apontadas e caso seja do teu interesse podes escolher a solução com a qual te sentes mais confortável.

O que encontrei na minha pesquisa:

F37 install media don’t boot in UEFI mode on certain motherboards por Kamil Páral no Ask Fedora

Mas a solução que resolvi experimentar foi baseada neste post de Roland McDoland no Ask Fedora F37 Invalid image error while booting

Esta solução funcionou para mim.

Vamos supor que o dispositivo USB esteja conectado ao computador

Para localizar o dispositivo no qual vamos trabalhar:

$ sudo fdisk -l

Escolhemos o /dev/sdb2 a partição que contém o sistema EFI.

Resultado do comando fdisk -l para localizar o USB bootável

Montamos o /dev/sdb2 em /mnt/ com permissão de rwx (read, write, execute) -o (opção) umask=000

$ sudo mount /dev/sdb2 /mnt/ -o umask=000

Entramos na pasta BOOT

$ cd /mnt/EFI/BOOT

Podemos checar os ficheiros nesta pasta e ver as respetivas permissões:

$ ls -l

ls -l na pasta BOOT da iso Fedora em USB bootável, fase inicial após a montagem do USB stick

Deletamos os ficheiros BOOTX64.EFI e BOOTIA32.EFI

$ rm BOOTX64.EFI BOOTIA32.EFI

Alteramos o nome do ficheiro grubx64.efi para BOOTX64.EFI

$ mv grubx64.efi BOOTX64.EFI

Alteramos o nome do ficheiro grubia32.efi para BOOTIA32.EFI

$ mv grubia32.efi BOOTIA32.EFI

Saimos da pasta /mnt/EFI/BOOT antes de desmontar pois caso contrário teremos a mensagem "target is busy":

$ cd ~

Desmontamos a partição /dev/sdb2:

$ sudo umount /dev/sdb2

Podemos checar para ver que as permissões voltaram à forma inicial:

$ ls -l /run/media/usmejohn/Fedora-WS-Live-37-1-7/EFI/BOOT/

ls -l na pasta BOOT da iso Fedora em USB bootável, fase final após a desmontagem do USB stick

Momento de experimento a ver se funciona mesmo. Dei o boot e o resultado foi positivo.

imagem do boot loader do fedora 37

Esta foi a solução que resolvi experimentar e que funcionou para mim.

quarta-feira, 11 de janeiro de 2023

Compilar e rodar um programa em Java usando o terminal

Instalamos java no nosso sistema.

$ sudo dnf install java

Neste caso o java-17-openjdk já se encontrava instalado:

$ Package java-17-openjdk-1:17.0.5.0.8-1.fc37.x86_64 is already installed.

Para verificarmos se o compilador javac se encontra instalado:

$ javac -version

javac 17.0.5


Vamos testar

Vamos trabalhar dentro de uma pasta de nome Programas e para isso vamos criar a pasta.

$ mkdir Programas

Entramos na pasta Programas

$ cd Programas

Criamos um ficheiro que vamos dar aqui o nome de NomeUtilizador com extensão .java

$ touch NomeUtilizador.java

Abra o ficheiro com um editor da tua preferência, no meu caso estou usando o vim

$ vim NomeUtilizador.java

Vamos criar o seguinte programa

Compilar e rodar programa feito em java no terminal

Para compilar o programa abrimos um outro terminal na mesma pasta, podemos aproveitar o terminal onde criamos o programa e abrimos um novo com CTRL+SHIFT+N

javac é o compilador, NomeUtilizador.java é o nosso programa que queremos compilar.

$ javac NomeUtilizador.java

Vamos agora ver o que temos nesta pasta:

$ ls

NomeUtilizador.java

NomeUtilizador

Para executar o programa basta o seguinte:

$ java NomeUtilizador

Bem, assim foi o como utilizar o terminal para criar, compilar e executar um programa em Java

terça-feira, 10 de janeiro de 2023

Compilar e rodar C++ no terminal Linux

Instalamos o compilador de c++ no nosso sistema.

$ sudo dnf install gcc-c++

================================================================================ Package Architecture Version Repository Size ================================================================================ Installing: gcc-c++ x86_64 12.2.1-4.fc37 updates 13 M Installing dependencies: libstdc++-devel x86_64 12.2.1-4.fc37 updates 2.5 M Transaction Summary ================================================================================ Install 2 Packages Total download size: 15 M Installed size: 47 M Is this ok [y/N]: y

Vamos testar

Vamos trabalhar dentro de uma pasta de nome Programas e para isso vamos criar a pasta.

$ mkdir Programas

Entramos na pasta Programas

$ cd Programas

Criamos um ficheiro que vamos dar aqui o nome de nomeUtilizador com extensão .cpp

$ touch nomeUtilizador.cpp

Abra o ficheiro com um editor da tua preferência, no meu caso estou usando o vim

$ vim nomeUtilizador.cpp

Vamos criar o seguinte programa

Compilar e rodar programa C++ no terminal

Para compilar o programa abrimos um outro terminal na mesma pasta, podemos aproveitar o terminal onde criamos o programa e abrimos um novo com CTRL+SHIFT+N

g++ é o compilador, nomeUtilizador.cpp é o nosso programa que queremos compilar e o -o utilizador é o nome com que queremos que tenha o executável

$ g++ nomeUtilizador.cpp -o utilizador

Vamos agora ver o que temos nesta pasta:

$ ls

nomeUtilizador.cpp

utilizador

Para executar o programa basta o seguinte:

$ ./utilizador

Bem, assim foi o como utilizar o terminal para criar, compilar e executar um programa em c++