Nextcloud Server su Raspberry Pi

 

 Nextcloud Server su Raspberry Pi

Nextcloud Server su Raspberry Pi

 

Guida su come installare un server, utilizzando Nextcloud su Raspberry Pi 3/4. A differenza della guida precedente, dove ho utilizzato Nginx come web server, adesso utilizzerò Apache2.  Ci saranno anche 10 consigli per rendere più sicuro il server.

Prerequisiti ed info
  • Raspberry Pi 3/4
  • Raspberry Pi OS Bullseye già installato con accesso ssh.
  • Consiglio di utilizzare rpi-imager per preparare la sd card, e nelle impostazioni abilitare subito ssh, e sopratutto creare un nuovo utente.
  • La guida è stata testata su una installazione pulita di Raspberry Pi OS Lite.
1) Accedere al Raspberry via ssh ed aggiornare
sudo apt update; sudo apt upgrade -y
sudo reboot
2) Installazione php8.0 Mariadb Apache2
sudo apt install apache2 php8.0 php8.0-gd php8.0-sqlite3 php8.0-curl php8.0-zip php8.0-xml php8.0-mbstring php8.0-mysql php8.0-bz2 php8.0-intl php-smbclient php8.0-imap php8.0-gmp libapache2-mod-php8.0 mariadb-server python3-certbot-apache
3) Verifica Apache2
sudo systemctl restart apache2
sudo systemctl status apache2
4) Creazione utente nextcloud e db
sudo mysql -u root -p

ed invio

create database nextcloud_db;
create user nextclouduser@localhost identified by 'YOUR-STRONG-PWD';
grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'YOU-STRONG-PWD';
flush privileges;
exit
5) Download Nextcloud
cd /var/www/
sudo wget -v https://download.nextcloud.com/server/releases/latest.zip
sudo unzip latest.zip
sudo rm latest.zip

creazione  della directory di storage, quest’ultima può essere creata anche all’esterno della cartella Nextcloud o su unità esterna.

sudo mkdir -p /var/www/nextcloud/data
sudo chown -R www-data:www-data /var/www/nextcloud/
sudo chmod 750 /var/www/nextcloud/data
6) Configurazione Apache2
sudo nano /etc/apache2/sites-available/nextcloud.conf

ed incollare questa semplice configurazione, che punterà a http://ip-server/nextcloud/

<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews

<IfModule mod_dav.c>
Dav off
</IfModule>

</Directory>
sudo a2ensite nextcloud.conf
sudo systemctl reload apache2

se si volesse utilizzare invece un proprio dominio:

<VirtualHost *:80>
DocumentRoot /var/www/nextcloud/
ServerName your.domain.com

<Directory /var/www/nextcloud/>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews

<IfModule mod_dav.c>
Dav off
</IfModule>
</Directory>
</VirtualHost>
sudo a2ensite nextcloud.conf
sudo systemctl reload apache2
7) Nextcloud post installazione

 

Nextcloud Server su Raspberry Piandare all’indirizzo del server: http://my-ip-address/nextcloud/

# hostname -I

creare username e password per l’accesso via web, e poi inserire nextclouduser e nextclouddb. I dati di default saranno in /var/www/nextcloud/data, ma si possono anche spostare successivamente.

8) Tuning Apache2

alcune essenziali modifiche:

sudo nano /etc/php/8.0/apache2/php.ini

trovare queste tre stringhe e modificarle da così:

memory_limit = 128M
post_max_size = 8M
upload_max_filesize = 2M

a così:

memory_limit = 512M
post_max_size = 1024M
upload_max_filesize = 1024M
sudo systemctl restart apache2
9) Certificato SSL

nell’esempio sotto, userò un auto-certificato, ma è consigliato un certificato del tipo Let’s Encrypt, come mostrato nella guida precedente.

sudo mkdir -p /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
sudo a2enmod ssl
sudo systemctl restart apache2

trovare queste due stringhe:

sudo nano /etc/apache2/sites-available/default-ssl.conf

e modificarle da così:

SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

a così:

SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
sudo a2ensite default-ssl.conf
sudo systemctl reload apache2
10) Sicurezza

10.1) Installazione e configurazione firewall ufw:

sudo apt install ufw
sudo ufw enable

bloccare tutte le connessioni in ingresso:

sudo ufw default allow outgoing
sudo ufw default deny incoming

aprire solo le porte interessate, come quella ssh o https, ad ogni modo mai utilizzare porte standard:

sudo ufw allow 22
sudo ufw allow 443/tcp

verifica:

sudo ufw status verbose
sudo iptables -S

10.2) Installazione e configurazione fail2ban:

sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

proteggere tutti i servizi usati, utilizzando /etc/fail2ban/jail.local, fail2ban arriva già con dei filtri predefiniti che possono essere abilitati:

ls /etc/fail2ban/filter.d/

esempio:

[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 120
ignoreip = whitelist-IP

# detect password authentication failures
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6

# detect potential search for exploits and php vulnerabilities
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache*/*error.log
maxretry = 6

# detect Apache overflow attempts
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache*/*error.log
maxretry = 2

# detect failures to find a home directory on a server
[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/apache*/*error.log
maxretry = 2
sudo systemctl restart fail2ban 
sudo fail2ban-client status

10.3) Trusted Domain

indicare solo gli ip ed i domini che possono accedere:

sudo nano /var/www/nextcloud/config/config.php
'trusted_domains' => 
array (
0 => '192.168.1.122',
1 => 'my-domain.com',

10.4) Forzare la connessione via SSL

sudo nano /etc/apache2/sites-available/000-default.conf

sostituire http con https:

<VirtualHost *:80>
ServerAdmin admin@example

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

10.5) Aggiornamenti di sicurezza automatici giornalieri:

sudo apt install unattended-upgrades
sudo nano /etc/apt/apt.conf.d/02periodic

inserire:

APT::Periodic::Enable "1";
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "1";
APT::Periodic::Verbose "2";

aggiornare:

sudo unattended-upgrades -d

10.6) Sudo DEVE sempre chiedere la password:

sudo nano /etc/sudoers.d/010_pi-nopasswd

diventa da così:

YOUR-USER ALL=(ALL) NOPASSWD: ALL

a così:

YOUR-USER ALL=(ALL) PASSWD: ALL

10.7) Mysql in sicurezza

sudo mysql_secure_installation
Enter current password for root (enter for none): Press Enter
Set root password? [Y/n] Y 
Remove anonymous users? [Y/n] Y 
Disallow root login remotely? [Y/n] Y 
Remove test database and access to it? [Y/n] Y 
Reload privilege tables now? [Y/n] Y

10.8) SSH in sicurezza

cambiare subito la porta di default e verificare che non sia abilitato il login come root, ma soprattutto usare una chiave ssh:

sudo nano /etc/ssh/sshd_config
#PermitRootLogin prohibit-password
Port 2223
10.9) Backup

backup da eseguire periodicamente su supporti esterni ed in remoto. Si può utilizzare rsync (guida), tar (guida), dd (guida), scp (guida), lsyncd (guida).

10.10) VPN

il sistema più sicuro per accedere da remoto è tramite vpn, se si ha un router che supporta ipSec o Wireguard (fritzbox 7590) il tutto è semplice, in alternativa si può creare un server vpn, utilizzando openvpn o wireguard

Nextcloud Server su Raspberry Pi

enjoy 😉

Raspberry Pi backup veloce sd card

 

Raspberry Pi backup veloce sd card

Raspberry Pi backup veloce sd card

 

Guida su come ottenere un backup veloce e funzionante del proprio sistema. Per chi utilizza un Raspberry Pi, con tutto il sistema installato su sd card, è buona regola avere un backup completo, per poter ovviare velocemente ad una ipotetica perdita/rottura dei dati sulla sd card. A difesa delle sd card, io posso tetimoniare, essendo possessore di tanti Raspberry Pi, fin da  maggio 2012, che se si acquistano le migliori, difficilmente si rompono. Io per i vari utilizzi, ho speso di più per la sd card che per il Raspberry Pi. I metodi di backup a cui io mi riferisco utilizzano i comandi dd e rsync.  Il classico metodo più utilizzato e sicuro è il seguente:

 

Metodo 1)

Estrarre dal Raspberry Pi la sd card di origine e creare un file img

sudo dd bs=4M if=/dev/sdx of=PiOS.img

Ripristinare su sd card di backup:

sudo dd bs=4M if=PiOS.img of=/dev/sdx

Con il metodo sopra i tempi sono più lunghi, poichè dd, clona tutto. Esistono altri metodi simili, aggiungendo la compressione, ma a me non soddisfano.

 

Metodo 2)

Questo metodo è quello che utilizzo io, e può essere eseguito sia a caldo, sia estraendo la sd card clonandola. Per questo metodo si utilizza dd, solo per quanto riguarda le tabelle delle partizioni, e la partizione di boot, tutto il resto lo farà rsync copiando velocemente il contenuto della rootfs.

Inserire su pc la  sd card da cui effettuare il backup e raccogliere informazioni:

sudo fdisk -l

 

Raspberry Pi backup veloce sd card

 

 

esistono 2 partizioni, nel mio caso, /dev/sdc1 di boot ed /dev/sdc2 rootfs. Bisogna prendere nota delle 2 voci start, 8192 e 534528, cosicchè da creare una identica tabella delle partizioni, contenendo tutti i files di boot:

sudo dd bs=4k count=$((8192/8)) if=/dev/sdc | gzip >boot-img.gz
sudo dd bs=4k count=$((534528/8)) if=/dev/sdc | gzip >rootfs-img.gz

Adesso dobbiamo copiare in una cartella il contenuto di /dev/sdc2 utilizzando rsync:

sudo apt install rsync
sudo mkdir /mnt/{dati,rootfs}
sudo mount /dev/sdc2 /mnt/dati/
sudo rsync -aHAXSP /mnt/dati/ /mnt/rootfs/
sudo umount /dev/sdc2

Basta. Finito. Tempo totale meno di 3 minuti:

 

Raspberry Pi backup veloce sd card

 

Inserire la sd card di backup:

Azzerare tabella partizioni:

sudo dd count=1 bs=512 if=/dev/zero of=/dev/sdc

creazione della tabella delle partizione come da sd card origine:

sudo zcat boot-img.gz | sudo dd bs=4k iflag=fullblock of=/dev/sdc
sudo partprobe /dev/sdc
sudo zcat rootfs-img.gz | sudo dd bs=4k iflag=fullblock of=/dev/sdc
sudo partprobe /dev/sdc

formattare la seconda partizione in ext4:

sudo mkfs.ext4 -L rootfs /dev/sdc2

mount e copia :

sudo mount /dev/sdc2 /mnt/dati/
sudo rsync -aHAXSP /mnt/rootfs/ /mnt/dati/

umount ed attendere, può volerci qualche minuto:

sudo umount /dev/sdc2

 

Tempo totale 15 minuti circa. A questo punto se tutto è andato bene, abbiamo una copia perfetta della sd card di origine. Questo metodo funziona anche in presenza di database.

Raspberry Pi backup veloce sd card

 

enjoy 😉

 

Creare usb Windows 10 UEFI con Debian 10 e WoeUSB-fronted-wxgtk

Creare una usb bootable Windows 10 da Gui Debian
Creare usb Windows 10 in UEFI con Debian 10 e WoeUSB-fronted-wxgtk

Guida su come creare una usb bootable con Windows 10 in UEFI mode, direttamente da Debian 10 utilizzando Woeusb-fronted-wxgtk come Gui. Precedentemente avevo già fatto una guida utilizzando Woeusb, ma ci sono state delle modifiche. Ancora prima un’altra guida, per lo stesso scopo, ma utilizzando solamente il terminale. Questo metodo è molto più semplice e veloce:

$ sudo apt install devscripts equivs git python3-pip
$ git clone https://github.com/WoeUSB/WoeUSB-frontend-wxgtk.git
$ cd WoeUSB-frontend-wxgtk/
$ ./setup-development-environment.bash
$ mk-build-deps
$ sudo dpkg -i woeusb-build-deps_*
$ sudo apt install -f
$ dpkg-buildpackage -uc -b
$ sudo dpkg -i ../woeusb*.deb
$ sudo apt install -f
Creare usb Windows 10 in UEFI con Debian 10 e WoeUSB-fronted-wxgtk

enjoy 😉

 

Nextcloud Letsencrypt su Raspberry Pi 4

Nextcloud Letsencrypt su Raspberry Pi 4

Nextcloud Letsencrypt su Raspberry Pi 4

Guida su come installare Nextcloud con Letsencrypt su Raspberry Pi 4, utilizzando Raspberry Pi OS Buster. A differenza della guida precedente, dove utilizzavo Owncloud ed apache2 come web server, adesso utilizzerò Nextcloud ed nginx.

Prerequisiti ed info
  • Raspberry Pi 4/3
  • Raspberry Pi OS Buster già installato ed accesso ssh
  • Il raspberry dovrà avere come dominio/hostname l’equivalente di example.com. Questo può essere modificato in /etc/hostname e poi riavviare.
  • Il vostro ip pubblico dovrà puntare quindi al dominio, nel caso non si avesse un ip pubblico, utilizzare un servizio di DNS.
  • Assicurarsi prima, di aprire la porte 80  verso il proprio server, altrimenti non si potranno ottenere i certificati. Successivamente bisognerà aprire la 8443.
  • La guida è stata testata su una installazione pulita di Raspberry Pi OS Lite.
1) Accedere al Raspberry via ssh ed Installazione Nginx web server:
$ sudo su
$ su -
# apt install nginx -y
# systemctl start nginx
# systemctl enable nginx

verifica nginx:

# systemctl status nginx
2) Installazione php7.3
# apt install -y php7.3-gd php7.3-json php7.3-mysql php7.3-curl php7.3-intl php-imagick php7.3-zip php7.3-xml php7.3-mbstring php7.3-fpm php7.3-mysql php7.3-bz2 php7.3-bcmath php7.3-gmp

modifica di 2 php.ini

# nano /etc/php/7.3/fpm/php.ini
# nano /etc/php/7.3/cli/php.ini

in entrambi i files andiamo a decommentare e ad aggiornare:

date.timezone = Europe/Rome

salavare ed uscire e passare alla modifica di www.cond

# nano /etc/php/7.3/fpm/pool.d/www.conf

e decommentare le righe come sotto:

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
# systemctl restart php7.3-fpm
# systemctl enable php7.3-fpm
3) Installazione e configurazione MariaDB Server
# apt install mariadb-server -y

settare password root MariaDB

# mysql_secure_installation
Enter current password for root (enter for none): Press Enter
Set root password? [Y/n] Y 
Remove anonymous users? [Y/n] Y 
Disallow root login remotely? [Y/n] Y 
Remove test database and access to it? [Y/n] Y 
Reload privilege tables now? [Y/n] Y

creazione user e db per nextcloud:

# mysql -u root -p

inserire password e poi i 5 comandi sotto:

create database nextcloud_db;
create user nextclouduser@localhost identified by 'IN_PASSWORD';
grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'IN_PASSWORD';
flush privileges;
exit
4) Certificato SSL Letsencrypt
# apt install certbot -y
# systemctl stop nginx
# certbot certonly --standalone -d example.com

se è andato tutto bene si otterrà:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2021-03-07. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
5) Download Nextcloud
# apt install wget unzip zip -y
# cd /var/www/
# wget -q https://download.nextcloud.com/server/releases/latest.zip
# unzip latest.zip
# chown -R www-data:www-data /var/www/nextcloud
6) Configurazione Virtual Host
# nano /etc/nginx/sites-available/nextcloud

ed incollare dentro, con le rispettive modifiche:

upstream php-handler {
#server 127.0.0.1:9000;
server unix:/var/run/php/php7.3-fpm.sock;
}

server {
listen 80;
listen [::]:80;
server_name example.com;
# enforce https
return 301 https://$server_name:8443$request_uri;
}

server {
listen 8443 ssl http2;
listen [::]:8443 ssl http2;
server_name example.com;

# Use Mozilla's guidelines for SSL/TLS settings
# https://mozilla.github.io/server-side-tls/ssl-config-generator/
# NOTE: some settings below might be redundant
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

# Add headers to serve security related headers
# Before enabling Strict-Transport-Security headers please read into this
# topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;

# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;

# Path to the root of your installation
root /var/www/nextcloud;

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

# The following rule is only needed for the Social app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/webfinger /public.php?service=webfinger last;

location = /.well-known/carddav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}

# set max upload size
client_max_body_size 512M;
fastcgi_buffers 64 4K;

# Enable gzip but do not remove ETag headers
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;

location / {
rewrite ^ /index.php;
}

location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
deny all;
}
location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}

location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
# Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
# Enable pretty urls
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}

location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}

# Adding the cache control header for js, css and map files
# Make sure it is BELOW the PHP block
location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
# Add headers to serve security related headers (It is intended to
# have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into
# this topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;

# Optional: Don't log access to assets
access_log off;
}

location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
try_files $uri /index.php$request_uri;
# Optional: Don't log access to other assets
access_log off;
}
}

salvare ed uscire. Poi fare un paio di modifiche:

# ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
# nano /etc/nginx/nginx.conf

e decommentare la linea sotto:

server_names_hash_bucket_size 64;

fare un test di nginx:

# nginx -t

se non ci sono errori avremo un output come sotto:

root@example:/var/www# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# systemctl restart nginx
# systemctl restart php7.3-fpm
7) Nextcloud post installazione

Nextcloud Letsencrypt su Raspberry Pi 4 andare all’indirizzo del server:

# hostname -I

creare username e password per l’accesso via web, e poi inserire nextclouduser e nextcloud_db. Nel caso di porta diversa della 443, è meglio inserirla come in figura sopra. I dati di default saranno in /var/www/nextcloud/data. Ma conviene sempre tenerli all’esterno della sd-card. Esempio con usb esterna.

8) Creazione della cartella di storage e relativi permessi:
# mkdir /media/nextcloud-usb
# groupadd www-data
# usermod -a -G www-data www-data
# chown -R www-data:www-data /media/nextcloud-usb
# chmod -R 775 /media/nextcloud-usb

adesso abbiamo bisogno di conoscere UUID del disco usb e configurare /etc/fstab per il montaggio automatico:

# blkid
# nano /etc/fstab

ed aggiungere qualcosa del genere in /etc/fstab:

UUID=f9kjhg70-0784-4eaa-9cc5-4ctrewc62275 /media/nextcloud-usb ext4 defaults 0
# reboot

al riavvio verificare se la usb esterna è stata montata correttamente:

$ df -h

Questa guida consente di avere un server cloud personale, ma bisogna ricordarsi che bisognerà proteggerlo, e quindi integrare delle robuste policy di sicurezza, come fail2ban, iptables, ufw, ecc ecc.

Nextcloud Letsencrypt su Raspberry Pi 4

enjoy 😉

Onedrive su Debian 10 con rclone

Onedrive su Debian 10 con rcloneOnedrive su Debian 10 con rclone

Guida su come connettere il proprio account OneDrive, da linea di comando, utilizzando rclone.

Installazione di rclone:

$ sudo apt install rclone fuse

Configurazione:

$ rclone config

output:

edmond@edmondbox:~$ rclone config
2020/05/25 18:25:55 NOTICE: Config file "/home/edmond/.config/rclone/rclone.conf" not found - using defaults
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> myonedrive
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / A stackable unification remote, which can appear to merge the contents of several remotes
\ "union"
2 / Alias for a existing remote
\ "alias"
3 / Amazon Drive
\ "amazon cloud drive"
4 / Amazon S3 Compliant Storage Providers (AWS, Ceph, Dreamhost, IBM COS, Minio)
\ "s3"
5 / Backblaze B2
\ "b2"
6 / Box
\ "box"
7 / Cache a remote
\ "cache"
8 / Dropbox
\ "dropbox"
9 / Encrypt/Decrypt a remote
\ "crypt"
10 / FTP Connection
\ "ftp"
11 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
12 / Google Drive
\ "drive"
13 / Hubic
\ "hubic"
14 / JottaCloud
\ "jottacloud"
15 / Local Disk
\ "local"
16 / Microsoft Azure Blob Storage
\ "azureblob"
17 / Microsoft OneDrive
\ "onedrive"
18 / OpenDrive
\ "opendrive"
19 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
20 / Pcloud
\ "pcloud"
21 / SSH/SFTP Connection
\ "sftp"
22 / Webdav
\ "webdav"
23 / Yandex Disk
\ "yandex"
24 / http Connection
\ "http"
Storage> 17
** See help for onedrive backend at: https://rclone.org/onedrive/ **

Microsoft App Client Id
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_id>
Microsoft App Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret>
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> y
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth
Log in and authorize rclone for access
Waiting for code...
Got code

Autorizzare rclone come app sicura:

Onedrive su Debian 10 con rclone

Choose a number from below, or type in an existing value
1 / OneDrive Personal or Business
\ "onedrive"
2 / Root Sharepoint site
\ "sharepoint"
3 / Type in driveID
\ "driveid"
4 / Type in SiteID
\ "siteid"
5 / Search a Sharepoint site
\ "search"
Your choice> 1
Found 1 drives, please select the one you want to use:
0: (personal) id=72593143d3aac403
Chose drive to use:> 0
Found drive 'root' of type 'personal', URL: https://onedrive.live.com/?cid=72593143d3aac403
Is that okay?
y) Yes
n) No
y/n> y
--------------------
[myonedrive]
token = {"access_token":"EwBoA8l6BAAUO9chh8cJscQLmU+LSWpbnr0vmwwAAcTsM8GrYTxDxI5BKZdaB","expiry":"2020-05-25T19:26:56.661526715+02:00"}
drive_id = 72593143d3aac403
drive_type = personal
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name Type
==== ====
myonedrive onedrive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q
edmond@edmondbox:~$

creazione punto di mount e montaggio utilizzando fuse:

$ mkdir ~/onedrive
$ rclone mount --daemon --vfs-cache-mode writes myonedrive: ~/onedrive

al posto di writes si può utilizzare full, per scaricare tutto in locale. La locazione del file di configurazione si trova col comando:

$ rclone config file

Come alternativa esiste il pacchetto deb di OneDrive che si trova in Debian Sid, ma che io non ho testato.

Onedrive su Debian 10 con rclone

enjoy 😉

Clonazione e backup di una partizione con rsync

Clonazione e backup di una partizione con rsyncClonazione e backup di una partizione con rsync

Per motivi lavorativi, e di sicurezza, ho sempre diverse partizioni su ssd separati. Quindi dopo aver installato la mia Debian, ed averla personalizzata con tutto quello che mi serve, subito dopo clono il tutto in pochi secondi e passaggi. Questo procedimento, utilizzando rsync, è fantastico in quanto lo esegui direttamente dal sistema che stai utilizzando. Nell’esempio sotto, la mia partizione dove andrò a clonare, è identificata come /dev/sda10.

$ su -
# apt install rsync

umount partizione EFI e mount partizione target

# umount /dev/sda1
# mount /dev/sda10 /mnt/
# rsync -aAXvP / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /mnt/

lanciare blkid per identificare UUID della partizione target e modificarla:

Clonazione e backup di una partizione con rsync

# blkid
# nano /mnt/etc/fstab

poi:

# umount /dev/sda10
# update-grub

Clonazione e backup di una partizione con rsync

enjoy 😉

 

Systemback 1.9.4 per Debian 10 Ubuntu 20.04

Systemback 1.9.4 per Debian 10 Ubuntu 20.04

Systemback 1.9.4 per Debian 10 Ubuntu 20.04

Nei giorni passati in lockdown per covid-19, ho dato un occhiata a systemback-1.9.3, adattandolo per farlo funzionare su Debian Buster 10, ed Ubuntu 20.04. Ho risolto alcuni bug, come la dimensione della distro installata tramite live, ed altre cosette. Ho fatto dei test su: Debian 10, Ubuntu 20.04, AV Linux e sembra funzionare perfettamente. Su derivate di Debian 10 si riscontrano dei problemi: come l’impossibilità di avvio in modalità UEFI. I pacchetti, ed il codice sorgente sono su Github e su Sourceforge.

Installazione da Sourceforge:

Download

$ cd Downloads/
$ tar xvf systemback-install_pack-1.9.4.tar.gz
$ cd systemback-install_pack-1.9.4/
$ chmod +x install.sh
$ sudo ./install.sh

 

Installazione Github:

$ git clone https://github.com/fconidi/systemback-install_pack-1.9.4.git
$ cd systemback-install_pack-1.9.4/
$ chmod +x install.sh
$ sudo ./install.sh

Systemback 1.9.4 per Debian 10 Ubuntu 20.04

BUG

con Mate Desktop ci sono problemi con caja, dove si è impossibilitati ad aprire il file manager e dove le cartelle,  non si aprono e non si vedono sul desktop. Praticamente ci sono dei problemi di link simbolici, quindi bisogna ricrearli:

Montare la partizione dove si è installato la copia Debian based. Ipotizzando che la partizione sia /dev/sda3:

# su -
# mount /dev/sda3 /mnt/
# cd /mnt/
# rm -rf bin/
# ln -s usr/bin/ bin
# rm -rf lib/
# ln -s usr/lib/ lib
# rm -rf lib32/
# ln -s usr/lib32/ lib32
# rm -rf lib64/
# ln -s usr/lib64/ lib64
# rm -rf libx32/
# ln -s usr/libx32/ libx32

Systemback 1.9.4 per Debian 10 Ubuntu 20.04

enjoy 😉

 

Backup incrementale con Tar

 

Backup incrementale con Tar

 

Backup incrementale con Tar è il titolo di questa guida, ma il sottotitolo potrebbe essere: come dormire sonni tranquilli facendo un backup incrementale, sicuro e veloce. Ci sono diversi strumenti con cui fare un backup dei propri dati, sia con programmi grafici, come luckyBackup, deja-dup o systemback-1.9.3, sia con strumenti da linea di comando, già presenti di default in Gnu-Linux. Tempo fa avevo gia fatto una guida sull’utilizzo di rsync come strumento di backup, invece questa guida mostrerà come ottenere un backup incrementale usando Tar.

Creazione di cartelle, sotto cartelle e files per testare il backup:

$ mkdir -p big-data/{backup,restore}
$ cd big-data/backup/
$ mkdir {1..4}
$ man ls > file1
$ man wc > file2
$ man tar > file3
$ man mv > file4
$ ls

output ls:

edmond@debianbox:~/Desktop/big-data/backup$ ls
1 2 3 4 file1 file2 file3 file4
$ cd ..
$ ls

output ls:

edmond@debianbox:~/Desktop/big-data$ ls
backup restore

Backup generale:

$ tar -czvg snapshot-file -f backup.tar.gz backup

output:

edmond@debianbox:~/Desktop/big-data$ tar -czvg snapshot-file -f backup.tar.gz backup
tar: backup: Directory is new
tar: backup/1: Directory is new
tar: backup/2: Directory is new
tar: backup/3: Directory is new
tar: backup/4: Directory is new
backup/
backup/1/
backup/2/
backup/3/
backup/4/
backup/file1
backup/file2
backup/file3
backup/file4

output ls:

edmond@debianbox:~/Desktop/big-data$ ls
backup backup.tar.gz restore snapshot-file

come si può vedere tutte le cartelle ed i files sono stati clonati nell’ archivio backup.tar.gz, mentre il file chiamato snapshot-file, si occuperà di tenere traccia dei cambiamenti. A questo punto il passo successivo sarà quello di andare ad inserire nella cartella di backup originale, altre cartelle e files così da testare il backup incrementale.

$ mkdir backup/{5..8} 
$ man sed > backup/file5 
$ ls backup/

output:

edmond@debianbox:~/Desktop/big-data$ ls backup/
1 2 3 4 5 6 7 8 file1 file2 file3 file4 file5

per ottenere un backup incrementale il comando da eseguire è come quello sopra, l’unica differenza sarà quella di personalizzare il nome del backup, in base alla data oppure con dei numeri:

$ tar -czvg snapshot-file -f 1-backup.tar.gz backup

output:

edmond@debianbox:~/Desktop/big-data$ tar -czvg snapshot-file -f 1-backup.tar.gz backup
tar: backup/5: Directory is new
tar: backup/6: Directory is new
tar: backup/7: Directory is new
tar: backup/8: Directory is new
backup/
backup/1/
backup/2/
backup/3/
backup/4/
backup/5/
backup/6/
backup/7/
backup/8/
backup/file5

per vedere le differenze dei due backup:

$ tar -tvf backup.tar.gz
$ tar -tvf 1-backup.tar.gz

output:

edmond@debianbox:~/Desktop/big-data$ tar -tvf backup.tar.gz
drwxr-xr-x edmond/edmond 41 2019-02-28 20:31 backup/
drwxr-xr-x edmond/edmond 1 2019-02-28 20:30 backup/1/
drwxr-xr-x edmond/edmond 1 2019-02-28 20:30 backup/2/
drwxr-xr-x edmond/edmond 1 2019-02-28 20:30 backup/3/
drwxr-xr-x edmond/edmond 1 2019-02-28 20:30 backup/4/
-rw-r--r-- edmond/edmond 7823 2019-02-28 20:30 backup/file1
-rw-r--r-- edmond/edmond 2026 2019-02-28 20:31 backup/file2
-rw-r--r-- edmond/edmond 45323 2019-02-28 20:31 backup/file3
-rw-r--r-- edmond/edmond 2989 2019-02-28 20:31 backup/file4
edmond@debianbox:~/Desktop/big-data$ tar -tvf 1-backup.tar.gz
drwxr-xr-x edmond/edmond 60 2019-02-28 20:51 backup/
drwxr-xr-x edmond/edmond 1 2019-02-28 20:30 backup/1/
drwxr-xr-x edmond/edmond 1 2019-02-28 20:30 backup/2/
drwxr-xr-x edmond/edmond 1 2019-02-28 20:30 backup/3/
drwxr-xr-x edmond/edmond 1 2019-02-28 20:30 backup/4/
drwxr-xr-x edmond/edmond 1 2019-02-28 20:50 backup/5/
drwxr-xr-x edmond/edmond 1 2019-02-28 20:50 backup/6/
drwxr-xr-x edmond/edmond 1 2019-02-28 20:50 backup/7/
drwxr-xr-x edmond/edmond 1 2019-02-28 20:50 backup/8/
-rw-r--r-- edmond/edmond 11183 2019-02-28 20:51 backup/file5

Ripristino Backup nella cartella restore:

$ tar -xvf 1-backup.tar.gz -C restore/

enjoy 😉

 

Video utilizzo Systemback-1.9.3

 

Video utilizzo Systemback-1.9.3

Questo video mostra come installare una copia del proprio OS, utilizzando Systemback-1.9.3. Nell’esempio sopra, utilizzo Ubuntu 18-04, installato in EFI mode. Nel caso si trattasse di una installazione in legacy mode, assicurarsi che il pacchetto grub-pc-bin sia installato correttamente, sopratutto se si parte da chiavetta usb live.

enjoy 😉

Systemback 1.9.3 per Debian 9 Ubuntu 17-10 18-04

Systemback 1.9.3 per Debian 9 Ubuntu 17-10 18-04

update 26/01/2019

Systemback 1.9.3 per Debian 9 Ubuntu 17-10 18-04

Nuovo aggiornamento per Systemback che arriva alla versione 1.9.3, aggiungendo i pacchetti e la compatibilità con Ubuntu 17-10 ed Ubuntu 18-04. In questa versione, oltre a qualche vezzo, ed alcuni bug fix, ho aggiunto anche il supporto per SSD NVMe, anche se al momento funziona meglio se si ha già una partizione pronta all’uso. Tenendo conto che è un lavoro che faccio a tempo perso ogni feed e commento saranno bene accetti.

DOWNLOAD SYSTEMBACK-1.9.3

DOWNLOAD SOURCE

poi:

$ cd Downloads/
$ tar xvf systemback-install_pack-1.9.3.tar.xz
$ cd systemback-install_pack-1.9.3/
$ sudo apt-get install unionfs-fuse live-boot
$ sudo apt-get install grub2-common grub-efi-amd64-bin grub-pc-bin
$ sudo ./install.sh
$ sudo apt-get install -f 

DEBIAN 32 BIT

cercando di installare Systemback-1.9.3 su Debian Stretch 32 bit e non solo, si verifica l’errore di versione per i pacchetti: libqt5core5a (>= 5.10.0) e libqt5gui5. Si risolve aggiornando i pacchetti dai repo testing:

# nano /etc/apt/sources.list

ed aggiungere:

deb http://ftp.it.debian.org/debian/ testing main non-free contrib

poi affinchè non si aggiorni tutto il sistema, andiamo a creare un file , dove diremo che, la priorità dei pacchetti è solo quella della versione della distro installata, e cioè in questo caso stable/stretch:

# nano /etc/apt/apt.conf.d/99defaultrelease

ed incollare dentro:

APT::Default-Release "stable";

a questo punto siamo pronti ad installare la versione dei pacchetti aggiornati:

# apt update
# apt install -t testing libqt5core5a libqt5gui5

poi si potrà proseguire con l’installazione di systemback-1.9.3

Systemback 1.9.3 per Debian 9 Ubuntu 17-10 18-04

enjoy 😉