You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

17 KiB

Desarrollo software

Paquetes esenciales

Estos son los paquetes esenciales para empezar a desarrollar software en Linux.

sudo apt install build-essential checkinstall make automake cmake autoconf \
git git-core git-crypt dpkg wget

Git


NOTA: Si quieres instalar la última versión de git, los git developers tienen un ppa para ubuntu, si quieres tener el git más actualizado:

sudo add-apt-repository ppa:git-core/ppa
sudo apt update
sudo apt upgrade

Control de versiones distribuido. Imprescindible. Para Linux Mint viene instalado por defecto.

Configuración básica de git:

git config --global ui.color auto
git config --global user.name "Pepito Pérez"
git config --global user.email "pperez@mikasa.com"

git config --global alias.cl clone

git config --global alias.st "status -sb"
git config --global alias.last "log -1 --stat"
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %Cblue<%an>%Creset' --abbrev-commit --date=relative --all"
git config --global alias.dc "diff --cached"

git config --global alias.unstage "reset HEAD --"

git config --global alias.ci commit
git config --global alias.ca "commit -a"

git config --global alias.ri "rebase -i"
git config --global alias.ria "rebase -i --autosquash"
git config --global alias.fix "commit --fixup"
git config --global alias.squ "commit --squash"

git config --global alias.cp cherry-pick
git config --global alias.co checkout
git config --global alias.br branch
git config --global core.editor emacs

Emacs

Instalado emacs desde los repos:

sudo aptitude install emacs

Lenguaje de programación D (D programming language)

El lenguaje de programación D es un lenguaje de programación de sistemas con una sintaxis similar a la de C y con tipado estático. Combina eficiencia, control y potencia de modelado con seguridad y productividad.

D-apt e instalación de programas

Configurado d-apt, instalados todos los programas incluidos

sudo wget http://master.dl.sourceforge.net/project/d-apt/files/d-apt.list -O /etc/apt/sources.list.d/d-apt.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys  EBCF975E5BA24D5E
sudo apt update

Instalamos todos los programas asociados excepto textadept que no uso.

sudo apt install dmd-compiler dmd-tools dub dcd dfix dfmt dscanner

DCD

Una vez instalado el DCD tenemos que configurarlo creando el fichero ~/.config/dcd/dcd.conf con el siguiente contenido:

/usr/include/dmd/druntime/import
/usr/include/dmd/phobos

Podemos probarlo con:

dcd-server &
echo | dcd-client --search toImpl

gdc

Instalado con:

sudo aptitude install gdc

ldc

Instalado con:

sudo aptitude install ldc

Para poder ejecutar aplicaciones basadas en Vibed, necesitamos instalar:

sudo apt-get install -y libssl-dev libevent-dev

Emacs para editar D

Instalados los siguientes paquetes desde Melpa

  • d-mode
  • flymake-d
  • flycheck
  • flycheck-dmd-dub
  • flychek-d-unittest
  • auto-complete (desde melpa)
  • ac-dcd

Referencias

C, C++

Instalación de Gnu Global

Para instalar las dependencias, previamente instalamos:

sudo apt install ncurses-dev id-utils exuberant-ctags python-pygments

Con ctags --version nos aseguramos de que se llama a Exuberant y no el ctags que instala Emacs. Si no es así habrá que revisar la definición del PATH

python-pygments no es necesario para C o C++, pero añade funcionalidad a Global (hasta 25 lenguajes de programación más)

No podemos instalar Global desde los repos de Ubuntu, está muy anticuado y genera bases de datos enormes y lentas. Tendremos que compilarlo.

Nos bajamos las fuentes del programa desde la página oficial En el momento de escribir esto se trata de la versión 6.6.4.

Descomprimimos los fuentes y los compilamos con:

./configure --prefix=/usr/local --with-exuberant-ctags=/usr/bin/ctags
make
sudo make install

He comprobado que make uninstall funciona correctamente, las librerías quedan instaladas en /usr/local/lib/gtags y los ejecutables en /usr/local/bin

Rust

Instalamos siguiendo las instrucciones de aqui (Hacemos la instalación por defecto)

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

  stable installed - rustc 1.47.0 (18bf6b4f0 2020-10-07)


Rust is installed now. Great!

To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH
environment variable. Next time you log in this will be done
automatically.

To configure your current shell run source $HOME/.cargo/env

Yo comento la linea del fichero .zprofile por que mi .zshrc ya lee el fichero .profile

Para desinstalar rust bastaría con ejecutar rustup self uninstall

Para actualizar la instalación: rustup update

RLS

Seguimos las instrucciones de la página oficial de LSP y de RLS

rustup update
rustup component add rls rust-analysis rust-src

Algunas utilidades de sistema escritas en Rust

Instalamos:

cargo install tealdeer        # tldr tldr
cargo install du-dust         # tldr dust
cargo install fd-find         # tldr fd
cargo install exa             # tldr exa
cargo install tokei           # tldr tokei
cargo install gitui           # gitui --help
cargo install ripgrep         # tldr rg
cargo install bat             # tldr bat
cargo install lsd             # tldr lsd
cargo install git-delta       # tldr delta
cargo install --locked navi   # navi fn welcome (requires fzf and tldr)
cargo install --locked zoxide # tldr zoxide
cargo install --locked zellij # tldr zellij
cargo install atuin           # tldr atuin

Nota: fzf instalado descargando el binario en ~/.local/bin desde su github

golang

Bajamos el paquete con la última versión desde la página oficial.

Descomprimimos como root en /usr/local/

sudo tar -C /usr/local -xvzf go1.15.7.linux-amd64.tar.gz

Añadimos al path con las siguientes lineas en ~/.profile:

#golang
if [ -d "/usr/local/go" ] ; then
    export GOROOT="/usr/local/go"
    PATH="$PATH:$GOROOT/bin"
fi
if [ -d "$HOME/work/development/gocode" ] ; then
    export GOPATH="$HOME/work/development/gocode"
    PATH="$PATH:$GOPATH/bin"
fi

Instalación de gopls un servidor de LSP para editores:

Desde un directorio que no sea el GOPATH

GO111MODULE=on go get golang.org/x/tools/gopls@latest

golint

go get -u golang.org/x/lint/golint

Utilidades escritas en go

go install github.com/jesseduffield/lazygit@latest
go install github.com/cheat/cheat/cmd/cheat@latest

Processing

Bajamos el paquete de la página web, descomprimimimos en ~/apps/, en las nuevas versiones incorpora un script de instalación que ya se encarga de crear el fichero desktop.

La última versión incorpora varios modos de trabajo, he descargado el modo Python para probarlo.

openFrameworks

Nos bajamos los fuentes para linux 64bits desde la página web del proyecto, y las descomprimimos en un directorio para proceder a compilarlas.

No hay más que seguir las instrucciones de instalación para linux.

La instalación no es demasiado intrusiva si tienes Ubuntu 18 o mayor y una versión reciente del gcc.

En la primera pregunta que nos hace es necesario contestar que no. De lo contrario falla la compilación.

Añade los siguientes paquetes a nuestro sistema

installing OF dependencies
OF needs to install the following packages using apt-get:
curl libjack-jackd2-0 libjack-jackd2-dev freeglut3-dev libasound2-dev libxmu-dev libxxf86vm-dev g++ libgl1-mesa-dev libglu1-mesa-dev libraw1394-dev libudev-dev libdrm-dev libglew-dev libopenal-dev libsndfile-dev libfreeimage-dev libcairo2-dev libfreetype6-dev libssl-dev libpulse-dev libusb-1.0-0-dev libgtk-3-dev libopencv-dev libassimp-dev librtaudio-dev libboost-filesystem-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-libav gstreamer1.0-pulseaudio gstreamer1.0-x gstreamer1.0-plugins-bad gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good gdb libglfw3-dev liburiparser-dev libcurl4-openssl-dev libpugixml-dev libgconf-2-4 libgtk2.0-0 libpoco-dev
Do you want to continue? [Y/n]

No te olvides de compilar también el Project Generator.

Python

En Linux Mint Vanessa ya no tenemos python2 (aunque podemos instalarlo)

Para dejar a python3 como python de sistema instalamos el paquete:

sudo apt install python-is-python3

Después podemos comprobar la versión:

python -V
Python 3.10.6

Paquetes de sistema relacionados con python que instalamos

Son los que ya comentamos en la sección de instalación de zsh, como ya dijimos conviene que instalemos los paquetes de desarrollo:

sudo apt install python3-dev
sudo apt install python3-all-dev
sudo apt install python3-virtualenv python3-virtualenvwrapper python3-virtualenv-clone
sudo apt install pipx
# sudo apt install python3-poetry

Ademas añadimos las siguientes lineas al fichero ~/.profile:

# WORKON_HOME for virtualenvwrapper
if [ -d "$HOME/.virtualenvs" ] ; then
WORKON_HOME="$HOME/.virtualenvs"
fi

Aquí tenemos la referencia de comandos de virtualenvwrapper.

pyenv

Instalamos los pre-requisitos:

sudo apt-get update
sudo apt-get install --no-install-recommends make build-essential \
libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev \
wget curl llvm libncurses5-dev xz-utils tk-dev \
libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

Podemos clonar el repo en nuestro home:

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

Pero también podemos añadir el bundle para Antigen en el fichero .zshrc y dejar que se encargue de todo. (Este es el camino que yo sigo)

antigen bundle mattberther/zsh-pyenv

Añadimos al fichero ~/.profile:

# pyenv
if [ -d "$HOME/.pyenv" ] ; then
    export PYENV_ROOT="$HOME/.pyenv"
    export PATH="$PYENV_ROOT/bin:$PATH"
fi

Y configuramos en ~/.bashrc y en ~/.zshrc (aunque en el último no es necesario tocar nada si usamos el bundle para Antigen):

if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi

Podemos probar que todo funciona con: pyenv install -l

Una vez instalado hay que estudiarse la referencia de comandos

poetry

Podríamos instalar con:

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 -

Dejamos la activación solo en el fichero ~ /.profile, añadiendo las siguientes lineas:

# poetry
if [ -d "$HOME/.poetry"] ; then
    PATH="$HOME/.poetry/bin:$PATH"
fi

Las actualizaciones se realizan con poetry self update

También podríamos instalarlo como un paquete de Ubuntu.

Instalación de bpython y ptpython

bpython instalado desde repos sudo apt install bpython

ptpython instalado en un virtualenv para probarlo

Jupyter

Una instalación para pruebas.

mkvirtualenv -p /usr/bin/python3 jupyter
python -m pip install jupyter

Instalamos python3.11

python3.11 está ya disponible en los repos oficiales.

Para dejarla instalada (yo no lo instalo):

sudo apt install python3.11 python3.11-dev python3.11-venv

neovim

Vamos a probar neovim, ahora mismo la versión de los repos de Ubuntu está actualizada a la penúltima versión (0.4.3). También podemos descargar el appimage desde la página web

Es de esperar que alguna vez vuelvan a tener el neovim disponible en los repos de la aplicación:

sudo apt-add-repository ppa:neovim-ppa/stable
sudo apt update
sudo apt install neovim

Para instalar los módulos de python creamos un virtualev que más tarde añadiremos al fichero init.vim.

mkvirtualenv -p /usr/bin/python3 neovim3
sudo pip install --upgrade neovim
deactivate

Revisar esto


NOTA: El siguiente paso ya no parece necesario, las alternativas se han actualizado con la instalación del neovim.


Para actualizar las alternativas:

sudo update-alternatives --install /usr/bin/vi vi /usr/bin/nvim 60
sudo update-alternatives --config vi
sudo update-alternatives --install /usr/bin/vim vim /usr/bin/nvim 60
sudo update-alternatives --config vim

Install vim-plug

Ejecutamos:

curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

Configuramos el fichero de configuración de nvim (~/.config/nvim/init.vim):

" Specify a directory for plugins
" - For Neovim: ~/.local/share/nvim/plugged
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.local/share/nvim/plugged')

if has('nvim')
  Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
else
  Plug 'Shougo/deoplete.nvim'
  Plug 'roxma/nvim-yarp'
  Plug 'roxma/vim-hug-neovim-rpc'
endif

Plug 'deoplete-plugins/deoplete-jedi'

" Initialize plugin system
call plug#end()

let g:deoplete#enable_at_startup = 1

" set python enviroments
let g:python_host_prog = '/full/path/to/neovim2/bin/python'
let g:python3_host_prog = '/home/salvari/.virtualenvs/neovim3/bin/python'


La primera vez que abramos nvim tenemos que instalar los plugin por comando ejecutando: :PlugInstall

Instalación de dein


Nota: Solo hay que instalar uno de los dos o dein o plug-vim. Yo uso plug-vim así que esto es sólo una referencia.

https://github.com/Shougo/dein.vim

" Add the dein installation directory into runtimepath
set runtimepath+=~/.config/nvim/dein/repos/github.com/Shougo/dein.vim

if dein#load_state('~/.config/nvim/dein')
  call dein#begin('~/.config/nvim/dein')

  call dein#add('~/.config/nvim/dein/repos/github.com/Shougo/dein.vim')
  call dein#add('Shougo/deoplete.nvim')
  call dein#add('Shougo/denite.nvim')
  if !has('nvim')
    call dein#add('roxma/nvim-yarp')
    call dein#add('roxma/vim-hug-neovim-rpc')
  endif

  call dein#end()
  call dein#save_state()
endif

filetype plugin indent on
syntax enable

Firefox developer edition

El rollo de siempre, descargar desde la página web descomprimir en ~/apps y crear un lanzador.

Navegadores cli

Herramientas útiles para depuración web

sudo apt install httpie links

MariaDB

Ahora siempre uso los servidores de base de datos dockerizados. Pero sigue siendo interesante instalar los clientes en nuestro sistema con sudo apt install mariadb-client

Squirrel SQL Client

Bajamos el zip de estándar desde la página web de Squirrel (yo prefiero no usar el instalador)

Como de costumbre descomprimimos en ~/apps y creamos una entrada en nuestro menú de aplicaciones.

Nos descargamos también el java connector para MariaDB. Desde la página oficial. Nos interesa el fichero maria-java-client-2.6.0.jar

Configuramos el driver para que sepa donde está el fichero .jar y ya estamos listos para trabajar.

El fichero squirrel-sql.sh necesita que lo lancemos desde el directorio del script.

R y R-studio

Primero instalamos la última versión de R en nuestro pc:

wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc \
 |gpg --dearmor -o /usr/local/share/keyrings/cran-archive-keyring.gpg

. /etc/os-release
sudo echo "deb [signed-by=/usr/local/share/keyrings/cran-archive-keyring.gpg ] \
https://cloud.r-project.org/bin/linux/ubuntu ${UBUNTU_CODENAME}-cran40/" \
| sudo tee /etc/apt/sources.list.d/cran.list

sudo apt update
sudo apt install r-base

R-studio

Ojo, tenemos R-studio Server y R-studio Desktop, en tu portátil casi seguro que quieres el Desktop y no el Server.

Para R-studio Server descargamos la última versión disponible de R-studio desde la página web

Instalamos con gdebi (basta con clicar sobre el fichero .deb)

Para R-studio Desktop descargamos la última versión disponible desde la página web

Igual que el Server instalamos el paquete del Desktop con gedebi.

Octave

Instalado desde flatpak

sudo flatpak install flathub org.octave.Octave

go Hugo

Generador de sitios web estáticos.

Instalado fichero .deb desde las sección de releases de la página web: hugo github Asegúrate de instalar el Hugo Extended