Saturday, March 28, 2020

Instalar SVN en Raspberry PI


sudo apt-get update

sudo apt-get install -y apache2 apache2-utils

sudo apt-get install -y subversion subversion-tools libapache2-mod-svn

sudo mkdir /var/lib/svn

sudo svnadmin create /var/lib/svn/SPO

sudo chown -R www-data:www-data /var/lib/svn/SPO/

sudo nano /etc/apache2/mods-enabled/dav_svn.conf

<Location /svn>
 DAV svn
#SVNParentPath /var/lib/svn
 SVNParentPath /1tb_local/svn
 AuthType Basic
 AuthName "Subversion Repository"
 AuthUserFile /etc/apache2/dav_svn.passwd
 Require valid-user
</Location>


#para el respaldo
svnadmin dump personal > personal.dump

#Para Crear usuarios
sudo htpasswd -cm /etc/apache2/dav_svn.passwd pbeltran

systemctl restart apache2

#para Restaurar
svnadmin load /var/lib/svn/SPO < /home/pi/SPO.dump

para validar http://ip/svn/personal/

Basado en:
https://www.itzgeek.com/how-tos/linux/debian/install-apache-svn-subversion-on-debian-9-ubuntu-16-04.html

https://servidordebian.org/es/buster/intranet/version_control/subversion

para el respaldo de visual SVN

svnadmin dump C:\Repositories\MyRepo --file C:\repo.dump

https://www.visualsvn.com/support/topic/00173/#:~:text=Start%20the%20VisualSVN%20Server%20Manager,repository%20dump%20and%20click%20Next.


Saturday, March 21, 2020

desactivar el enterono grafico


#para conocer el entorno grafico
systemctl get-default
#aca lo mas seguro es que diga graphical mode

#con este comando lo dejamos como consola.
systemctl set-default multi-user.target

#para volver a dejarlo con entorno grapfico
systemctl set-default graphical.target

Friday, March 20, 2020

IP fija - Red statica

sudo nano /etc/dhcpcd.conf
# Example static IP configuration:
interface eth0
static ip_address=192.168.1.116/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.1.1
static domain_name_servers=192.168.1.1 8.8.8.8 fd51:42f8:caae:d92e::1


para agregar DNS de movistar
# Example static IP configuration:
interface eth0
static ip_address=192.168.1.35/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.1.1
static domain_name_servers=192.168.1.1 200.28.4.130 200.28.4.129

ubuntu 22

▪️ lsb_release -a ▪️ cd /etc/netplan ▪️ sudo nano 01-network-manager-al.yaml ❗️ Después, líneas a añadir en la terminal: ethernets: enp0s3: dhcp: no addresses: [IP_nueva/24] gateway: 192.68.##.1 nameservers: addresses: [8.8.8.8,8.8.4.4]

Friday, March 6, 2020

cannot drop database because it is currently in use.

-- Script para matar el proceso que no te permite eliminar la base de datos

DECLARE @DatabaseName nvarchar(50)
SET @DatabaseName = N'DatabaseName'

DECLARE @SQL varchar(max)

SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';'
FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId

--Use this to see results
SELECT @SQL
--Uncomment this to run it
EXEC(@SQL)

drop database DatabaseName

Monday, January 13, 2020

Cambiar el puerto de Apache Raspbian

#ejecutas este comando en la consola
sudo nano /etc/apache2/ports.conf

#donde dice
Listen 80
#cambiar por el puerto que deseas

Thursday, January 9, 2020

NetCore 3.1 Raspbian

#actualiza tu raspbian
sudo apt-get update
sudo apt-get upgrade -y

#baja el runtime y el SDK de dotnet core 3.1 
wget https://download.visualstudio.microsoft.com/download/pr/67766a96-eb8c-4cd2-bca4-ea63d2cc115c/7bf13840aa2ed88793b7315d5e0d74e6/dotnet-sdk-3.1.100-linux-arm.tar.gz

wget https://download.visualstudio.microsoft.com/download/pr/60d21925-7f8f-4004-9afe-aebd041d2d4a/0db2946738642d7f88f71f7800522e8c/dotnet-runtime-3.1.0-linux-arm.tar.gz

#creamos la carpeta donde quedará alojado el NetCore
mkdir dotnet-arm32
tar zxf dotnet-sdk-3.1.100-linux-arm.tar.gz -C $HOME/dotnet-arm32
tar zxf dotnet-runtime-3.1.0-linux-arm.tar.gz -C $HOME/dotnet-arm32

#solo puede ejecutar comandos .NET Core dentro de la carpeta dotnet-arm32. Para hacer que el comando "dotnet" se pueda ejecutar en todas partes, debe hacer algo como variables de entorno, que vincularán la carpeta dotnet-arm32 al nivel del sistema.

export DOTNET_ROOT=$HOME/dotnet-arm32
export PATH=$PATH:$HOME/dotnet-arm32

#Crea una app por consola para validar que funciono la instalacion
mkdir hello-netcore3.1
cd hello-netcore3.1/
dotnet new console
#para ejecutar el hola Mundo
dotnet run 
#Creamos la carpeta web
mkdir AspnetApp
cd AspnetApp/

#ahora podemos crear una app web con VS2019 , puede ser cualquiera solo debemos tener cuidado al publicar, ya que debe ser usando Framework-Dependent (FDD) y Portable. ya que esto se ejecutará nativamente en la Raspberry Pi

#en mi caso mi app se llama aspnetapp y para llamarla es colocando:

dotnet aspnetapp.dll 


# si ahora queremos que se auto ejecute 

sudo nano .profile 

# y agregamos esto al final del archivo.

export DOTNET_ROOT=$HOME/dotnet-arm32
export PATH=$PATH:$HOME/dotnet-arm32

# para validar que corre en todas las IPs de la máquina.
dotnet aspnetapp --urls "http://*:8080"

#finalmente hosteamos con nginx.
sudo apt-get install nginx -y
sudo /etc/init.d/nginx start

# respaldamos el archivo, siempre es bueno respaldar.
mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

#creamos el nuevo archivo
sudo nano /etc/nginx/sites-available/default

server {
    listen        80 default_server;
    server_name   _;
    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

Host by Nginx with auto-restart capability
First, install and start Nginx:

sudo nginx -t
sudo nginx -s reload


sudo nano /etc/systemd/system/kestrel-aspnetapp.service

[Unit]
Description=ASP.NET Core 3.1 App - AspNet

[Service]
WorkingDirectory=/home/pi/aspnetApp
ExecStart=/home/pi/dotnet-arm32/dotnet /home/pi/aspnetApp/aspnetapp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-AspnetApp
User=pi
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target


sudo systemctl enable kestrel-aspnetapp.service
sudo systemctl start kestrel-aspnetapp.service
sudo systemctl status kestrel-aspnetapp.service

basado en https://edi.wang/post/2019/9/29/setup-net-core-30-runtime-and-sdk-on-raspberry-pi-4

editado por nuevo script bash de instalacion 
https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.sh

Wednesday, January 1, 2020

Respaldar la MicroSD con Raspbian buster 10 y el comando dd

#creamos el archivo de respaldo
sudo nano respaldo.sh

# podemos crear el archivo sin compromir
DAY=$(date +%A)
sudo dd if=/dev/mmcblk0 of=/home/pi/usb/Files/RPI4_backup-$DAY.img bs=4M status=progress

# podemos crear el archivo o asignando compresion con gzip
DAY=$(date +%A)
sudo dd if=/dev/mmcblk0 conv=sync,noerror bs=4M status=progress  | gzip -c  > /home/pi/usb/Files/RPI4_backup-$DAY.img.gz

#le cambiamos los permisos con chmod
chmod 777 respaldo.sh

#y si ahora quedemos calendarizar el proceso todos los dias a X hora podemos usar crontab
crontab -e

#en este caso el respaldo se ejecuta todos los dias a las 2 am
0 2 * * * /home/pi/./respaldo_rpi.sh

si deseamos truncar la unidad podemos obtener el tamaño maximo con fdisk -l

Device         Boot  Start      End  Sectors  Size Id Type
/dev/mmcblk0p1        8192   532479   524288  256M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      532480 15892479 15360000  7.3G 83 Linux

y aparecerá el tamaño del sector en mi caso 512 bytes.
Disk /dev/mmcblk0: 29.7 GiB, 31914983424 bytes, 62333952 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x027fc595

#para hacer el respaldo 
sudo dd if=/dev/mmcblk0 of=/usb/Files/RPI4_backup.img bs=4M status=progress

#ejemplo de como truncar 
#truncate --size=$[(valor_de_End + 1)*512] imagen.img
truncate --size=$[(15360000 + 1)*512] /usb/Files/RPI4_backup.img

respaldo en otra unidad 
#sudo dd if=/dev/mmcblk0 of=/usb/Files/RPI4_backup.img bs=4M status=progress
path1=/1tb_usb/Files/RPI4_backup.img #asignaNombre
sudo dd if=/dev/mmcblk0 of=$path1 bs=4M status=progress #generaRespaldoFull
sudo truncate --size=$[(15360000 + 1)*512] $path1 #truncaElRespaldo

mejora con pishrink
wget https://githubusercontent.com
chmod +x pishrink.sh
sudo mv pishrink.sh /usr/local/bin/pishrink


#!/bin/bash

# Configuración de rutas
RESPALDO_DIR="/usb500GB/Files"
RESPALDO_NOM="RPI4_backup.img"
PATH_FINAL="$RESPALDO_DIR/$RESPALDO_NOM"

echo "==========================================="
echo " Iniciando respaldo completo de Raspberry Pi"
echo "==========================================="

# 1. Ejecutar dd para crear la imagen completa de 32GB
echo "[1/2] Copiando tarjeta SD a $PATH_FINAL..."
sudo dd if=/dev/mmcblk0 of="$PATH_FINAL" bs=4M status=progress conv=fsync

# Verificar si dd terminó correctamente
if [ $? -eq 0 ]; then
    echo -e "\n[OK] Copia base con dd finalizada con éxito."
    echo "==========================================="
    echo "[2/2] Iniciando optimización con PiShrink..."
    echo "==========================================="

    # 2. Ejecutar PiShrink sobre la imagen recién creada
    sudo pishrink "$PATH_FINAL"

    echo "==========================================="
    echo " ¡Proceso completado con éxito!"
    echo " Tu imagen optimizada está lista en: $PATH_FINAL"
    echo "==========================================="
else
    echo -e "\n[ERROR] El comando dd falló. Se cancela PiShrink."
    exit 1
fi