File-sharing met een FTP server in je thuisnetwerk

Dit is en alleen lezen onderdeel.
Gebruikersavatar
Mogenblue
Senior
Senior
Berichten: 132
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

File-sharing met een FTP server in je thuisnetwerk

Berichtdoor Mogenblue » Do 14 Jan 2021, 13:09

File-sharing en synchronisatie met een FTP server in je thuisnetwerk


Voor een thuisnetwerk kan een ftp server een goede oplossing zijn om bestanden te delen en te synchroniseren.
Met een redelijke computer en router kun je gemakkelijk de maximale snelheid uit je ethernet kabel halen en dan kom je op ruim 100-120 MB/sec bij de overdracht van bestanden. Veel sneller als dat zal het niet worden op een 1Gb netwerk.

Er komt wel het een en ander bij kijken om je thuisnetwerk op te zetten en de juiste software te installeren.
Daar is al veel over geschreven en daarom geef ik hier alleen een paar links om je daarmee verder te helpen.
In deze post zal ik me vooral concentreren op een aantal scripts en methoden waarmee je hele mappen met een ftp server kan synchroniseren.


Eerst de links voor je netwerk en de software.

Netwerk
Om te beginnen kan het wenselijk zijn om je netwerk met een draadloze router uit te breiden omdat er steeds meer apparaten bijkomen. Voor het uitbreiden van je netwerk is een switch het meest aangewezen apparaat qua kostprijs en eenvoud, maar voor draadloze apparaten of om het bereik van je draadloze netwerk uit te breiden heb je toch wel een router nodig.
Op WikiHow staat een heel goed artikel hoe je een router aan je netwerk moet toevoegen zodat de computers en mobiele apparatuur allemaal voor elkaar zichtbaar blijven:
How to Cascade Routers
De clou is dat je op de hulp router eerst de dhcp server uitschakelt en vervolgens niet de wan poort maar een lan poort gebruikt om naar de hoofdrouter te verbinden. Als je de dhcp server niet uitschakelt interfereert die met die van de hoofdrouter. Dan gaat je net op slot en kan je helemaal overnieuw beginnen.

FTP server
Er zijn verschillende ftp servers. In deze twee artikelen wordt de installatie besproken van vsFTP:
How To Set Up Your FTP Server In Linux
How to setup and use FTP Server in Ubuntu Linux
Op mijn computer werkt de server in stand alone mode en dat gaat prima.

Firewall
Met een server alleen ben je er nog niet want je moet er ook voor zorgen dat de clients toegang hebben tot de computer waarop de ftp server draait.
Dat betekent dat je de firewall moet aanpassen. Een heel handig hulpmiddel hiervoor is UFW.
How To Setup a Firewall with UFW on an Ubuntu and Debian Cloud Server
Voor ftp zou je de poorten 20 en 21 kunnen openzetten. In mijn eigen ervaring vind ik het beter werken om specifieke ip adressen toegang te geven tot de server. Dat betekent dan wel dat je statische ip adressen in je netwerk moet hebben. Dat configureer ik allemaal in de router samen met IP&MAC binding voor extra veiligheid.
Met UFW is het heel eenvoudig om individuele ip adressen van de lokale apparatuur toegang te geven tot de server. Je kunt op de server een client met adres 192.168.1.183 toegang geven via de regel
sudo ufw allow from 192.168.1.183
Meer is het niet.

FTP clients
Als dat allemaal werkt kun je verbinding maken met de server met een ftp client zoals het welbekende Filezilla. Je kunt de server ook gewoon vanuit je bestandbeheerder benaderen.
Access FTP server using the Nemo File Manager in Linux Mint
Vanaf een smartphone of tablet vind ik CX Explorer een heel goede app om met de ftp server te verbinden.
Dat is allemaal voor handmatig verbinden en bladeren op je thuis server.

FTP client scripting
Voor het automatisch uploaden, downloaden of synchroniseren van hele mappen heb je een ander programma nodig. Daarvoor komt LFTP om de hoek kijken. Hiermee kun je scripts maken om met een ftp server te synchroniseren.
How to automatically sync the contents of a local folder with the contents of a ftp folder?
LFTP - sophisticated file transfer program
Met dit programma geef je aan je ftp netwerk een flinke powerboost. Dit is het programma dat ik gebruik om een client te synchroniseren met de server.

Deze programma's kunnen allemaal gewoon vanuit het programmabeheer worden geïnstalleerd. Daar heb je dus geen sudo apt-get meer voor nodig.
Laatst gewijzigd door Mogenblue op Do 14 Jan 2021, 13:54, 1 keer totaal gewijzigd.
Gebruikersavatar
Mogenblue
Senior
Senior
Berichten: 132
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

Re: File-sharing met een FTP server in je thuisnetwerk

Berichtdoor Mogenblue » Do 14 Jan 2021, 13:10

Automatische synchronisatie - uploaden

Dan nu de scripts voor automatische synchronisatie.
We beginnen met twee scripts voor het uploaden van mappen van een lokale computer naar de ftp server.

Je hebt een shell script dat je vanuit de bestandsbeheerder kan starten en een lftp script waarmee de communcatie met de ftp server wordt uitgevoerd.

Het shell script noemen we uploaden-ftp.sh.

Code: Selecteer alles

#!/bin/bash

echo .
echo .
echo .

(

# push
# Uploaden van local naar remote

lftp -f "/home/mogenblue/scripts/uploaden-lftp.sh"

echo '# Synchronisatie voltooid.'
sleep 1

) |
zenity --progress \
--title="Uploaden naar de FTP server - push" \
--text="Verbinding maken ..." \
--percentage=0 \
--auto-close --no-cancel --width=600

echo klaar.

# --percentage=0 \
# --percentage=0 --pulsate \

Het lftp script noemen we uploaden-lftp.sh.

Code: Selecteer alles

# set commands
# breek de procedure af als er geen verbinding met de server wordt gemaakt
set net:timeout 5
set net:max-retries 2
set net:reconnect-interval-multiplier 1
set net:reconnect-interval-base 2
set cmd:fail-exit true
# set aantal parallelle transfers
set mirror:parallel-transfer-count 5
set mirror:parallel-directories true


# inlog gegevens staan in /home/mogenblue/.netrc
open 192.168.1.123 −−env−password


lcd /home/mogenblue
cd /home/mogenblue


echo "10"
echo '# Synchroniseren Documenten ... 1/6'
mirror --reverse --delete Documenten
wait all

echo "20"
echo '# Synchroniseren Downloads ... 2/6'
mirror --reverse --delete Downloads
wait all

echo "30"
echo '# Synchroniseren Scripts ... 3/6'
mirror --reverse --delete Scripts
wait all

echo "40"
echo '# Synchroniseren Afbeeldingen ... 4/6'
mirror --reverse --delete Afbeeldingen
wait all

echo "60"
echo '# Synchroniseren Muziek ... 5/6'
mirror --reverse --delete Muziek
wait all

echo "80"
echo "# Synchroniseren Video's ... 6/6"
mirror --reverse --delete "Video's"
wait all


echo "100"
cache flush
close -a

Beide scripts moeten als programma kunnen worden uitgevoerd:
Rechtsklik op het bestand voor het contextmenu.
Selecteer Eigenschappen.
Ga naar de tab Rechten.
Zet een vinkje bij Uitvoeren: Toestaan dat bestand wordt uitgevoerd als programma.

Het shell script dient dus eigenlijk alleen om het lftp script aan te roepen en om de communicatie naar het scherm te verzorgen over de voortgang van het lftp script. Door het lftp script kun je selectief aangeven welke mappen je wil synchroniseren en in welke volgorde dat moet gebeuren. Als je weet dat bepaalde mappen veel tijd nodig kunnen hebben kun je de kleinere mappen eerder laten verwerken als dat beter uitkomt.

Op zich kunnen beide scripts worden samengevoegd maar dan krijg je een probleem met mapnamen waar een quote in zit zoals de map Video's. Vanwege die quote moet de mapnaam in dubbele quotes worden gezet omdat quotes een speciale betekenis hebben in scripts. Dan krijg je dus "Video's".
Zodra je het lftp script in het shell script opneemt moet je dit echter ook in dubbele quotes zetten. Dat wordt dan zoiets als

lftp -f "

# inlog gegevens staan in /home/mogenblue/.netrc
open 192.168.1.123 −−env−password

lcd /home/mogenblue
cd /home/mogenblue

...

mirror --reverse --delete "Video's"
wait all


echo '100'
cache flush
close -a

"


Als je dan bij de video map met de dubbele quotes aankomt wordt het script feitelijk afgesloten en opnieuw geopend. Daardoor raak je de verbinding met de server kwijt. Dus dat werkt niet. Daarom is het noodzakelijk om het lftp script in een apart bestand te zetten want dan gaat de uitvoering wel goed.

Uit het lftp script blijkt verder dat er een apart bestand wordt gebruikt voor het inloggen op de ftp server. Dat is het bestand .netrc en het staat in de user home directory.
In dit bestand staat het adres van de machine waar moet worden ingelogd, de username en het password.
machine 192.168.1.123 login mogenblue password LangSterkWachtWoord

Voor dit bestand ga je als volgt te werk.
Ga naar je home directory en maak een leeg bestand aan met de naam dotnetrc. Open het en vul de gegevens in. Sluit het en pas de rechten aan via het contextmenu in de bestandsbeheerder. Dit bestand moet alleen voor de eigenaar toegankelijk zijn. De groep en anderen moeten helemaal geen toegang hebben.
Vervolgens hernoem je het bestand naar .netrc en laat het beeld verversen. Het bestand zou nu niet meer zichtbaar moeten zijn.
Hierdoor heb je je inloggegevens iets beter beveiligd.


Het lftp script begint met een aantal set commando's om het gedrag van lftp aan te passen door middel van omgevingsvariabelen. Deze variabelen kunnen ook in het configuratie bestand in de /etc map worden aangepast. Het bestand /etc/lftp.conf bevat de instellingen voor alle users.
Toch geef ik er de voorkeur aan om deze specifieke settings in het script zelf op te nemen. Want zodra je een backup maakt van je gegevens worden deze instellingen automatisch meegenomen omdat je natuurlijk ook de scripts meeneemt. Dat geldt niet voor de instellingen in de /etc map.
Als je dan het systeem opnieuw installeert na bijvoorbeeld een upgrade ben je alle instellingen kwijt als je het in de /etc map had aangepast.
Als je ze in het script zelf zet zijn ze ook makkelijker aan te passen naar je eigen voorkeuren.

De net variabelen zorgen ervoor dat het proces niet te lang blijft hangen als de server uit staat.
De mirror variabelen geven aan hoeveel bestanden tegelijk kunnen worden overgestuurd en op welke manier. Het versnelt de overdracht.
De standaard werking van het mirror commando is downloaden van ftp naar local. Voor uploaden moet je dan de --reverse optie toevoegen.

Het zenity commando is zo ingesteld dat je een voortgangsbalk ziet die vanuit het lftp script stapsgewijs wordt bijgewerkt. Als je wil kun je van die voortgangsbalk een pulserende balk maken door de optie --pulsate toe te voegen. Dat is zo'n blokje dat van links naar rechts heen en weer gaat. Aan het eind van het script is die optie als comment toegevoegd.
Laatst gewijzigd door Mogenblue op Do 14 Jan 2021, 13:16, 1 keer totaal gewijzigd.
Gebruikersavatar
Mogenblue
Senior
Senior
Berichten: 132
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

Re: File-sharing met een FTP server in je thuisnetwerk

Berichtdoor Mogenblue » Do 14 Jan 2021, 13:10

Automatische synchronisatie - downloaden

De scripts voor uploaden zijn bijna één-op-één te kopiëren voor het downloaden van ftp naar lokaal. In het ftp script voor downloaden moet het zenity commando wel op een meer complexe manier worden aangeroepen om het op een alternatieve manier, als root, te kunnen laten werken.
In het lftp script verandert alleen de optie --reverse die niet nodig is om te downloaden.

Het shell script voor downloaden, downloaden-ftp.sh:

Code: Selecteer alles

#!/bin/bash

#------------------------------------------------------------------------------
# vul hier je eigen username en userid in
# userid is in een terminal op te vragen met id -u username
UserName='mogenblue'
UserID='1000'
#------------------------------------------------------------------------------

echo .
echo .
echo .

(

# pull
# downloaden van remote naar local

lftp -f "/home/mogenblue/scripts/downloaden-lftp.sh"

echo '# Synchronisatie voltooid.'
sleep 1

) |
sudo -u $UserName DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UserID/bus zenity --progress \
--title="Downloaden van de FTP server - pull" \
--text="Verbinding maken ..." \
--percentage=0 \
--auto-close --no-cancel --width=600

echo klaar.

# --percentage=0 \
# --percentage=0 --pulsate \

Het lftp script voor downloaden, downloaden-lftp.sh:

Code: Selecteer alles

# set commands
# breek de procedure af als er geen verbinding met de server wordt gemaakt
set net:timeout 5
set net:max-retries 2
set net:reconnect-interval-multiplier 1
set net:reconnect-interval-base 2
set cmd:fail-exit true
# set aantal parallelle transfers
set mirror:parallel-transfer-count 5
set mirror:parallel-directories true


# inlog gegevens staan in /home/mogenblue/.netrc
open 192.168.1.123 −−env−password


lcd /home/mogenblue
cd /home/mogenblue


echo "10"
echo '# Synchroniseren Documenten ... 1/6'
mirror --delete Documenten
wait all

echo "20"
echo '# Synchroniseren Downloads ... 2/6'
mirror --delete Downloads
wait all

echo "30"
echo '# Synchroniseren Scripts ... 3/6'
mirror --delete Scripts
wait all

echo "40"
echo '# Synchroniseren Afbeeldingen ... 4/6'
mirror --delete Afbeeldingen
wait all

echo "60"
echo '# Synchroniseren Muziek ... 5/6'
mirror --delete Muziek
wait all

echo "80"
echo "# Synchroniseren Video's ... 6/6"
mirror --delete "Video's"
wait all


echo "100"
cache flush
close -a

Deze scripts moeten ook als programma kunnen worden uitgevoerd, zie boven.

Met deze vier scripts kun je dus automatisch hele mappen uploaden en downloaden naar en van de ftp server in je thuisnetwerk.
Dan gaan we nu kijken naar de methoden om dat te doen.
Gebruikersavatar
Mogenblue
Senior
Senior
Berichten: 132
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

Re: File-sharing met een FTP server in je thuisnetwerk

Berichtdoor Mogenblue » Do 14 Jan 2021, 13:11

Methoden voor synchronisatie

Je kan op drie manieren synchroniseren met de ftp server:
- handmatig: je start elke keer handmatig een script voor uploaden of downloaden;
- op een tijdsinterval: je kunt om de vier uur of op bepaalde tijden synchroniseren;
- bij bepaalde gebeurtenissen: met name bij het ontwaken uit de slaapstand en het overgaan naar de slaapstand toe kun je de mappen laten synchroniseren.


Handmatige synchronisatie
Je kunt voor de eenvoud een snelkoppeling of een snelstarter op het buroblad plaatsen naar de ftp scripts. Het verschil tussen die twee is dat een programmastarter ook in het menu en op de werkbalk kan worden geplaatst. Je kunt voor allebei een ander icoon kiezen dan de standaard. Voor ftp en lftp zijn aparte iconen beschikbaar.


Synchronisatie op tijdsinterval
Je kunt er ook voor kiezen om te synchroniseren op bepaalde tijden of om de zoveel uur. Daarvoor kun je je eigen crontab aanpassen met crontab -e.
Als je bijvoorbeeld elke 3 uur wilt uploaden kun je de volgende regel gebruiken
* */3 * * * /home/mogenblue/scripts/uploaden-ftp.sh
Als je om 11 uur en om 17 uur wilt uploaden kun je dat in één regel schrijven met
* 11,17 * * * /home/mogenblue/scripts/uploaden-ftp.sh
Zo kun je bijvoorbeeld ook om de dag synchroniseren.
Crontab is erg flexibel in het maken van schema's. Met deze crontab guru kun je eenvoudig een schema opstellen.


Synchronisatie op gebeurtenis
Tenslotte kun je ook synchroniseren op bepaalde gebeurtenissen en dan met name op het moment van ontwaken uit de slaapstand van de computer en op het moment dat de computer naar de slaapstand toe gaat. Dit zijn zeer uitgekiende momenten om te synchroniseren omdat je nog niets gedaan hebt wanneer de computer ontwaakt en je helemaal klaar bent wanneer de computer naar de slaapstand toe gaat.
Dit is de methode die ik zelf gebruik.

Voor het synchroniseren bij het ontwaken gebruik ik twee scripts. In principe kun je ze in elkaar schuiven, maar ik vind het handiger om ze te splitsen voor het geval ik aan het tweede iets wil veranderen. En als je een backup maakt worden al je scripts meegenomen, maar niet de scripts die in de systeemmappen staan. Die moet je bij een herinstallatie opnieuw daar in zetten.

Het eerste script staat in de map /etc/network/if-up.d en het heet downloaden-network-up:

Code: Selecteer alles

#!/bin/sh

# dit bestand hoort in de map
# /etc/network/if-up.d
# van de ftp client en moet root rechten hebben als eigenaar en groep
# het wordt uitgevoerd zodra het netwerk up is

#-------------------------------------------------------------------------------------------------------------

# sync user files
sudo -u mogenblue /home/mogenblue/scripts/downloaden-network-up.sh

Het enige wat dit script dus doet is het tweede aanroepen. Het bijzondere van dit script is dat het automatisch wordt uitgevoerd door het systeem bij het ontwaken uit de slaapstand.
Dit bestand moet als eigenaar en groep root hebben en het moet uitvoerbaar zijn.
Je kunt dit script aanmaken in je lokale scripts map zodat je er een backup van hebt. Dan moet je het daarna naar de juiste map kopiëren en de rechten aanpassen.
Rechts klik voor het context menu
klik op kopiëren
navigeer naar de root directory
rechts klik op /etc map
selecteer openen als beheerder
voer je wachtwoord in
ga naar de map network
ga naar de map if-up.d
plak het bestand in deze map
rechts klik voor het context menu op het bestand
kies eigenschappen
verander onder de tab rechten user en groep naar root.

Het tweede script staat gewoon in je scripts map en heet dus downloaden-network-up.sh:

Code: Selecteer alles

#!/bin/bash

# controleer of het script al is uitgevoerd na ontwaken, een keer is genoeg en verwijder dan het controle bestand
if [ -e test-network-up.txt ]
then
rm test-network-up.txt
exit
fi

# synchroniseren met ftp server, downloaden
source /home/mogenblue/scripts/downloaden-ftp.sh

# maak controle bestand om te voorkomen dat het script nog een keer wordt uitgevoerd NA uitvoeren synchronisatie
echo "controle bestand" > test-network-up.txt

Dit bestand moet ook uitvoerbaar zijn en mag verder gewoon de rechten van de user hebben.

Het tweede bestand controleert of de synchronisatie is uitgevoerd en voorkomt dat het nog keer gebeurt. Het blijkt namelijk dat het systeem dat twee keer doet bij het ontwaken. Als het nog niet is uitgevoerd wordt gewoon het script om te downloaden aangeroepen en worden de laatste wijzigingen van de server naar de client gedownload.

Omdat het download script bij het ontwaken oorspronkelijk door root wordt aangeroepen moet het zenity commando op een meer complexe manier worden gestart anders weet het systeem niet waar de output voor het scherm naartoe moet. Daarom staat daar die complexe regel in met username en userid.


Tenslotte het synchroniseren bij het overgaan naar de slaapstand. Uploaden naar de ftp server.
Daarvoor hebben we maar één extra bestand nodig: uploaden-suspend.sh

Code: Selecteer alles

#!/bin/bash

# dit script moet worden uitgevoerd op de ftp client
# icoon night-light-symbolic


# synchroniseren met ftp, uploaden
source /home/mogenblue/scripts/uploaden-ftp.sh

# controleer of het testbestand bestaat en verwijder het dan
if [ -e test-network-up.txt ]
then
rm test-network-up.txt
fi

# slaapstand activeren
systemctl suspend

Dit script doet drie dingen:
1 het roept het eigenlijke synchronisatie script voor uploaden aan
2 het verwijdert het controle bestand dat voorkomt dat downloaden bij ontwaken twee keer wordt uitgevoerd
3 en het roept de slaapstand van de computer aan.

Zoals alle andere scripts moet het uitvoerbaar zijn.
Je kunt het met een snelkoppeling of een snelstarter op het buroblad zetten. Het aanbevolen icoon is boven aan het script genoemd.

Dit script kan ook via een sneltoets aan je toetsenbord worden verbonden:
Rechts klik op de werkbalk
kies Systeeminstellingen
ga naar Toetsenbord
kies de tab Sneltoetsen
druk op de knop Voeg aangepaste sneltoets toe
vul een naam in, bijvoorbeeld uploaden-suspend
selecteer dan bij de opdracht het script uploaden-suspend.sh
klik op toevoegen
klik dan in het onderste venster toetsenbordbindingen op de eerste regel niet-toegewezen
klik er nogmaals op om een toets te selecteren
druk op de pauze toets op het toetsenbord om deze aan de opdracht te binden
sluit het venster

Klaar.
Druk op de pauze toets om te controleren of het systeem inderdaad gaat uploaden en daarna de slaapstand aanroept.
Bij het ontwaken zou dan het download script moeten worden aangeroepen.

De client computer is nu helemaal geconfigureerd om automatisch te synchroniseren met de ftp server in je netwerk.

Voorheen gebruikte ik een nas om tussen twee computers te synchroniseren. Dit was een instapmodel en daarom erg traag. Daarom ging ik al snel uitkijken naar een snellere nas en de mogelijkheden om er zelf een bouwen. Uiteindelijk realiseerde ik mij dat ik eigenlijk alleen maar file sharing en synchronisatie nodig had. Dus alles wat een nas nog meer te bieden heeft is voor mijn situatie gewoon overbodig. Daarom ben ik mij gaan verdiepen in de mogelijkheden van een ftp server in mijn thuisnetwerk en hoe ik de andere computer daarmee kan laten synchroniseren. Het resultaat is dat mijn computers nu supersnel synchroniseren en dat ik ook geen lange wachttijd heb als de server uit staat.
Ik ben dus heel erg tevreden met mijn nieuwe situatie. Misschien heb jij er ook iets aan.


Veel succes
Frits
Gebruikersavatar
emvedeesje
Held
Held
Berichten: 467
Lid geworden op: Zo 17 Jun 2018, 11:03
Locatie: Aalter-Ovl-Belgie

Re: File-sharing met een FTP server in je thuisnetwerk

Berichtdoor emvedeesje » Vr 15 Jan 2021, 11:17

Proficiat Frits voor deze uitdieping.
Zelf gebruik ik het (momenteel) niet, doch ik noteer dit topic, voor in geval van...

Synchroniseren doe ik voorlopig met Megasync.
2 computers verbind ik momenteel via SSH om iets over te kopiëren.
Synchro Backups gebeuren hier via FreeFileSync, zowel naar usb-drive als google-drive.
En dat werkt tot gehele voldoening.

groeten van Michael
Mint cinnamon fan
Mint cinnamon -20.1 (vorige linux: Mint-19 Mint-18 Mint-17 Ubuntu-16 Ubuntu-14 Ubuntu-12)
Gebruikersavatar
Mogenblue
Senior
Senior
Berichten: 132
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

Re: File-sharing met een FTP server in je thuisnetwerk

Berichtdoor Mogenblue » Vr 15 Jan 2021, 15:35

Dank je Michael.

Ja, het is geen beveiligde verbinding, maar voor een lokaal netwerk vind ik dat niet zo erg. Er wordt niets over het grote internet gestuurd. En de wifi verbindingen zijn wel versleuteld. Dus ik vind het zo voorlopig wel mooi genoeg.
De snelheid spreekt me erg aan. Het is meestal binnen 30 seconden gepiept, als het niet nog sneller is. Het werkt gewoon als een speer.

Te zijner tijd ga ik wel eens naar SFTP kijken. Ik denk dat dat maar een klein stapje extra is vanaf ftp.
De meeste moeite had ik met het integreren van die tweede router. Het heeft lang geduurd voor ik daar een oplossing voor gevonden had. Maar nu is het toch gelukt.

Groetjes,
Frits
Gebruikersavatar
Mogenblue
Senior
Senior
Berichten: 132
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

Re: File-sharing met een FTP server in je thuisnetwerk

Berichtdoor Mogenblue » Vr 22 Jan 2021, 10:10

Script update versie 1.1


Ik heb de scripts een klein beetje aangepast om het duidelijker te maken of de overdracht echt gelukt is of dat het proces niet verder is gekomen dan verbinding maken omdat de server uitstaat.

In de vorige versie is de laatste melding altijd dat de overdracht is voltooid. Ook als er geen upload of download heeft plaatsgevonden. Ik heb die melding naar het lftp script verplaatst zodat die alleen wordt getoond als de overdracht echt is uitgevoerd.

Want als het proces geen verbinding kan maken wordt het lftp script meteen afgebroken en gaat de uitvoering verder in het shell script.

Ook laat ik het proces wat langer proberen om verbinding te maken met de server; 3 pogingen ipv 2. Dat is niet om alsnog verbinding proberen te maken, maar om het bericht op het scherm langer te laten staan zodat het duidelijker is voor de gebruiker dat er geen verbinding is.
Je kunt daar ook 4 of 5 van maken. Als de server wel aanstaat wordt de verbinding meestal binnen 1 seconde gemaakt en start de overdracht.
Eén poging duurt 5 seconden met een interval van 2 seconden tussen 2 pogingen.

Verder heb ik nog een extra script toegevoegd om naar de slaapstand te gaan zonder te uploaden: no-upload.sh. Voor als je er een rotzooitje van gemaakt hebt en niet wil dat dat ook op de server terecht komt. 8)


Het shell script uploaden-ftp.sh:

Code: Selecteer alles

#!/bin/bash

echo .
echo .
echo .

(

# push
# Uploaden van local naar ftp server

lftp -f "/home/mogenblue/Scripts/uploaden-lftp.sh"

sleep 3

) |
zenity --progress \
--title="Uploaden naar de FTP server - push" \
--text="Verbinding maken ..." \
--percentage=0 \
--auto-close --no-cancel --width=600

echo klaar.

# --percentage=0 \
# --percentage=0 --pulsate \

Het lftp script uploaden-lftp.sh:

Code: Selecteer alles

# set commands
set net:timeout 5
set net:max-retries 3
set net:reconnect-interval-multiplier 1
set net:reconnect-interval-base 2
# breek de procedure af als er geen verbinding met de server wordt gemaakt
set cmd:fail-exit true
set cache:enable true
# set aantal parallelle transfers
set mirror:parallel-transfer-count 5
set mirror:parallel-directories true


# inlog gegevens staan in /home/mogenblue/.netrc
open 192.168.1.120 −−env−password


lcd /home/mogenblue
cd /home/mogenblue


echo '10'
echo '# Synchroniseren Documenten ... 1/6'
mirror --reverse --scan-all-first --delete Documenten
wait all

echo '20'
echo '# Synchroniseren Downloads ... 2/6'
mirror --reverse --scan-all-first --delete Downloads
wait all

echo '30'
echo '# Synchroniseren Scripts ... 3/6'
mirror --reverse --scan-all-first --delete Scripts
wait all

echo '40'
echo '# Synchroniseren Afbeeldingen ... 4/6'
mirror --reverse --scan-all-first --delete Afbeeldingen
wait all

echo '60'
echo '# Synchroniseren Muziek ... 5/6'
mirror --reverse --scan-all-first --delete Muziek
wait all

echo '80'
echo "# Synchroniseren Video's ... 6/6"
mirror --reverse --scan-all-first --delete "Video's"
wait all


echo '100'
echo '# Synchronisatie voltooid.'
cache flush
close -a

Het shell script om niet te uploaden no-upload.sh:

Code: Selecteer alles

#!/bin/bash

# dit script kan worden uitgevoerd op de ftp client
# icoon night-light-symbolic


# controleer of het testbestand bestaat en verwijder het dan
if [ -e test-network-up.txt ]
then
rm test-network-up.txt
fi

# slaapstand activeren
systemctl suspend

-------------------------------------------------------------------------------


Het shell script downloaden-ftp.sh:

Code: Selecteer alles

#!/bin/bash

#------------------------------------------------------------------------------
# vul hier je eigen username en userid in
# userid is in een terminal op te vragen met id -u username
UserName='mogenblue'
UserID='1000'
#------------------------------------------------------------------------------

echo .
echo .
echo .

(

# pull
# downloaden van ftp server naar local

lftp -f "/home/mogenblue/Scripts/downloaden-lftp.sh"

sleep 3

) |
sudo -u $UserName DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UserID/bus zenity --progress \
--title="Downloaden van de FTP server - pull" \
--text="Verbinding maken ..." \
--percentage=0 \
--auto-close --no-cancel --width=600

echo klaar.

# --percentage=0 \
# --percentage=0 --pulsate \

Het lftp script downloaden-lftp.sh:

Code: Selecteer alles

# set commands
set net:timeout 5
set net:max-retries 3
set net:reconnect-interval-multiplier 1
set net:reconnect-interval-base 2
# breek de procedure af als er geen verbinding met de server wordt gemaakt
set cmd:fail-exit true
set cache:enable true
# set aantal parallelle transfers
set mirror:parallel-transfer-count 5
set mirror:parallel-directories true


# inlog gegevens staan in /home/mogenblue/.netrc
open 192.168.1.120 −−env−password


lcd /home/mogenblue
cd /home/mogenblue


echo '10'
echo '# Synchroniseren Documenten ... 1/6'
mirror --scan-all-first --delete Documenten
wait all

echo '20'
echo '# Synchroniseren Downloads ... 2/6'
mirror --scan-all-first --delete Downloads
wait all

echo '30'
echo '# Synchroniseren Scripts ... 3/6'
mirror --scan-all-first --delete Scripts
wait all

echo '40'
echo '# Synchroniseren Afbeeldingen ... 4/6'
mirror --scan-all-first --delete Afbeeldingen
wait all

echo '60'
echo '# Synchroniseren Muziek ... 5/6'
mirror --scan-all-first --delete Muziek
wait all

echo '80'
echo "# Synchroniseren Video's ... 6/6"
mirror --scan-all-first --delete "Video's"
wait all


echo '100'
echo '# Synchronisatie voltooid.'
cache flush
close -a

Terug naar “Archief”

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 1 gast