![](images/telmex-hub.png)
=)
=(
$ rm -rf pkg; mkdir pkg $ (cd pkg && wget http://people.ubuntu.com/~chilicuil/d/bash-completion_2.1-4_all.deb) $ (cd pkg && ar xv bash-completion_2.1-4_all.deb) bash-completion_2.1-4_all.deb x - debian-binary x - control.tar.gz x - data.tar.xz
Los componentes pueden generarse individualmente
$ rm -rf pkg; mkdir pkg $ (cd pkg && echo "2.0" > debian-binary) #primer componente $ (cd pkg && wget https://rawgit.com/chilicuil/learn/master/sh/tools/trash -P usr/bin) $ (cd pkg && tar czf data.tar.gz usr) #segundo $ (cd pkg && cat > control <<END Package: trash-pkg Maintainer: Javier Lopez <m@javier.io> Priority: optional Architecture: all Installed-Size: $(du -ks usr|cut -f 1) Version: 0.1 Description: Rm wrapper around the trash freedesktop specification. END ) $ (cd pkg && tar czf control.tar.gz control) #tercero
Ar genera el paquete, en este exacto orden:
$ (cd pkg && ar -r trash-pkg_0.1_all.deb debian-binary control.tar.gz data.tar.gz)
A tener en cuenta:
$ rm -rf pkg; mkdir pkg $ (cd pkg && wget http://nodejs.org/dist/v0.6.0/node-v0.6.0.tar.gz) $ (cd pkg && tar zxf node-v0.6.0.tar.gz && mv node-*/ nodejs) $ (cd pkg/nodejs && ./configure) $ (cd pkg/nodejs && make) $ (cd pkg/nodejs && sudo checkinstall --fstrans=yes --install=no -D \ --pkgname=node-upstream-0.6.0 --pkgversion=0.6.0)
$ rm -rf pkg; mkdir pkg $ (cd pkg && wget https://rawgit.com/chilicuil/learn/master/sh/tools/trash) $ (cd pkg && echo "Rm wrapper around the trash freedesktop specification." \ > description-pak) $ (cd pkg && sudo checkinstall --fstrans=yes --install=no -D --pkgname=trash-pkg \ --maintainer="Javier Lopez \<m@javier.io\>" --pkgarch=all --pkgversion=0.1 \ --nodoc cp trash /usr/bin/)
$ curl -sSL https://get.rvm.io | \ sed "s/which gp/which xp/g" | $SHELL -s stable --ruby $ sudo apt-get install gcc python-setuptools php-pear npm $ . /home/admin/.rvm/scripts/rvm $ gem install fpm && rm -rf pkg; mkdir pkg $ (cd pkg && fpm -s gem -t deb fpm) Created package {:path=>"rubygem-fpm_1.3.3_all.deb"} $ (cd pkg && fpm -s python -t deb Django) Created package {:path=>"python-django_1.7.4_all.deb"} $ (cd pkg && fpm -s pear -t deb Mail_Mime) Created package {:path=>"php-pear-mail-mime_1.8.9_amd64.deb"} $ (cd pkg && fpm -s npm -t deb i3-style) Created package {:path=>"node-i3-style_0.2.3_amd64.deb"}
$ rm -rf pkg; mkdir pkg $ (cd pkg && wget https://rawgit.com/chilicuil/learn/master/sh/tools/trash) $ (cd pkg && fpm -s dir -t deb \ --description "Rm wrapper around the trash freedesktop specification." \ --prefix /usr/bin -n trash-pkg -v 0.1 -a all trash) Created package {:path=>"trash-pkg_0.1_all.deb"} $ (cd pkg && fpm -s deb -t deb -f --edit trash-pkg_0.1_all.deb) Editar el archivo control Created package {:path=>"trash-pkg_0.1_amd64.deb"}
dpkg -i paquete.deb
, no basta porque dpkg no resuelve dependencias$ dpkg-scanpackages pkg > pkg/Packages $ echo "deb file:~/pkg $(awk -F"=" '/CODENAME/ {print $2}' /etc/*release) main" | \ sudo tee /etc/apt/sources.list.d/repositorio.list $ sudo apt-get update && sudo apt-get install trash-pkg $ #desinstalación completa $ sudo apt-get purge trash-pkg && sudo rm -rf /etc/apt/sources.list.d/repositorio.list $ sudo apt-get update && sudo apt-get install trash-pkg
$ rm -rf pkg/Packages && sudo apt-get purge trash-pkg $ apt-ftparchive packages pkg > pkg/Packages && gzip -9c pkg/Packages > pkg/Packages.gz $ apt-ftparchive contents pkg > pkg/Contents && gzip -9c pkg/Contents > pkg/Contents.gz $ apt-ftparchive release pkg > pkg/Release && gzip pkg/Release > pkg/Release.gz $ sudo kill -9 $(pgrep -f SimpleHTTPServer) 2>&1 >/dev/null $ (cd pkg && sudo python -m SimpleHTTPServer 80)& $ echo "deb http://$(curl ifconfig.pro) /" | \ tee /etc/apt/sources.list.d/repositorio.list $ sudo apt-get update && sudo apt-get install trash-pkg $ #desinstalación completa $ sudo apt-get purge trash-pkg && sudo rm -rf /etc/apt/sources.list.d/repositorio.list $ sudo apt-get update && sudo apt-get install trash-pkg $ sudo kill -9 $(pgrep -f SimpleHTTPServer) 2>&1 >/dev/null
Existen por lo menos 32 combinaciones de procedimientos para crear un paquete
En resumen, empaquetar software para Ubuntu/Debian formalmente es díficil, si pueden, evitenlo. Tienen mejores cosas que hacer.
$ rm -rf pkg; mkdir -p pkg/trash-pkg-0.1/debian $ (cd pkg/trash-pkg-0.1 && \ wget https://rawgit.com/chilicuil/learn/master/sh/tools/trash) $ (cd pkg/trash-pkg-0.1 && cat > debian/changelog <<END trash-pkg (0.1) $(awk -F"=" '/CODENAME/ {print $2}' /etc/*release); urgency=low * Version inicial -- Javier P.L. <m@javier.io> $(date -R) END )
$ (cd pkg/trash-pkg-0.1 && cat > debian/control <<END Source: trash-pkg Section: utils Priority: optional Maintainer: Javier LopezBuild-Depends: Standards-Version: 3.9.4 Package: trash-pkg Architecture: all Depends: dash Description: Rm wrapper around the trash freedesktop specification. Long description END )
$ rm -rf pkg; mkdir pkg/trash-pkg-0.1 $ (cd pkg/trash-pkg-0.1 && cat > debian/copyright <<END Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Files: * Copyright: Copyright (c) 2015, Javier Lopez <m@javier.io> License: GPL-3 Files: debian/* Copyright: Copyright (c) 2015, Javier Lopez <m@javier.io> License: GPL-3 License: GPL-3 On Debian systems, the text of the GPL3 License can be found in '/usr/share/common-licenses/GPL-3'. END )
$ (cd pkg/trash-pkg-0.1 && wget http://git.io/AebN -qO debian/rules ) $ (cd pkg/trash-pkg-0.1 && cat debian/rules)
$ sudo apt-get install fakeroot lintian devscripts $ (cd pkg/trash-pkg-0.1 && dpkg-buildpackage -us -uc -rfakeroot) $ (cd pkg/trash-pkg-0.1 && ls ../) #paquete fuente(dsc) y binario(deb)
$ (cd pkg/trash-pkg-0.1 && debuild -us -uc) #paquete fuente(dsc) y binario(deb)
$ (cd pkg/trash-pkg-0.1 && dpkg-buildpackage -S -us -uc -rfakeroot) #construcción del paquete binario desde un entorno aislado $ (cd pkg/trash-pkg-0.1 && pbuilder build paquete.dsc)
$ sudo apt-get install dh-make $ rm -rf pkg; mkdir -p pkg/trash-pkg-0.1 $ (cd pkg/ && wget https://rawgit.com/chilicuil/learn/master/sh/tools/trash) $ (cd pkg/ && tar -zcf trash-pkg_0.1.orig.tar.gz trash) $ (cd pkg/trash-pkg-0.1 && dh_make --single --packagename trash-pkg) $ (cd pkg/trash-pkg-0.1 && rm debian/*.ex debian/*.EX)
$ (cd pkg/trash-pkg-0.1 && sed -i -e "/Section:/ s/:.*/: utils/" debian/control) $ (cd pkg/trash-pkg-0.1 && sed -i -e "/Description:/ s/:.*/: $(echo \ Rm wrapper around the trash freedesktop specification.)/" debian/control) $ (cd pkg/trash-pkg-0.1 && sed -i -e "/Homepage/d" debian/control) $ (cd pkg/trash-pkg-0.1 && echo "trash usr/bin" > debian/install) $ (cd pkg/trash-pkg-0.1 && wget http://git.io/AIK4 -qO- >>debian/rules ) $ (cd pkg/trash-pkg-0.1 && cat debian/rules) $ (cd pkg/trash-pkg-0.1 && ./debian/rules get-orig-source)
$ (cd pkg/trash-pkg-0.1 && debuild -us -uc) #paquete fuente(dsc) y binario(deb)
$ (cd pkg/trash-pkg-0.1 && debuild -S -us -uc -rfakeroot) #construcción del paquete binario desde un entorno aislado $ (cd pkg/trash-pkg-0.1 && pbuilder build paquete.dsc)
A tener en cuenta:
bzr branch lp:bzr-builder ~/.bazaar/plugins/builder
)# bzr-builder format 0.3 deb-version 1:{time}+git{revno} lp:~usuario/proyecto/trash-pkg nest-part deb lp:~usuario/proyecto/trash-pkg-deb debian debian
Alternativas:
$ sudo apt-get install gdebi unzip $ mkdir ~/.bin && export PATH=$PATH:$HOME/.bin $ rm -rf pkg; mkdir pkg $ (cd pkg && wget $(printf "%s%s" "http://people.ubuntu.com/~chilicuil/" \ "d/zeroinstall-injector_2.3.3-1_$(dpkg --print-architecture).deb")) $ (cd pkg/ && sudo gdebi *.deb) $ (cd pkg/ && wget http://git.io/Asto -O trash.xml && cat trash.xml) $ 0install add trash trash.xml $ command -v trash && cat /home/admin/.bin/trash $ trash -h
$ sudo apt-get install curl $ wget -qO- https://nixos.org/nix/install | $SHELL $ . ~/.nix-profile/etc/profile.d/nix.sh $ rm -rf pkg; mkdir pkg $ (cd pkg && wget -q http://git.io/AZl6 -O trash.nix) $ (cd pkg && cat trash.nix && nix-env -i -f trash.nix) $ command -v trash $ trash -h
usr:<compañía>:<arquitectura>:<versión> #para sistemas completos usr:com.ubuntu:amd64:16.04 #ejemplo directorio /usr en modo lectura root:<máquina>:<compañia>:<arquitectura>:<versión> #instancias de SO root:sup:com.ubuntu:amd64:16.04 #/etc, /var, etc en modo lectura/escritura runtime:<compañía>:<arquitectura>:<versión> #librerias, para usuarios runtime:org.gnome.amd64:3.20.1 #ejemplo /usr en modo lectura framework:<compañía>:<arquitectura>:<versión> #cabeceras, para desarrolladores framework:org.gnome.amd64:3.20.1 #ejemplo /usr/include/ en modo lectura
app:<compañía>:<runtime>:<arquitectura>:<versión> app:io.javier_trash:dash:amd64:0.1 #ejemplo, /opt en modo lectura home:<usuario>:<id>:<gid> home:javier:1000:1000
$ rm -rf pkg; mkdir pkg $ (cd pkg && wget http://people.ubuntu.com/~chilicuil/d/trash.click) $ (cd pkg && ar xv trash.click) trash.click x - debian-binary x - _click-binary x - control.tar.gz x - data.tar.xz
$ sudo apt-get install click && rm -rf pkg; mkdir -p pkg $ (cd pkg && cat > manifest.json <<END { "description": "Trash app", "framework": "ubuntu-sdk-14.04", "hooks": { "trash-app": { "desktop": "trash.desktop" } }, "maintainer": "Javier Lopez", "name": "com.ubuntu.developer.chilicuil.trash", "title": "trash", "version": "0.1" } END )
$ (cd pkg && wget https://rawgit.com/chilicuil/learn/master/sh/tools/trash) $ (cd pkg && cat > trash.desktop <<END [Desktop Entry] Version=1.0 Name=Trash Comment=Rm wrapper around the trash freedesktop specification. Exec=sh trash Icon=utilities-terminal Terminal=true Type=Application Categories=Application; END ) $ click build pkg WARNING:root:Ignoring missing framework "ubuntu-sdk-14.04" Successfully built package in './com.ubuntu.developer.chilicuil.trash_0.1_all.click'.
$ sudo click install --user=$(whoami) --force-missing-framework \ com.ubuntu.developer.$(whoami).trash_0.1_all.click $ sudo click list $ #el registro se hace a través de un proceso de unity8 $ sh /opt/click.ubuntu.com/com.ubuntu.developer.chilicuil.trash/0.1/trash -h $ sudo click unregister --user=$(whoami) com.ubuntu.developer.$(whoami).trash
Javier López - m@javier.io
@chilicuil en twitter/irc
Consulta esta presentación en línea