Mirabellette.eu

A blog about digital independence and autonomy

Archives may 2018

Héberger les marques pages Firefox - French version

Written by Mirabellette / 21 may 2018 / no comments

I received some demands to translate in French the article I made about hosting Firefox bookmarks with Syncserver. You can find below the French version of this article.

Introduction

Afin d'avancer dans mon projet d'indépendance numérique, j'ai décidé d'héberger moi même les marques-pages Firefox. J'utilise le navigateur Firefox de la fondation Mozilla et la fondation a mis à disposition sur Github le dépôt qui contient le nécessaire pour héberger les marques pages. Syncserver héberge uniquement les marques pages, il ne s'occupe pas de l'authentification. Cela signifie qu'en utilisant Syncserver, vous devrez toujours vous authentifiez auprès de Firefox puis vous récupérerez les marques-pages sur le serveur de votre choix. Pour également gérer le processus d'authentification, il faut installer Firefox Accounts Server.

firefox_logo

Syncserver a été assez pénible à déployer pour deux raisons. La première est que l'on ne trouve pas beaucoup d'information sur son fonctionnement, sur ce qu'il fait avec un dépôt Github assez brut de fonderie. La seconde est qu'il manque des éléments basique qui rendent le travail de déploiement un peu fastidieux. Pour déployer Syncserver correctement et faire ce tutorial, cela m'a pris environ 15 heures. Dans tous les cas, cela fonctionne désormais et vous avez désormais la possibilité de lire cet article. J'espère que vous le trouverai utile. :)

Le dépôt Github n'est pas très active, une version en 2018, 2017, 2016 et deux versions en 2015 et 2014. Pour suivre les mises-à-jours, vous pouvez ajouter le lien dudépôt à votre agrégateur RSS. Si l'on se réfère au passé, les mises-à-jours ne devraient pas être trop fréquentes.

Configurer Syncserver

  • L'installation a été faite sur une Debian Stretch 9.1
  • Pour compiler l'application, vous devez pouvoir vous connectez à internet ou à un dépôt Python afin de télécharger toutes les dépendances présentes dans le fichier requirements.txt
  • Installation des dépendences

    adduser --system --shell /usr/sbin/nologin --no-create-home firefox
    apt-get install python-dev git-core python-virtualenv g++ sqlite
    cd /opt
    sudo -u firefox git clone https://github.com/mozilla-services/syncserver

    Configuration de base

    La configuration de Syncserver se trouve dans le fichier syncserver.ini. Vous devez le modifier avant de compiler l'application sans quoi les paramètres ne seront pas pris en compte. Dans le fichier syncserver.ini, vous pouvez modifier la section [server:main] si le besoin s'en fait sentir. La configuration de base est fonctionnelle pour cette partie là. Afin de vous facilitez la vie, j'ai créé un fichier syncserver.ini presque bien configuré. Vous pouvez le trouver à cette adresse here (quelques modifications sont toujours nécessaires).

    Le paramètre public_url. Modifiez ce paramètre afin qu'il corresponde à l'url publique à travers laquelle sera accessible Syncserver même s'il s'agit d'une machine virtuelle ou un conteneur placé derrière un reverse proxy.

    public_url = https://example.com

    Le paramètre sqluri. J'ai décidé d'utiliser une base de données de type Sqlite pour conserver les marques pages car il utilise un moteur de base de données facile à sauvegarder. Vous pouvez choisir la base de données avec le moteur que vous voulez. Attention, si vous n'en définissez aucun, les marques pages seront stockés en mémoire RAM et supprimer au redémarrage de la machine. Pour utiliser une base de données Sqlite, vous devez remplacer le paramètre sqluri = sqlite:////tmp/syncserver.db by :

    sqluri = sqlite:////opt/syncserver/syncserver_data.db
    *//// signifie chemin absolu

    Le paramètre secret. Il est très vivement recommandé de générer une clé secrête. Cette clé est utilisé par les tokens d'authentification. Si vous ne le faites pas, Syncserver générera lui-même cette clé à chaque démarrage. Il peut arriver que la clé générée automatiquement soit faible, en cas de faible disponibilité de valeurs aléatoires. Pour générer une clé de façon solide, vous pouvez utiliser la commande suivante.

    head -c 20 /dev/urandom | sha1sum

    Le paramètre allowed_issuers. Dans le cas où vous utilisez le système d'authentification par défaut, vous pouvez n'autoriser que celui de Firefox ou bien le votre si vous en avez un à disposition.

    allowed_issuers = api.accounts.firefox.com

    Le paramètre force_wsgi_environ. J'ai configuré le serveur derrière un reverse proxy Apache2. J'ai fais quelques essais avec la valeur false mais cela ne fonctionnait pas. J'ai par conséquence créé une erreur sur le dépôt Github officiel du projet. On m'a alors conseillé de changer la valeur pour true, cela a fonctionne pour moi.

    force_wsgi_environ = true

    Compilation de l'application

    Rappel surement inutile, pensez bien à configurer Syncserver.ini avant de compiler l'application.

    cd /opt/syncserver
    sudo -u firefox make build
    sudo -u firefox make test

    Après cela, si vous executez la commande sudo -u firefox make serve, vous devriez voir quelques lignes indiquant que Syncserver est correctement lancé et écoute sur le port par défaut (si c'est le cas). Pour information, vous ne verrez pas de texte si la synchronisation de vos marques pages fonctionne ou non.

    Mise-à-jour

    Après avoir compilé l'application, vous devriez mainteant voir deux répertoires: syncserver.egg-info et local. Dans le cas où vous souhaitez mettre à jour Syncserver, vous devrez pensé à bien les supprimer.

    rm -r syncserver.egg-info
    rm -r local

    Apache2 virtualhost

    J'ai créé un virtualhost basique de type reverse proxy avec Apache2. Il redirige juste les flux vers l'adresse ip de votre choix. Vous pouvez trouver le script ici. Je n'ai pas eu besoin de le configurer avec wsgi car je redirige tous les flux directement vers le daemon python.

    Configuration du navigateur

    La procédure varie un petit peu selon que vous utilisiez Firefox sur mobile ou ordinateur de bureau. Cela peut également ne pas fonctionner pour les versions très anciennes du navigateur. Je vais uniquement présenté le processus pour la version bureau. Plus d'informations pour la configuration des autres versions accessibles ici

    • Saissisez “about:config” dans le champs url de votre navigateur

      about_config

      Vous devriez voir un écran d'avertissement, confirmer votre choix.

      warranty

    • Faite une recherche pour la clé qui porte le nom “identity.sync.tokenserver.uri”. Double cliquer sur la ligne et remplacer la valeur attribuée à cette clé par la valeur selon l'image et le texte ci-dessous.

      tokenserver_uri

      La syntaxe de la valeur doit être la suivante https://example.com/token/1.0/sync/1.5. Bien que la version actuelle soit la version 1.8, le chemin vers le fichier est resté avec la valeur 1.0/sync/1.5 ... * en cas de soucis, la valeur originale de votre navigateur est celle qui est affichée dans l'image ci-dessus: https://token.services.mozilla.com/1.0/sync/1.5

    • Déconnectez vous de votre compte Firefox puis redémarrez Mozilla Firefox afin que les modifications soient prises en compte. Une fois que la navigateur a redémarré, reconnectez-vous à votre compte firefox.

    Durcissement de la configuration et nettoyage

    Verrouillage de Syncserver

    Comme vous pouvez le voir, vous pouvez désormais enregistrer vos marques-pages sur le Syncserver de votre choix. Il est probable que vous souhaitiez limité l'accès à Syncserver à vous-même. Pour éviter qu'une autre personne puisse enregistrer ses données sur votre Syncserver, vous devez modifier le fichier syncserver.ini en modifiant le paramètre allow_new_users = false, supprimer les deux répetoires syncserver.egg-info et local et compilez une nouvelle fois l'application.

    vim syncserver.ini
    rm -r syncserver.egg-info
    rm -r local
    sudo -u firefox make build

    Script Systemd

    De façon surprenante, il n'y a pas de script Systemd, there is no Systemd script mis-à-disposition par le dépôt officiel. Vous pouvez utiliser celui que j'ai créé ici. Vous devez le mettre dans le répertoire /etc/systemd/system/ et executer systemctl daemon-reload then systemctl enable syncserver.service pour l'activer. Après cela, Syncserver démarrera automatiquement à chaque démarrage de la machine.

    Nettoyage

    Si vous avez installé le programme make et g++ pour compiler l'application, vous pouvez désormais le supprimer.

    apt purge make g++

    Bien sur, configurer le pare-feu correctement

    Sources

    Réseaux sociaux

    Si vous avez trouvé cet article interessant, vous pouvez vous abonnez au flux rss du blog et de me suivre sur Mastodon. Comme à l'usage, si vous pensez que cela peut intéresser une personne, vous pouvez le lui partager.

    Some news about the blog 2 : 10 April - 10 may

    Written by Mirabellette / 10 may 2018 / no comments

    Hello everyone

    I decided to publish each month an article about the life of the blog in general. In this article, you will be able to know close

    • What I made during this period
    • How is the blog and services popular
    • What I made for the community
    • Some clue about what I plan for the next period of time

    This article is about the period of the 10 April until the 10 May.

    Guideline for each month

    • One or two technical articles. The bigger one is published each first day. The others could be published at any time.
    • One article about the blog life. It will sum up the list of articles I published the last month, what I did for the community, the list of blog updates and some statistic about the blog and the services available here. It is published each 10.

    Period achievements

    Technical article

    • An article about how hosts your Firefox bookmarks on your own server.

    Events

    • A problem with my provider made all *.mirabellette unavailable during 2 days! It was a huge fail for me because my services and blog should be able to resist to everything. I published some message in Mastodon in order to inform visitors and users of the blog. Unfortunately, It was a day after I published the month article. It made me lost I guess a thousand of views. It is huge mess for the blog but I am sure I will be able to make it again :). Be sure I will made what is necessary to avoid this situation happens again.

    The blog

    • Update the navigation bar to add a dropdown list of my services.
    • Update of the About page in order to tell more about me and about the licence.
    • Creation of the project page in order to tell what I plan to do with this blog.
    • Increase the security of the blog and services in enabling and configuring Content Security Policy in the web server.

    Statistics for this period

    It is not possible for me to know exactly how many visitors I have. I don't install a tool to measure this number and I stored only ~ one month of log. I will be honest with you with the statistics. I am not here to tell a success story but to describe the reality.

    • The article about hosting your own Firefox bookmarks was amazingly successful (for me), I got more than 750 unique visitors in one day thanks to it. They mainly came from the lobste.rs website.
    • Others visitors came from dsfc.net where I commented one article.
    • Average numbers of 5-10 unique visitors days by day.
    • Close to nobody uses services I offered like Lufi, Privatebin or Searx.

    Give back to the community

    • One pull request to Dnsmanager in order to enable CAA dns entry.
    • Two pull request accepted in crawler-user-agent about adding new bot.
    • A bug report to the journalduhacker.net about the fact that markdown links do not work properly in the profile description.
    • A bug report to PluxML about the fact that PluXml doestn't externalize all css style and Javascript script. This creates conflict with Content Security Policy and requires to enable the unsecured property unsafe-unline for script and css.
    • A dozen of comments in order to share my knowlege and help the authors to increase the quality of their article.
    • A little donation as each month for an association or service I find useful.

    For the next month

    • I already find about what I will talk for the next month. It could surprise you because it is not a technical article.

    Classified in : Blog / Tags : none

    Host Firefox booksmarks with syncserver

    Written by Mirabellette / 01 may 2018 / 4 comments

    Introduction

    In order to be more and more independent about my digital ecosystem. I decided to manage my bookmarks by myself. I use the browser Mozilla Firefox and Mozilla allows you to manage your own synchronization server. Syncserver stores only bookmarks, it didn't manage your Firefox account or the authentication mechanism. This could be done in installing Firefox Accounts Server but it is not the purpose of this tutorial.

    firefox_logo

    It was pretty annoying to deploy it because there aren't a lot of information available and it requires to me to do some basic stuff by myself. It took me something like 10 or 15 hours to make this article. By the way, it works now and you can read this tutorial and I hope you will find it useful :)

    The Github repository isn't very active, one release in 2017 and 2016, two release in 2015 and 2014. Just add the Github repository to your RSS agregator to get news about update. If we trust the past, it shouldn't be done very often.

    Configure the Firefox Synchronization Server

  • This setup was made on Debian stretch
  • To build the application, you need to be able to access to internet or to the python repository in order to download all dependencies includes in requirements.txt
  • Dependencies

    adduser --system --shell /usr/sbin/nologin --no-create-home firefox
    apt-get install python-dev git-core python-virtualenv g++ sqlite
    cd /opt
    sudo -u firefox git clone https://github.com/mozilla-services/syncserver

    Basic configuration

    The server is configured using an .ini file to specify various runtime settings. The file “syncserver.ini” is this file for the application. There is some setting that you must specify before building the application. Feel free to adjust the [server:main] part to your configuration. You can find the final syncserver.ini file here (some adjustment still required).

    The parameter public_url. You should modify it in order to match the interface where syncserver will be accessed by. Even if you run it inside a container or a virtual machine, you have to setup the public url.

    public_url = https://example.com

    The parameter sqluri. I choose to use a Sqlite database to store bookmarks because it is easy to backup. Feel free to use the one you want and modify the syncserver.ini. If you don't specify a Sql database, your bookmarks will be store in RAM and be reset each time you restart the server.Replace sqluri = sqlite:////tmp/syncserver.db by :

    sqluri = sqlite:////opt/syncserver/syncserver_data.db
    *//// means absolute path

    The parameter secret. It is better to generate a secret key for signing authentication tokens. If you don't, the server will generate it each time it start. That could mean a weak key if the random generator seed isn't good enough. Uncomment the parameter and set the value with the result of the next command:

    head -c 20 /dev/urandom | sha1sum

    The parameter allowed_issuers. If you are using the account system offered by Mozilla Firefox, you may want to restrict access to just that domain like so:

    allowed_issuers = api.accounts.firefox.com

    The parameter force_wsgi_environ. I setup the server behind an Apache2 reverse proxy. I make some try with false but it didn't work. I even open an issue in the official Github repository. The only to make it works was to set the force_wsgi_environ to true.

    force_wsgi_environ = true

    Build

    Don't skip the configuration step or your syncserver will not work as expected. As you build the application, you should configure syncserver.ini BEFORE build the application. If you don't, the modifications did to syncserver.ini will not be read.

    cd /opt/syncserver
    sudo -u firefox make build
    sudo -u firefox make test

    After that, if you run sudo -u firefox make serve, you should be able to see some lines about syncserver listening. It could tell you if something go wrong.

    Update

    After building the application, you could now see two new folder : syncserver.egg-info and local. You should delete them to be able to build the server again, for example for an update.

    rm -r syncserver.egg-info
    rm -r local

    Apache2 virtualhost

    I create a classic reverse proxy Apache2 virtual host. It just redirects flux to the virtual machine interface. You can find the script here.

    Configure your browser

    The procedure varies a little between desktop and mobile Firefox, and may not work on older versions of the browser. I will only describe the process for desktop version of firefox. Feel free to find more informations here

    • Enter “about:config” in the URL bar picture.

      about_config

      You should display this warranty screen, confirm your choice to continue.

      warranty

    • Made a research for “identity.sync.tokenserver.uri” as name. Double click on the line and replace the string by your public URL.

      tokenserver_uri

      The syntax should be like this https://example.com/token/1.0/sync/1.5.The current version is 1.7 but the endpoint didn't change ... * the original one is the one display in the previous picture https://token.services.mozilla.com/1.0/sync/1.5

    • Restart Firefox for the change to take effect.

    Note that this must be set prior to loading the sign-up or sign-in page in order to take effect, and its effects are reset on sign-out.

    Hardening and clean up

    Lock the instance for your own usage

    As you can see, you now use your own server to store your bookmarks. To avoid someone else could do that, you have to set the parameter allow_new_users to false in syncserver.ini and build the application again.

    vim syncserver.ini
    rm -r syncserver.egg-info
    rm -r local
    sudo -u firefox make build

    Systemd script

    Astonishingly, there is no Systemd script provides by the official tutorial. You could find the one I created here. You have to put it in /etc/systemd/system/ and execute systemctl daemon-reload then systemctl enable syncserver.service. It will start syncserver at each boot.

    Cleanup

    If you install make and g++ just for building this application, feel free to remove them.

    apt purge make g++

    Of course, setup the firewall in the correct way.

    Sources

    Social media

    If you find this article interesting, feel free to subscribe to my RSS flux and to follow me on Mastodon. Don't hesitate to share it if you think he could interest someone else.