jeudi 15 septembre 2022

Sauvegarde via rsync sur un nas Synology DS220+

 

Introduction

L'article présentera la sauvegarde du répertoire home d'un disque en btrfs sur un NAS Synology DS220+ à l'aide de rsynch

La configuration par défaut a été utilisé pour installer la  distribution OpenSUSE Tumbleweed.Le SSD est donc formaté en BTRFS. 

Activer rsync 

Dans l'interface web de Synology, il faut s'assurer que le service rsync est activé. De plus, puisqu'on lance le rsync depuis un utilisateur externe, il faut aussi activé le rsync account.


Commande rsync

Il sera assumé qu'un utilisateur rsync_userr avec le mot de passe 1234 existe sur le NAS et qu'il est alloué d'utiliser rsync. Ce droit lui peux lui être octroyé dans l'onglet application en éditant un utilisateur.

19.23.31.115 étant l'adresse de votre NAS.

collinm étant le nom de votre utilisateur local.

rsync --progress -avr  --delete --exclude="lost+found" --exclude=".cache" /home/collinm ssh rsync_user@19.23.31.115::Backup/rsync

Cette commande synchronisera votre home local dans le répertoire rsync du disque nommé Backup. A modifier selon votre configuration.

Cette sommande vous demandera de taper votre mot de passe.

rsync sans mot de passe

La commande précédente fonctionne, cependant si vous désirez lancer cette commande automatiquement, cela n'est pas pratique de devoir entrer le mot de passe à chaque fois.

Il existe une méthode simple, mais pas des plus sécuritaire est d'utiliser sshpass.

Il s'agira d'inscrire le mot de passe qui sera passé à rsync par la suite

sshpass -p 'Double2015' rsync --progress -avr  --delete --exclude="lost+found" --exclude=".cache" /home/collinm ssh rsync_user@19.23.31.115::Backup/rsync

Cette commande pourrait être ajouté dans un script bash et lancé automatiquement par cron.

Ce n'est pas sécuritaire, mais cela pourrais être acceptable si c'est pour une utilisation domestique avec aucune autre personne que vous sur votre réseau.

Autrement je vous conseille d'opter pour la création d'une clé ssh.

mercredi 14 septembre 2022

Utiliser les touches du scanner brother

 L'article portera sur l'utilisation des touches de l'imprimante scanner HL-L2390DW. Cependant, cela fonctionne pour de nombreuses imprimantes Brother. La distribution utilisé est OpenSUSE Tumbleweed

Je me suis rendu sur la page de téléchargement pour ce périphérique.

https://support.brother.com/g/b/downloadtop.aspx?c=ca&lang=fr&prod=hll2390dw_us

J'ai pris rpm car c'est le format de package géré par ma distribution.



Ensuite j'ai téléchargé et installé


Scan-key-tool 64bit. 

 

Une fois installé, vérifié si dans les processus, brscan-skey-exe est exécuté.

ps aux | grep brother
collinm  16274  0.0  0.0 1616  2056 pts/2 Sl 10:24 0:00 /opt/brother/scanner/brscan-skey/brscan-skey-exe

Si brscan-skey-exe n'est pas trouvé, lancez le à la main.

Vous devez lancer ce programme pour chaque utilisateur qui voudra utliser le scanner.

Une fois que vous appuyer sur le bouton scan de l'imprimante, il faudra choisir l'utilisateur afin que le fichier est dans le bon répertoire.

Les fichiers sont par défaut dans le répertoire brscan.



mardi 18 janvier 2022

Sauvegarder un formulaire avec un appel ajax avec le framework Thymeleaf

Dans cet exemple qui utilise Thymeleaf, nous allons effectuer un post en ajax. Les données envoyés sont de type json. Ce qui a un impact sur le body devant être envoyé et sur l'annotation à employé dans le controller spring.

 Le formulaire est composé de 3 champs.

<form class="row g-3" id="createAdsForm" th:action="@{/ads}">
<input name="id" type="hidden"/>
<div class="col-md-12">
<label for="adsTitle" class="form-label" th:text="#{ads.title}">Title</label>
<input type="text" class="form-control" id="adsTitle" name="title">
</div>

<div class="col-md-12">
<label for="descriptionAds" class="form-label" th:text="#{ads.description}">Example textarea</label>
<textarea class="form-control" id="descriptionAds" name="description" rows="3"></textarea>
</div>

<div class="col-12">
<button type="submit" class="btn btn-primary" th:text="#{ads.publish}">Publié</button>
</div>

</form>

 

FormDataJson provient du dépot: 

https://github.com/brainfoolong/form-data-json

document.addEventListener('DOMContentLoaded', function () {

let createAdsForm = document.getElementById("createAdsForm");

createAdsForm.addEventListener("submit", function(event) {
event.preventDefault();

let jsonSearchAdsForm = FormDataJson.toJson("#createAdsForm", { arrayify: false , flatList: false});
console.log(jsonSearchAdsForm);
fetch(createAdsForm.action, {
method: "post",
headers: {
'Accept': 'application/json, text/plain, */*',
'Content-Type': 'application/json'
},
body: JSON.stringify(jsonSearchAdsForm)
}).then(result => {
if (result.status != 200) {
throw new Error("Bad Server Response");
}
return result.text();

}).then((content) => {
console.log(content);
}).catch((error) => {
console.log(error);
});

});

});

 Au niveau du controller de Spring

@Controller
public class AdsController {

@ResponseBody
@PostMapping("/ads")
public ResponseEntity saveAds(@RequestBody AdsForm adsForm) {

return new ResponseEntity<>(HttpStatus.CREATED);
}

}

 

 Si les données n'auraient pas été envoyé en json, du côté de spring, l'annotation ModelAttribute aurait dû être utilisé.