Skip to content

Commit

Permalink
Merge pull request #6 from Kedap/develop
Browse files Browse the repository at this point in the history
v1.3.0
  • Loading branch information
Kedap authored Jun 15, 2021
2 parents 8faa16e + 347eb3b commit 2ddea5e
Show file tree
Hide file tree
Showing 17 changed files with 143 additions and 53 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "apmpkg"
version = "1.2.0"
version = "1.3.0"
authors = ["kedap <[email protected]>"]
edition = "2018"
description = "Un administrador de paquetes universal para linux como modelo: PKGBUILD"
Expand Down
27 changes: 16 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ A Package Manager as a model: PKGBUILD
</p>

# NOTICIAS
- Se ha liberado la versión: v1.2 Para todos!!!
- Se ha liberado la versión: v1.3 Para todos!!!
- Creacion de los binarios para todas las distribuciones disponibles
- Se a subido ApmPKG esta en [AUR](https://aur.archlinux.org/packages/apmpkg/)
- Agregamos `abi_dependencias` y `dependencias_adi` para dependencias que no esten en repositorios nativos, [mas informacion aqui](doc/creando_paquetes.md/#dependencias-adi)
- Agregamos informacion para arquitectura del cual esta hecho el paquete, [mas informacion aqui](doc/creando_paquetes.md/#paquete)
- Colocamos la leyenda `actualizando paquete...` cuando ya se tiene una instalacion previa del paquete a instalar
- Manuales en Ingles y Español, ahora hemos creado paginas para `man` en ambos idiomas!
- Se agrego un comando para construir binarios sin necesida de construirlos
- Solucionamos el problema con gestores de paquetes que no tenian una opcion o bandera para confirmar la instalacion, es el caso de apk
- Agregamos en las dependencias para apk `bash` y `ruby-dev`
- Agregamos el soporte para pkg de termux
- Agregamos el soporte de dependencias para npm
- Realizamos que posible el hecho de poder ejecutar scripts post instalacion en archivos adi [mas info aqui](doc/creando_paquetes.md/#instalacion)

* * *
Un gestor de paquetes que desea ser una poderosa herramienta universal para linux con el fin de la cracion e instalacion de paquetes.
Expand All @@ -33,19 +33,21 @@ Los gestores que son soportado por ApmPKG:
- [x] Zypper
- [x] Yum
- [x] Apk
- [x] Pkg (termux)
- [x] Npm
- [ ] Emerge
- [ ] Yay
- [ ] Pkg (termux)
- [ ] Nix

De igual manera se pueden crear binarios para una instalacion offline [binarios](doc/modos_de_instalacion.md/#instalacion-desde-un-archivo-binario-de-instalacion) para saber [mas infomarcion aqui](doc/modos_de_instalacion.md)

## Instalacion
* * *
* * *
Aunque sea algo dificl o raro, de igual manera podemos instalar apmpkg con el mismo apmpkg, aun porque creemos que la distribucion de paquetes es importante tratamos de poner a disposicion y de crear binarios nativos para cada distribucion en donde son soportados los gestores de paquetes, pero primero debes de tener las depencias, entre ellos:
- pip3/pip2
- bundle
- wget
- fakeroot
- bundle
- wget
- fakeroot
- git
- rsync

Expand All @@ -61,6 +63,7 @@ Para ello puedes dirijirte a la seccion de [lanzamientos](https://github.com/Ked
- Extenciones propios de nuestra herramienta, *.adi, .abc y .abi.tar.gz* cada una tiene una funcion especial, [mas informacion aqui](doc/modos_de_instalacion.md)
- Crear un prototipo para un generar un archivo .adi o .abc, con el comando: `apmpkg crear adi foo` en el caso de crear un archivo .abc se debe de ejecutar lo siguiente: `apmpkg crear abc foo`
- Construir tus binarios, Con la llegada de la version 1.2 se puede construir binarios sin la necesidad de instalarlos, solo debes de ejecutar: `apmpkg construir foo.adi` o si es un paquete .abc: `apmpkg construir foo.abc`
- Con la llegada de la version 1.3 se puede ejecutar scripts post instalacion [mas info aqui](doc/creando_paquetes.md/#instalacion)

## Contribuir
Si tienes una buena idea o quieres contribuir con este proyecto puedes empezar por [aqui](https://github.com/Kedap/apmpkg/issues) y [leer esto](CONTRIBUTING.md)
Expand All @@ -70,6 +73,8 @@ Si tienes una buena idea o quieres contribuir con este proyecto puedes empezar p
**¿Realmente es universal para TODAS las distribuciones gnu/linux disponibles?**

No, solo para aquellas que tenemos soporte para las dependencias, gestores de paquetes y arquitectura de estos.
de igual manera no todas las dependencias se llaman igual en todas las distribuciones que al igual se
soluciona al preguntar por algun nombre de dependencias alternativas que se encuentre en sus gestor de paquete de preferencia

**¿Porque no implentan X caracteristica?**

Expand Down
3 changes: 3 additions & 0 deletions doc/creando_paquetes.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ sha256sum = "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" # SALT
#opt_src = true
files = ["main.rb" , "config.conf"]
ruta = ["/usr/bin/foo", "/etc/foo/config.conf"]
post_install = "post_apmpkg.sh"
mensaje = "Para poder ejecutar, prueba con 'foo'!"
```
Mucha informacion, vamos por pasos, ADI tiene la sintaxis de TOML para que sea mas facil crear paquetes, de esta forma vamos a ver cada uno de las lineas:
Expand Down Expand Up @@ -146,10 +147,12 @@ Aqui se enfoca la informacion refrente a la ruta de instalacion, este se inicia
#opt_src = true
files = ["main.rb" , "config.conf"]
ruta = ["/usr/bin/foo", "/etc/foo/config.conf"]
post_install = "post_apmpkg.sh"
mensaje = "Para poder ejecutar, prueba con 'foo'!"
```
La variable **opt_src** es un boleano que admite true o false si es que se desea que todo el directorio obtenido por git o por la descarga se copia a la carpeta /opt, un ejemplo de esto es el paquete metasploit que se instala en la carpeta opt.
**files** y **ruta** ambos son arrays que contienen ruta de archivos, files selecciona los archivos que se van a instalar y ruta la ruta donde estos van a ser instalados, el primer archivo seleccionado se va a instalar con `install -Dm 755` ya que se da por hecho que el index 0 de ambos array es un binario.
Encontraremos con la variable **post_install** que no es mas un variable string que almacena la ruta del script escrito en bash que se ejecutara una vez instalado el paquete

## Abc
Su nombre es el acronimo de:
Expand Down
6 changes: 2 additions & 4 deletions ejemplos/bee-for-cerberus.adi
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,7 @@ file = "requirements.txt"

[descarga]

#git = "https://github.com/tony23x/beef-for-cerberus.git"
#Para testeo
git = "https://github.com/kedap/beef-for-cerberus.git"
git = "https://github.com/tony23x/beef-for-cerberus.git"
carpeta = "beef-for-cerberus"
sha256sum = "SALTAR"

Expand All @@ -33,4 +31,4 @@ sha256sum = "SALTAR"
opt_src = true
files = ["beef-cerberus.sh"]
ruta = ["/usr/bin/beef-cerberus"]
mensaje = "Ejecuta 'beef-cerberus' para iniciar :)"
mensaje = "Ejecuta 'beef-cerberus' para iniciar :)"
22 changes: 22 additions & 0 deletions ejemplos/nspawn.adi
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
[paquete]

nombre = "nspawn"
version = "1.0.0"
rama = "estable"
descrip = "A wrapper around machinectl for easy-deployment of nspawn.org containers"
pagina = "https://github.com/nspawn/nspawn"
licensia = "GPL-V3"
dependencias = ["bash"]
conflicto = "/usr/bin/nspawn.sh"

[descarga]

git = "https://github.com/nspawn/nspawn"
carpeta = "nspawn"
sha256sum = "SALTAR"

[instalacion]

files = ["nspawn"]
ruta = ["/usr/bin/nspawn"]
mensaje = "Visit the page of nspawn: https://nspawn.org/"
Binary file modified img/captura_prin.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified img/esquema.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 9 additions & 9 deletions man/apmpkg-en.1
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.3.
.TH APMPKG "1" "June 2021" "apmpkg 1.2" "User Commands"
.TH APMPKG "1" "June 2021" "apmpkg 1.3" "User Commands"
.SH NAME
apmpkg \- manual page for apmpkg 1.2
.SH DESCRIPTION
ApmPKG v1.2
Kedap. <dxhqezk@hi2.in>
apmpkg \- manual page for apmpkg 1.3
.SH DESCRIPTION
ApmPKG v1.3
Kedap. <kqybspvj@hi2.in>
A Package Manager as a model: PKGBUILD
.SS "USAGE:"
.IP
Expand All @@ -19,14 +19,14 @@ Prints version information
.SS "OPTIONS:"
.TP
\fB\-d\fR, \fB\-\-Instalar_dependencia\fR <instalard>
Install the specified dependency
Install the especified dependency
.SS "SUBCOMMANDS:"
.TP
construir
build a binary from a file adi or abc
Build a binary from a file adi or abc
.TP
crear
Create a protype for files .adi o .abc
Create a protype for files .adi or .abc
.TP
help
Prints this message or the help of the given subcommand(s)
Expand All @@ -35,7 +35,7 @@ instalar
Install/Update a package
.TP
remover
Uninstall a package
Unistall a package
.SH "SEE ALSO"
The full documentation for
.B apmpkg
Expand Down
16 changes: 8 additions & 8 deletions man/apmpkg.1
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.3.
.TH APMPKG "1" "June 2021" "apmpkg 1.2" "User Commands"
.TH APMPKG "1" "June 2021" "apmpkg 1.3" "User Commands"
.SH NAME
apmpkg \- pagina del manual para apmpkg 1.2
.SH DESCRIPTION
ApmPKG v1.2
Kedap. <dxhqezk@hi2.in>
apmpkg \- Pagina manual de apmpkg 1.3
.SH DESCRIPTION
ApmPKG v1.3
Kedap. <kqybspvj@hi2.in>
Un administrador de paquetes universal para linux como modelo PKGBUILD
.SS "USAGE:"
.IP
apmpkg [OPTIONS] [SUBCOMMAND]
.SS "FLAGS:"
.TP
\fB\-h\fR, \fB\-\-help\fR
Imprime esta ayuda
Imprime este menu de ayuda
.TP
\fB\-V\fR, \fB\-\-version\fR
Imprime la version
Imprime informacion de la version
.SS "OPTIONS:"
.TP
\fB\-d\fR, \fB\-\-Instalar_dependencia\fR <instalard>
Expand All @@ -29,7 +29,7 @@ crear
Crea un prototipo para archivo .adi o .abc
.TP
help
Imprime esta ayuda o imprime la ayuda para los subcomandos
Imprime el menu de ayuda para cada subcomando
.TP
instalar
Instala/actualiza un paquete
Expand Down
10 changes: 10 additions & 0 deletions src/archivos.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
//uses
use {
crate::{
core_funcions,
estructuras::{AdiDescarga, AdiGem, AdiPaquete, AdiPip},
lang_managers,
},
Expand Down Expand Up @@ -443,6 +444,8 @@ pub fn crate_bin(path: &str, nombre: &str, meta_file: &str) {
dirc.push_str(path);
dirc.push_str(&des.src);
dirc.push('/');
let tmp = &dirc;
let dirpath = Path::new(tmp);

let archivos = &adi["instalacion"]["files"].as_array().unwrap();
for i in 0..archivos.len() {
Expand All @@ -459,6 +462,13 @@ pub fn crate_bin(path: &str, nombre: &str, meta_file: &str) {
}
}

if core_funcions::post_install_existe(&meta_file) {
//Agregando el script post instalcion
let instalacion = tomy["instalacion"].as_table().unwrap();
tar.append_path(dirpath.join(instalacion["post_install"].as_str().unwrap()))
.unwrap();
}

let out_adi = String::from("apkg.adi");
let f = write_f(&out_adi, meta_file.as_bytes());
match f {
Expand Down
6 changes: 3 additions & 3 deletions src/cli.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: ApmPKG
version: "v1.2.0"
author: Kedap. <dxhqezk@hi2.in>
version: "v1.3.0"
author: Kedap. <kqybspvj@hi2.in>
about: Un administrador de paquetes universal para linux como modelo PKGBUILD
args:
- instalard:
Expand Down Expand Up @@ -52,4 +52,4 @@ subcommands:
args:
- paquete:
help: Ruta del archivo adi o abc a construir el binario
index: 1
index: 1
68 changes: 55 additions & 13 deletions src/core_funcions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use {
colored::*,
psutil,
read_input::prelude::*,
std::{any::type_name, process::Command},
std::{path::Path, process::Command},
toml::Value,
};

Expand Down Expand Up @@ -172,19 +172,28 @@ pub fn local_depen(file_toml: &str) -> bool {
}

fn instalar_paquete(gestor: PackageManager, paquete: &str) -> bool {
let comando_instalacion = Command::new(gestor.comando)
.arg(gestor.intalacion)
.arg(paquete)
.arg(gestor.confirmacion)
.output()
.expect("Ocurrio un error cuando se instalaba las dependencias");
comando_instalacion.status.to_string() == "exit code: 0"
if gestor.confirmacion.is_empty() {
let comando_instalacion = Command::new(gestor.comando)
.arg(gestor.intalacion)
.arg(paquete)
.output()
.expect("Ocurrio un error cuando se instalaba las dependencias");
comando_instalacion.status.to_string() == "exit code: 0"
} else {
let comando_instalacion = Command::new(gestor.comando)
.arg(gestor.intalacion)
.arg(paquete)
.arg(gestor.confirmacion)
.output()
.expect("Ocurrio un error cuando se instalaba las dependencias");
comando_instalacion.status.to_string() == "exit code: 0"
}
}

pub fn install_depen(file_toml: &str) -> bool {
println!("Administrando dependencias...");
let catalogo = [
"apt", "pacman", "dnf", "snap", "flatpak", "zypper", "yum", "apk",
"pkg", "apt", "pacman", "dnf", "zypper", "yum", "apk", "snap", "npm", "flatpak",
];
let mut manpack = Vec::new();

Expand Down Expand Up @@ -264,6 +273,15 @@ pub fn install_depen(file_toml: &str) -> bool {

fn manager(pack: String) -> PackageManager {
match &pack[..] {
"pkg" => PackageManager {
comando: "pkg".to_string(),
buscar: "search".to_string(),
intalacion: "install".to_string(),
dinstalacion: "uninstall".to_string(),
paquete: String::new(),
confirmacion: "-y".to_string(),
root: false,
},
"apt" => PackageManager {
comando: "apt".to_string(),
buscar: "search".to_string(),
Expand Down Expand Up @@ -336,6 +354,15 @@ fn manager(pack: String) -> PackageManager {
confirmacion: String::new(),
root: true,
},
"npm" => PackageManager {
comando: "npm".to_string(),
buscar: "search".to_string(),
intalacion: "install".to_string(),
dinstalacion: "uninstall".to_string(),
paquete: String::new(),
confirmacion: String::new(),
root: true,
},
_ => PackageManager {
comando: "apmpkg".to_string(),
buscar: String::new(),
Expand Down Expand Up @@ -390,8 +417,23 @@ pub fn verificar_arch(file_toml: &str) -> bool {
}
}

/* Puede ayudar en casos de un programador que apenas se adentra en rust
Un ejemplo: yo*/
pub fn type_of<T>(_: T) -> &'static str {
type_name::<T>()
pub fn post_install(file_toml: &str, path: &Path) {
let tomy: Value =
toml::from_str(file_toml).expect("Al parcer no escribiste bien el archivo .ADI");
let instalacion = tomy["instalacion"].as_table().unwrap();
if instalacion.contains_key("post_install") {
println!("{}", "Ejecutando scripts de postinstalacion...".green());
let mut child = Command::new("bash")
.arg(path.join(instalacion["post_install"].as_str().unwrap()))
.spawn()
.expect("Algo fallo al ejecutar el script de postinstalacion");
let _result = child.wait().unwrap();
}
}

pub fn post_install_existe(file_toml: &str) -> bool {
let tomy: Value =
toml::from_str(file_toml).expect("Al parcer no escribiste bien el archivo .ADI");
let instalacion = tomy["instalacion"].as_table().unwrap();
instalacion.contains_key("post_install")
}
4 changes: 3 additions & 1 deletion src/iiabc/core_fn.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

#Variables de cajon
NOMBRE='iiabc'
VERSION='1.2'
VERSION='1.3.0'
TRUE=1
FALSE=0
ROJO='\033[91m'
Expand Down Expand Up @@ -72,9 +72,11 @@ install_depen(){
error "Para instalar dependencias se necesita de ser root"
sudo apmpkg -d $1
#sudo /../apmpkg/target/debug/apmpkg -d $1
#Seleccionado para opcion de desarrollo
else
apmpkg -d $1
#/../apmpkg/target/debug/apmpkg -d $1
#Seleccionado para opcion de desarrollo
fi
}

Expand Down
Loading

0 comments on commit 2ddea5e

Please sign in to comment.