Sunday, December 20, 2020

Instalar certificado SSL gratis

Basado en :

Instalar un certificado SSL gratis de Let’s Encrypt en lighttpd

https://geekland.eu/instalar-certificado-ssl-gratis-lets-encrypt-lighttpd/

 

 #Para añadir el repositorio Backports en Raspbian Stretch hay que ejecutar el siguiente comando en la terminal:

sudo sed -i "$ a\deb http://ftp.debian.org/debian stretch-backports main" /etc/apt/sources.list

sudo apt-get update

sudo apt-get install certbot -t stretch-backports -y --force-yes

sudo apt-get install lighttpd

sudo certbot certonly --webroot -w /var/www/html/ -d dominio.net   (en mi caso fue pbeltran.ddns.net)

 

 

sudo cat /etc/letsencrypt/live/dominio.net/cert.pem /etc/letsencrypt/live/dominio.net/privkey.pem > /etc/letsencrypt/live/dominio.net/web.pem

#CREAR UNA CLAVE PARA REFORZAR LA SEGURIDAD DEL INTERCAMBIO DE CLAVES

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

 

sudo nano /etc/lighttpd/lighttpd.conf

 

#agregar este texto al final

# Activar y configurar https en el servidor

$SERVER["socket"] == ":443" {

  ssl.engine = "enable"

  ssl.pemfile = "/etc/letsencrypt/live/dominio.net/web.pem"

  ssl.ca-file = "/etc/letsencrypt/live/dominio.net/chain.pem"

  server.name = "dominio.net" # Domain Name OR Virtual Host Name

  ssl.use-sslv2 = "disable"

  ssl.use-sslv3 = "disable"

  ssl.use-compression = "disable"

  ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"

  ssl.dh-file = "/etc/ssl/certs/dhparam.pem" 

  ssl.ec-curve = "secp384r1"

}  

 

# forzar peticiones https

$HTTP["scheme"] == "http" {

    # capture vhost name with regex conditiona -> %0 in redirect pattern

    # must be the most inner block to the redirect rule

    $HTTP["host"] =~ ".*" {

        url.redirect = (".*" => "https://%0$0")

    }

}

 

Forzar HTTP Strict Transport Security

setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=15768000; includeSubdomains" )

 

#Acto seguido comprueben que el modulo setenv esté activado. Para ello deberán comprobar que el fichero que estamos editando contenga el siguiente código:

server.modules = (

#....

"mod_setenv",

#....

)

sudo service lighttpd restart

RENOVACIÓN DEL CERTIFICADO SSL DE LET’S ENCRYPT

sudo certbot renew --dry-run

Friday, December 18, 2020

Intento de accesos fallidos en SSHD

basado en 

https://blog.desdelinux.net/como-saber-que-intentos-fallidos-de-ssh-ha-tenido-nuestro-servidor/

https://www.jesusamieiro.com/ssh-ver-los-fallos-en-los-intentos-de-acceso-en-debian/


cat /var/log/auth* | grep Failed

cat /var/log/auth.log | grep Accepted*

Thursday, December 17, 2020

habilitar SSH 2FA de google

basado en: https://www.entredevyops.es/posts/ssh-2fa.html

 

sudo apt-get install -y libpam-google-authenticator

sudo nano /etc/pam.d/sshd

#y agregar auth required pam_google_authenticator.so

sudo nano /etc/ssh/sshd_config

ChallengeResponseAuthentication yes

sudo service sshd restart

#al usuario al cual le quieres activar el 2FA

google-authenticator


Tuesday, December 15, 2020

Enviar correo con adjunto en python

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
 
# Iniciamos los parámetros del script
remitente = 'Origen@gmail.com'
destinatarios = ['destinatarioseparadosPorcoma','dest2','dest3']
asunto = 'Correo de prueba'
cuerpo = 'Este es el contenido del mensaje'
ruta_adjunto = 'D:/Proyectos/Python/Archivo.xlsx'
nombre_adjunto = 'Archivo.xlsx'
 
# Creamos el objeto mensaje
mensaje = MIMEMultipart()
 
# Establecemos los atributos del mensaje
mensaje['From'] = 'origen@gmail.com'
mensaje['To'] = ", ".join(destinatarios)
mensaje['Subject'] = asunto
 
# Agregamos el cuerpo del mensaje como objeto MIME de tipo texto
mensaje.attach(MIMEText(cuerpo, 'plain'))
 
# Abrimos el archivo que vamos a adjuntar
archivo_adjunto = open(ruta_adjunto, 'rb')
 
# Creamos un objeto MIME base
adjunto_MIME = MIMEBase('application', 'octet-stream')
# Y le cargamos el archivo adjunto
adjunto_MIME.set_payload((archivo_adjunto).read())
# Codificamos el objeto en BASE64
encoders.encode_base64(adjunto_MIME)
# Agregamos una cabecera al objeto
adjunto_MIME.add_header('Content-Disposition', "attachment; filename= %s" % nombre_adjunto)
# Y finalmente lo agregamos al mensaje
mensaje.attach(adjunto_MIME)
 
# Creamos la conexión con el servidor
sesion_smtp = smtplib.SMTP('smtp.gmail.com', 587)
 
# Ciframos la conexión
sesion_smtp.starttls()
 
# Iniciamos sesión en el servidor
sesion_smtp.login('origen@gmail.com','ClaveSegura')
 
# Convertimos el objeto mensaje a texto
texto = mensaje.as_string()
 
# Enviamos el mensaje
sesion_smtp.sendmail(remitente, destinatarios, texto)
 
# Cerramos la conexión
sesion_smtp.quit()
 

basado en https://gist.github.com/2624789/d42aaa12bf3a36356342 

Friday, December 11, 2020

Enviar correo por PowerShell con archivo adjunto

recomiendo crear un archivo Ps1 ademas para llamarlo via cmd se debe agregar este codigo

powershell -ExecutionPolicy Bypass -File D:\Proyectos\correo.txt.ps1


Este es el contenido para el archivo PS1

$EmailTo = "CuentaDestino@gmail.com"  

$EmailFrom = "CuentaOrigen@gmail.com"  

$Emailuser = "username@gmail.com"  

$Emailpass = "XXXXXXXXX"  

$Subject = "Subject"  

$Body = "Test Body" 

$SMTPServer = "smtp.gmail.com" 

$filenameAndPath = "D:\BK\17-03-2019-archivos-bk.RAR"  

$SMTPMessage = New-Object System.Net.Mail.MailMessage($EmailFrom,$EmailTo,$Subject,$Body)

$attachment = New-Object System.Net.Mail.Attachment($filenameAndPath)

$SMTPMessage.Attachments.Add($attachment)

$SMTPClient = New-Object System.Net.Mail.SmtpClient($SMTPServer, 587);

$SMTPClient.EnableSSL = $true

$SMTPClient.credentials = New-Object System.Net.NetworkCredential($Emailuser, $Emailpass);

$SMTPClient.Send($SMTPMessage)


Wednesday, November 25, 2020

Dejar base de datos en modo single user

dejar base de datos en modo single user

 USE master;

GO

ALTER DATABASE AdventureWorks2012

SET SINGLE_USER

WITH ROLLBACK IMMEDIATE;

GO

ALTER DATABASE AdventureWorks2012

SET READ_ONLY;

GO

ALTER DATABASE AdventureWorks2012

SET MULTI_USER;

GO

The transaction log for database 'AdventureWorks2012' is full due to 'LOG_BACKUP' - log full

log full dejar en modo single 


ALTER DATABASE AdventureWorks2012  SET RECOVERY SIMPLE

GO




Thursday, November 19, 2020

Reset Onedrive - Reiniciar Onedrive

 

In the Run window, enter: 

Copy and paste

%localappdata%\Microsoft\OneDrive\onedrive.exe /reset

Click OK.

 

Wait 1 minute and then execute the following command:

 

Copy and paste

%localappdata%\Microsoft\OneDrive\onedrive.exe /update

Click OK.

 

If the OneDrive icon doesn’t re-appear after a few minutes, open the Run window again and enter:

Copy and paste

%localappdata%\Microsoft\OneDrive\onedrive.exe

Click OK.

 

I look forward to hearing from you.

 

Wednesday, November 11, 2020

DotNet Core Raspbian buster 10 RPI4 - ARM64

uname -a #para saber que version tenemos en la raspberry.

me sucedio que al instalar la version de net core no podia ejecutar la instalacion de arm32, ya que instale la nueva version de buster arm64

curl -SL -o dotnet.tar.gz https://download.visualstudio.microsoft.com/download/pr/64353333-3080-45f7-a3d5-33e391e4596c/e9d5d53cb318628485e8d1fbd26ec30d/aspnetcore-runtime-3.1.16-linux-arm64.tar.gz

curl -SL -o dotnetSDK.tar.gz https://download.visualstudio.microsoft.com/download/pr/0d0ad29d-da90-42ce-a88d-94f47f9ddc09/bbfafc31b9a7e36140a74e0e157e9e3e/dotnet-sdk-3.1.410-linux-arm64.tar.gz

sudo mkdir -p /usr/share/dotnet

sudo tar -zxf dotnet.tar.gz -C /usr/share/dotnet

sudo tar -zxf dotnetSDK.tar.gz -C /usr/share/dotnet

sudo ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet


#o para variables de entorno

export DOTNET_ROOT=$HOME/usr/share/dotnet

export PATH=$PATH:$HOME/usr/share/dotnet


#si ademas queremos instalar vs code en raspbian 

sudo apt update

sudo apt install code


#crear solucion por consola 

mkdir hello-netcore3.1

cd hello-netcore3.1/

dotnet new console

dotnet run



acá el detalle del SO y DotNet.


Commando :   dotnet --info


.NET Core SDK (reflecting any global.json):

 Version:   3.1.404

 Commit:    470f6754b3

Runtime Environment:

 OS Name:     debian

 OS Version:  10

 OS Platform: Linux

 RID:         debian.10-arm64

 Base Path:   /usr/share/dotnet/sdk/3.1.404/

Host (useful for support):

  Version: 3.1.10

  Commit:  1721e39439

.NET Core SDKs installed:

  3.1.404 [/usr/share/dotnet/sdk]

.NET Core runtimes installed:

  Microsoft.AspNetCore.App 3.1.10 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]

  Microsoft.NETCore.App 3.1.10 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:

  https://aka.ms/dotnet-download

Friday, November 6, 2020

Instalar Antivirus Clam AV en raspberry

sudo apt update

sudo apt install clamav


https://pimylifeup.com/raspberry-pi-clamav/

Instalar VPN en Raspberry

 https://www.pivpn.io/

sudo service openvpn start

sudo service openvpn stop

sudo service openvpn status

systemctl status openvpn@raspberrypi | grep active

netstat -tlnpu | grep openvpn

#si se requiere desintalar

pivpn -u

#para instalar

    curl -L https://install.pivpn.io | bash

Sunday, November 1, 2020

Enviar Correo por Consola ubuntu 18.04

 basado en esta web.

https://techexpert.tips/es/ubuntu-es/enviar-gmail-desde-la-linea-de-comandos-de-ubuntu-linux/

sudo apt-get update

sudo apt-get install ssmtp


sudo nano /etc/ssmtp/ssmtp.conf 

root=correogmail@gmail.com

mailhub=smtp.gmail.com:465

FromLineOverride=YES

AuthUser=correogmail@gmail.com

AuthPass=laclave

UseTLS=YES


(echo "Subject: EquipoLinuxCasaReiniciado"; echo "From: gmail@gmail.com"; echo "To:destino@gmail.com"; echo ""; echo "Reiniciado") | ssmtp destino@gmail.com

Saturday, October 24, 2020

Cambiar URL dentro de la base de datos en PrestaShop 1.7

 Basado en https://www.jesustovar.es/veteasabertu/cambiar-url-dentro-de-la-base-de-datos-en-prestashop-1-7

se debe modificar PS_configuration “PS_SHOP_DOMAIN” y “PS_SHOP_DOMAIN_SSL”, ademas

FLOW_RETURN_URL

si deseo utilizar modo debug dir/config/defines.inc.php 

define(‘_PS_MODE_DEV_’, false);

por la linea:

define(‘_PS_MODE_DEV_’, true);


UPDATE `pszn_shop_url` SET `domain` = 'nuevatienda.com', `domain_ssl` = 'nuevatienda.com' WHERE `pszn_shop_url`.`id_shop_url` = 1;

UPDATE `pszn_configuration` SET `value` = 'nuevatienda.com' WHERE `id_configuration` = 229;
UPDATE `pszn_configuration` SET `value` = 'nuevatienda.com' WHERE `id_configuration` = 230;

configurar la base de datos nueva.

TuSite\app\config\parameters.php
    'database_name' => 'BBDD',
    'database_user' => 'user',
    'database_password' => 'pass',

Wednesday, October 21, 2020

Truncar el log de una base de datos y además disminuir su tamaño.

Una base de datos que pesaba 350 MB tenia un log de 17 GB, el motivo crecimiento sin mantención del archivo de log.

 

Para conocer el tamaño del archivo de datos y de Log se puede ejecutar este comando

SELECT name ,size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMB

FROM sys.database_files;

 

Con este Script se pueden dejar los archivos de Logs a 1 MB (recomiendo hacer el respaldo antes)

ALTER DATABASE $BBDDNAME$

SET RECOVERY SIMPLE; 

GO 

-- Shrink the truncated log file to 1 MB. 

DBCC SHRINKFILE ($BBDDNAME$_log, 1); 

GO 

ALTER DATABASE $BBDDNAME$

SET RECOVERY FULL; 

GO


Saturday, September 5, 2020

lista espacio en disco sin unidades Loop en Linux - df -h | grep -v ^/dev/loop | grep -v ^tmpfs

 df -h | grep -v ^/dev/loop | grep -v ^tmpfs

el comando df  es para mostrar el espacio utilizado
el -h indica la opcion "human" o visualizar los datos en un formato comprensible por humanos

el grep me permite filtrar lo que no quiero ver en este caso agrego v ^/dev/loop para no ver las unidades loop.

esta es la salida con df -h

Filesystem      Size  Used Avail Use% Mounted on
udev            7,8G     0  7,8G   0% /dev
tmpfs           1,6G  3,0M  1,6G   1% /run
/dev/sdb2       219G   21G  187G  11% /
tmpfs           7,8G     0  7,8G   0% /dev/shm
tmpfs           5,0M  4,0K  5,0M   1% /run/lock
tmpfs           7,8G     0  7,8G   0% /sys/fs/cgroup
/dev/loop0      384K  384K     0 100% /snap/gnome-characters/550
/dev/loop1      2,5M  2,5M     0 100% /snap/gnome-calculator/730
/dev/loop2       63M   63M     0 100% /snap/gtk-common-themes/1506
/dev/loop4       97M   97M     0 100% /snap/core/9804
/dev/loop3       56M   56M     0 100% /snap/core18/1885
/dev/loop5      2,3M  2,3M     0 100% /snap/gnome-system-monitor/145
/dev/loop6      256M  256M     0 100% /snap/gnome-3-34-1804/33
/dev/loop7      384K  384K     0 100% /snap/gnome-characters/539
/dev/loop8       97M   97M     0 100% /snap/core/9665
/dev/loop10     141M  141M     0 100% /snap/gnome-3-26-1604/98
/dev/loop9      2,3M  2,3M     0 100% /snap/gnome-system-monitor/148
/dev/loop11     162M  162M     0 100% /snap/gnome-3-28-1804/128
/dev/loop12     1,0M  1,0M     0 100% /snap/gnome-logs/100
/dev/loop13     1,0M  1,0M     0 100% /snap/gnome-logs/93
/dev/loop14     256M  256M     0 100% /snap/gnome-3-34-1804/36
/dev/loop15     161M  161M     0 100% /snap/gnome-3-28-1804/116
/dev/loop16     141M  141M     0 100% /snap/gnome-3-26-1604/100
/dev/loop17      55M   55M     0 100% /snap/core18/1880
/dev/loop18      55M   55M     0 100% /snap/gtk-common-themes/1502
/dev/loop19     2,5M  2,5M     0 100% /snap/gnome-calculator/748
/dev/sdb1       511M  6,2M  505M   2% /boot/efi
/dev/sda1       916G  384G  486G  45% /1tb_local
tmpfs           1,6G   12K  1,6G   1% /run/user/120
tmpfs           1,6G     0  1,6G   0% /run/user/1000

y esta es la salida con el filtro (df -h | grep -v ^/dev/loop | grep -v ^tmpfs)

Filesystem      Size  Used Avail Use% Mounted on
udev            7,8G     0  7,8G   0% /dev
/dev/sdb2       219G   21G  187G  11% /
/dev/sdb1       511M  6,2M  505M   2% /boot/efi
/dev/sda1       916G  384G  486G  45% /1tb_local


Tuesday, June 16, 2020

como clonar cuenta en Tsql

Necesitaba poder clonar la cuenta para deshabilitarla.

el motivo constantes intentos de acceso desde fuera de la red con intencion de usar la cuenta SA.

basado en este link 
https://www.mssqltips.com/sqlservertip/3589/how-to-clone-a-sql-server-login-part-1-of-3/


CREATE LOGIN [Bobby] WITH PASSWORD = 'User$To!Clon3@';
GO 

EXEC sp_addsrvrolemember @loginame = 'Bobby', @rolename = 'securityadmin';
GO 

EXEC sp_addsrvrolemember @loginame = 'Bobby', @rolename = 'dbcreator';
GO 

GRANT ALTER ANY SERVER ROLE TO [Bobby];
GRANT IMPERSONATE ON LOGIN::[sa] TO [Bobby];
GRANT CONTROL SERVER TO [Bobby];
GRANT ALTER ON ENDPOINT::[TSQL Default TCP] TO [Bobby];
GRANT ALTER ANY LOGIN TO [Bobby] WITH GRANT OPTION;
GRANT VIEW DEFINITION ON LOGIN::[sa] TO [Bobby];
GO

posterior a esto renombrar y deshabilitar la cuenta SA.

ALTER LOGIN [sa]
WITH NAME = [old_sa];
go
ALTER LOGIN [old_sa]
DISABLE;
go
--revisar si existe alguna conexion de SA.
SELECT sid, name
FROM sys.sql_logins
WHERE name = 'sa';
go

ademas lo complemente con que ciertos usuarios se puedan conectar nada mas.

https://www.sqlshack.com/prevent-sql-server-login-authentication-scope-using-logon-trigger/

Create TRIGGER Prevent_login
ON ALL SERVER WITH EXECUTE AS 'sa' -- or similar account
FOR LOGON
AS
BEGIN
  DECLARE @LoginName sysname
  DECLARE @LoginType sysname
  
  SET @LoginName = ORIGINAL_LOGIN()
 
  IF(@LoginName NOT IN ('sa', 'otheraccount')) 
  BEGIN
    ROLLBACK; --Disconnect the session
  END
END

si quieres mirar los logs, ejecuta esto.
exec xp_ReadErrorLog 0,1

Tuesday, May 12, 2020

desbloquear cuenta reiniciando la clave - unlock account Tsql

ALTER LOGIN ReadOnlyUser WITH PASSWORD=N'Passwd'  unlock
GO

Monday, April 27, 2020

T-Sql crear acceso solo lectura

use BBDD
go
create login ReadOnly with password='TuPasswd';
GO
create user ReadOnly for login ReadOnlyDPN;
GO
--Acceso ReadOnly
GRANT SELECT  TO ReadOnly WITH GRANT OPTION;
go

Tuesday, April 21, 2020

restaurar BBDD sql server desde SQLCMD


sqlcmd -U UserName -P Passwd -i /tuRuta/elArchivoConLosCommandos.txt

#contenido de elArchivoConLosCommandos.txt
RESTORE DATABASE [BBDD]
FROM DISK = N'/tuRuta/file.bak' WITH  REPLACE, STATS = 5
,MOVE 'NombredelArchivoLDF' TO '/var/opt/mssql/data/ComoQuieresQueQuedeElLDF.mdf'
,MOVE 'NombredelArchivo_log' TO '/var/opt/mssql/data/ComoQuieresQueQuedeEl_log.ldf'
go

#en mi caso es var/opt por que es un Linux

Montar Shared folder Ubuntu desde Consola

sudo apt-get install cifs-utils

sudo mount -t cifs -o username=UserName,vers=1.0 //IP/rutaCompartirodo /DondeloQuieresMontar/

Tuesday, April 7, 2020

Crear cuenta db owner sin acceso a otras bases de datos.

use BaseDeDatosA_CrearLogin;
go
create login LoginName with password='tuclave';
GO
create user usuario for login LoginName;
GO
use BaseDeDatosA_CrearLogin
go
exec sp_addrolemember 'db_owner', 'usuario'
go


para Azure SQL scomo servicio

--en master Azure
drop user usr_
go
drop login usr_
go
--en la BBDD destino
--en master Azure
create login usr_ with password='XXXXXXXX';
GO
--en la BBDD destino
CREATE USER usr_ FROM LOGIN usr_ ;
go
create user usr_ for login usr_ ;
GO
--en la BBDD destino
exec sp_addrolemember 'db_owner', 'usr_ '
go

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

Instalar Samba Server en Raspbian buster 10

#instalamos samba server
sudo apt-get install samba samba-common-bin

#editamos el archivo de configuracion
sudo nano /etc/samba/smb.conf

#smb signing not required solution raspberry pi 4
[RPI4]
min protocol = SMB2_10
max protocol = SMB3_11
path = /usb/Files
writeable=Yes
create mask=0777
directory mask=0777
public=no

#agregamos usuario windows 
sudo adduser usuariowindows
sudo smbpasswd -a usuariowindows

#agregamos clave al usuario windows en este caso usuariowindowsde SMB
sudo smbpasswd -a usuariowindows

#reiniciamos el servicio
sudo systemctl restart smbd 

#por ultimo si queremos que se monte la unidad al inicio 
sudo nano /etc/rc.local 
#o
crontab -e
@reboot sudo mount /dev/sda5 /usb/

#para ver que disco levantar fdisk -l y revisar donde dice NTFS

# y agregamos el comando
sudo mount /dev/sda5 /usb/

#ver listado de usuariso Samba 
 sudo pdbedit -Lw

Instalar LAMP (Linux apache mysql php) en Raspbian buster 10


#actualizamos la raspberry
sudo apt update && sudo apt -y upgrade

#Ahora debemos instalar los paquetes php, php7.3-mysqli y mariadb-server:
sudo apt -y install php php-mysql mariadb-server

#posterior a la instalacion de mariadb es recomendable cambiar la clave del usuario root del Mysql

sudo mysql -u root 

USE mysql
update mysql.user set authentication_string=password('TuClave') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password";
flush privileges;
quit

#reinicamos el servicio
service mysql start
service mysql stop
service mysql restart

#iniciamos nuevamente y ahora te solicitara la clave
mysql -u root -p

#con exit puedes salir de mysql en consola
#para validar que el php quedo instalado correctamente crearemos el script, llamdo info.php, en la ruta /var/www/html/:

sudo nano /var/www/html/info.php
#agregamos
<?php
// Show all information, defaults to INFO_ALL
phpinfo();
?>

#posterior a esto quise instalar PrestaShop y acá todos los paquetes faltantes

sudo apt-get install php-zip
sudo apt -y install libapache2-mod-php
sudo apt-get install php-xml
sudo apt install libapache2-mod-php php-curl
sudo apt-get install php7.3-intl
sudo a2enmod rewrite
#sudo nano /etc/php/7.3/apache2/php.ini # por  ultimo si deseas editar el php.ini
sudo service apache2 restart

how to overclock Rasbperry 4 - rpi4

#editamos el archivo de configuracion de inicio
sudo nano /boot/config.txt

#agregamos la nueva velocidad
arm_freq=1650

# si tiene un espacio o lo que sea no funcionará