( O codigo e funcionalidade que é simples, não os pacotes, necessariamente)
Package manager educacional feito para aprender C e bash. Não use em produção.
O pakman funciona com um servidor HTTP local que hospeda pacotes e metadados. O cliente (este repo) baixa e instala binários em /bin/ e bibliotecas em /usr/lib/.
- main.c - Interface principal em C que captura input do usuário e chama os scripts bash
- verificar.sh - Valida se pacote existe em
lista.txte faz download do binário - libs.sh - Baixa e instala dependências (libs) do pacote
- remove.sh - Remove entrada do pacote em
logs.txt - atualizar.sh - Exibe conteúdo de
logs.txt(pacotes instalados) - lista.txt - Lista local de pacotes disponíveis
- logs.txt - Registro de pacotes instalados
- pacote.txt - Arquivo temporário que armazena nome do pacote sendo processado
- GCC (para compilar main.c)
- wget
- bash
- sudo/root access
O pakman espera um servidor HTTP rodando em 192.168.15.63:9999 com a seguinte estrutura:
/pacotes/ # Binários executáveis
/libs/ # Bibliotecas compartilhadas
/metadados/ # Diretórios com metadados de cada pacote
/<pacote>/
libs.txt # Lista de bibliotecas necessárias
Você pode usar python -m http.server 9999 ou qualquer servidor HTTP básico.
OBS: Os arquivos devem estar em .tar.xz, tirando aqueles que são .txt
gcc main.c -o gps.out
sudo mv pakman /usr/local/bin/ # ou qualquer dir no PATH./gps.outI- Instalar pacoteR- Remover pacote
- Digite
Ie o nome do pacote - O nome é salvo em
pacote.txt verificar.shé executado:- Verifica se pacote existe em
lista.txt - Faz wget do binário de
http://192.168.15.63:9999/pacotes/$PACOTE - Move para
/bin/com permissão de execução - Adiciona entrada em
logs.txt
- Verifica se pacote existe em
- (Comentado)
libs.shbaixaria dependências de/metadados/$PACOTE/libs.txt
- Digite
Re o nome do pacote - Remove o binário de
/bin/$PACOTEusandoremove() remove.shremove a entrada do pacote emlogs.txtusandosed
Edite libs.sh e verificar.sh:
# De:
wget http://192.168.15.63:9999/...
# Para:
wget http://<SEU_IP>:<SUA_PORTA>/...Edite lista.txt manualmente para adicionar/remover pacotes disponíveis:
fastfetch
btop
nome_do_pacote
Aqui esta o registro de todos os pacotes ja instalados
pacote1
pacote2
nome_do_pacote
- Hardcoded IP/porta do servidor
- Sem verificação de checksum/hash
- Sem resolução automática de dependências
libs.shestá comentado emverificar.sh- Sem rollback em caso de falha
- Buffer overflow possível no
scanf("%20s", buff)sem validação remove()em C não remove logs automaticamente (precisa rodarremove.shapós)- Sem lock mechanism para instalações concorrentes
buff[20]- buffer para input do usuário (máx 19 chars + null terminator)resp- char que armazena opção I/Rcaminho[]- constrói path absoluto do binário em /bin/
- Todos usam
$PACOTElendo depacote.txt sed -imodificalogs.txtin-placegrep -Fxbusca linha exata emlista.txt
- Implementar
atualizar.shpara sync com servidor - Ativar
libs.she testar instalação de dependências - Adicionar lock file para evitar conflitos
- Validação de checksum
- Log de erros separado
- Suporte a múltiplos repos
GPL-3.0