Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
issue106:tutoriel2 [2016/03/03 14:44] – [3] auntiee | issue106:tutoriel2 [2016/04/18 14:02] (Version actuelle) – créée andre_domenech |
---|
===== 1 ===== | ===== 1 ===== |
** | |
In the early days of computers, a company called Digital Equipment Corporation (DEC) created its 32-bit VAX computer using openVMS as its operating system. Because a VAX/VMS computer is so reliable, there are today - after more than 25 years - still a large number of them in use. But, in the end, even these reliable computers will have to be replaced. As described in part 1, you could migrate from VAX/VMS to Linux, as the way Linux works is largely compatible with VAX/VMS. If you use Pascal as your programming language, you will find that Lazarus/Free Pascal is a good replacement. But there are technical functions used in VMS with no apparent replacement in Linux. In this article I will describe how eventflags can be replaced. | |
| |
The art of migration | **I would like to start off this article by presenting my new server to the reader. |
| |
The best way to do a migration is to leave the source code as much unchanged as possible. This saves work, but, more important, it prevents errors caused by changes. When you encounter a function with no counterpart in Linux, you could rewrite that part of the code, or you implement the function. The latter is what I have done with functions concerning eventflags. Let me start by explaining what eventflags are and what they are being used for. | Yes, this is it (shown above). A 2013 version (actually 2014) Nexus 7 tablet, with the Ubuntu Touch operating system. Naturally, it is no news today that mobile phone and tablet hardware is up to some creative use (light use, actually) as a server - the Raspberry Pi took care of that. A point could even be made that ARM processors are ideal for servers with light or sporadic use, since the very same power management characteristics that are so useful making the most of your mobile phone’s battery can actually be put to use, putting such a server to sleep when not processing requests, thus saving on electrical bills. |
** | |
| What was lacking was in fact the operating system. Neither iOS nor Android can be seen as server-grade operating systems, they are just not built that way. Their paradigm is rather that of a single-user system with a graphical desktop, which is fine since most devices are used precisely for that purpose. But what about Ubuntu Touch? Since the tablet version of Ubuntu is a direct derivative of the desktop offering, there are many characteristics of the system that can be used to set up a pocket server. We will consider some of them in the following lines.** |
| |
Aux débuts de l'informatique, l'entreprise Digital Equipment Corporation (DEC) a créé ses ordinateurs 32-bit VAX avec openVMS comme système d'exploitation. Les ordinateurs VAX/VMS sont si fiables qu'il y en a aujourd'hui un grand nombre encore en service, après plus de 25 ans. Mais finalement même ces ordinateurs fiables devront être remplacés. Comme je l'ai décrit en partie 1, vous pouvez migrer de VAX/VMS vers Linux, car la façon dont fonctionne Linux est largement compatible avec VAX/VMS. Si vous utilisez Pascal comme langage de programmation, vous trouverez que Lazarus/Free Pascal est un bon remplaçant. Mais il y a des fonctions techniques de VMS qui n'ont pas de remplaçant évident sous Linux. Dans cet article je vais décrire comment les eventflags (drapeaux d’évènements) peuvent être remplacés. | J'aimerais commencer cet article en présentant mon nouveau serveur au lecteur. |
| |
L'art de migrer | Oui, c'est lui (ci-dessus). Une version de 2013 (en fait, de 2014) de la tablette Nexus 7, dont le système d'exploitation est Ubuntu Touch. Bien entendu, ce n'est plus une nouveauté aujourd'hui de pouvoir utiliser les téléphones mobiles et les tablettes (je parle du matériel même) de façon créative comme des serveurs, le Raspberry Pi a réglé cela. Et sans trop se dépenser. On pourrait même dire que les processeurs ARM sont parfaits pour des serveurs dont l'utilisation est légère ou sporadique, puisque les mêmes caractéristiques de gestion d'alimentation qui aident tellement à conserver la batterie de votre portable, peuvent être employées à bon escient, car elles mettraient un tel serveur en veille quand il ne traite pas des requêtes, économisant ainsi l'électricité et vos factures. |
| |
La meilleure façon de migrer est de laisser le code source aussi inchangé que possible. Cela économise du travail, et, plus important, ça évite les erreurs provoquées par les changements. Si vous êtes en présence d'une fonction n'ayant pas d'équivalent sous Linux, vous pouvez soit réécrire cette partie de code, soit implémenter cette fonction. C'est ce que j'ai fait avec les fonctions concernant les drapeaux d'évènements. Je vais donc commencer par expliquer ce que sont ces drapeaux et leur rôle. | Ce qui manquait, c'était le système d'exploitation. On ne peut considérer ni iOS ni Android comme des systèmes d'exploitation de classe serveur, car ils n'ont pas été construits pour ça. Leur paradigme est plutôt celui du système à un seul utilisateur avec un bureau graphique, ce qui est très bien puisque la plupart des dispositifs sont utilisés précisément à ces fins. Mais quid d'Ubuntu Touch ? Puisque la version tablette d'Ubuntu est une dérivée directe de la version pour ordinateur de bureau, beaucoup des caractéristiques du système pourraient se prêter à la création d'un serveur de poche. Je vais en examiner quelques-unes dans les lignes qui suivent. |
| ===== 2 ===== |
| |
** | **WE HAVE ROOT |
What are eventflags? | To operate a server, having root access to the underlying system is a must. Software needs to be installed and configured, and indeed some services need root access just to start up - mainly those using privileged TCP/IP ports in the 1-1023 range (think Web servers). |
| |
Eventflags are, in essence, global booleans. The reason why they are important is the fact that they are used consistently throughout the entire system in VMS, including kernel and drivers. Their main function is synchronization between processes and drivers, processes and other processes, or even within a process, between threads. But they can also be used to maintain (system-wide) statuses or as a binary semaphore. | We all know about the hoops iOS and Android make users run through just to gain root access. Special programs need to be installed, that basically use much the same tools a hacker would need to escalate privileges and become administrator. This is obviously a bit problematic, on two counts. In the first place, the very existence of rooting applications means that there are well-known defects in system security. So, what is to avoid other applications or malware using the very same defects for nefarious purposes? On the other hand, the user installing such a kit should always ask him- or her-self whether the person making such an app available could eventually be tempted to include a backdoor, making the entire device controllable from elsewhere without the legitimate proprietor’s knowing anything about it. Somebody who has the knowledge to root a device’s operating system will probably also have the information to set up such a trojan. |
| |
An eventflag can be set or cleared implicitly or explicitly. Implicitly when used while accessing a device (cleared upon starting and set when done), or explicitly using the kernel routines $SETEF and $CLREF. When set or cleared with the kernel routines, the kernel will return the previous state of the eventflag as its result. This makes it possible to use the eventflag as a binary semaphore, as only 1 process can set the flag and get the result “WASCLEARED”, the others get as result “WASSET”. The VMS kernel uses the indivisible VAX machine code instruction test-and-set to do this. On a PC this would be the BTS instruction. Free Pascal does not contain a corresponding function, so I had to implement it in assembly (machine language). I didn't have this much fun programming since I created my own - functionally identical - version of CP/M (something like DOS) back in the 80's.... | In Ubuntu Touch, on the other hand, we can just fire up the terminal - and yes, there is a terminal available as standard. Much as you would on any Ubuntu computer, the default user (who goes by the login “phablet”) just needs to issue a sudo bash, and there one is with root privileges. The password is the same password or PIN code used to set up the device. ** |
** | |
| |
Que sont les drapeaux d'évènements? | Nous avons Root |
| |
Les Eventflags sont, par nature, des booléens globaux. La raison pour laquelle ils sont importants, c'est qu'ils sont utilisés fréquemment partout dans le système VMS, et même dans le noyau et les pilotes. Leur fonction principale est la synchronisation entre des processus et des pilotes, entre processus eux-mêmes et même à l'intérieur d'un processus, entre les threads. Mais ils peuvent être utilisés pour entretenir des états (globalement sur le système) ou comme sémaphores binaires. | Pour faire fonctionner un serveur, il est absolument nécessaire d'avoir un accès d'administrateur (root) au système sous-jacent. Il faut pouvoir installer et configurer des logiciels et, en fait, certains services ont besoin d'un accès root ne serait-ce que pour démarrer, principalement ceux qui utilisent des ports TCP/IP privilégiés, dans la plage 1-1023 (notamment des serveurs Web). |
| |
Un drapeau peut être levé ou abaissé (enlevé) implicitement ou explicitement. Implicitement quand on l'utilise pour accéder à un périphérique (abaissé au début et levé quand c'est fait), ou explicitement en utilisant les appels système $SETEF et $CLREF. Quand on utilise les appels système, le noyau va renvoyer l'état précédent du drapeau comme résultat. Ça permet de les utiliser comme sémaphores binaires, puisque seulement 1 processus peut lever le drapeau et obtenir le résultat «WASCLEARED» (ÉtaitAbaissé), les autres auront le résultat «WASSET» (ÉtaitLevé). Le noyau VMS utilise l'instruction machine atomique, indivisible, test-and-set de VAX pour le faire. Sur un PC, ce serait l'instruction BTS. Le Free Pascal ne contient pas de fonction similaire, donc j'ai du l'implémenter en assembleur (langage machine). Je n'avais pas eu autant de plaisir à programmer depuis le jour où j'ai créé ma propre version de CP/M isofonctionnelle (quelque chose comme le DOS) dans les années 80... | Nous savons tous que les utilisateurs d'iOS et d'Android doivent franchir un véritable parcours d'obstacles pour pouvoir accéder à root. Des programmes spécifiques doivent être installés et ceux-ci utilisent presque les mêmes outils dont un pirate aurait besoin pour augmenter ses droits et devenir administrateur. C'est bien évidemment un peu problématique, et ça, pour deux raisons. D'abord, le fait que des applications soient rootées veut dire qu'il y a des défauts bien connus dans la sécurité du système. Alors, qu'est-ce qui empêcherait d'autres applications ou des malwares d'utiliser les mêmes défauts à des fins néfastes ? D'autre part, l'utilisateur qui installe un tel kit devrait toujours se demander si la personne qui rend une telle appli disponible serait jamais tentée d'inclure une porte dérobée, pour pouvoir contrôler le dispositif complet à distance sans que le propriétaire légitime en sache quoi que ce soit. Un individu qui sait comment rooter le système d'exploitation d'un dispositif aura sans doute les informations nécessaires pour y mettre un tel cheval de Troie. |
| |
===== 2 ===== | En revanche, dans Ubuntu Touch, il suffit de lancer le terminal - et, oui, un terminal est disponible en standard. De la même façon que sur n'importe quel ordinateur sous Ubuntu, l'utilisateur par défaut (dont le nom d'utilisateur est « phablet »), doit tout simplement envoyer un sudo bash et, voilà, on a les droits d'administrateur. Le mot de passe est le même, ou le code PIN, utilisé pour configurer le dispositif. |
** | ===== 3 ===== |
How are eventflags used? | |
| |
Only setting or clearing would be useless without reading the result. You can do this by asking the kernel if a certain eventflag is set or cleared ($READEF), but its main use is going to sleep and waiting for an eventflag to be set ($WAITFR). You can use this - for example - if you have to analyze data from a file (or the Internet). You can read the first part of the file and - to save time - immediately give the command to read the next part while you analyze the data you've just read. When done, you might have to wait until the next part of the file is read. You have specified an eventflag to be set when done in your read command, so now you put your process to sleep until reading is done and the eventflag is set. In VMS this is an integrated part of the kernel. | **This can be seen both as a good, and a bad feature. On one hand, there is no futzing about with software of dubious origin. On the other, any software that is well-enough thought out could eventually persuade the user to enter his password, thus gaining root access. If Ubuntu Touch were to gain a considerable market share, then such phishing attempts would unfortunately become more a probability than a mere hypothesis. |
| |
You can even wait for one of a number of eventflags (within the same cluster) to be set (multiple events, $WFLOR). Let's say in the previous example it is possible that the next part will never arrive! Then, you could start a timer that will set another eventflag when it runs out of time, and you specify that you want to sleep until either one of those two eventflags are set. When the process (or thread within a process) wakes up, it reads the eventflags to see if the data has arrived or the timer has run out (do not forget to cancel the timer if the data has arrived before the timer runs out!). As the kernel is updating the eventflag as well as waking up the process, this is one of the fastest ways to respond to an event. | THE PACKAGE MANAGER |
** | |
| |
Comment utilise-t-on les drapeaux? | Since we have root, it should be a relatively simple affair to install our favorite software packages from the repositories, and off we go. Unfortunately, things are not quite that simple. |
| |
Ne faire que lever ou abaisser un drapeau serait inutile si on ne savait pas lire le résultat. Vous pouvez le faire en demandant si tel drapeau est levé ou non ($READEF), mais l'usage est d'attendre qu'un drapeau soit levé ($WAITFR). Vous pouvez le faire, par exemple, si vous devez analyser des données d'un fichier (ou d'Internet). Vous pouvez lire la première partie du fichier et, pour gagner du temps, demander de lire immédiatement la partie suivante du texte pendant que vous analysez les données qui viennent d'être lues. Une fois cela fait, il se peut que vous ayez à attendre que la partie suivante soit lue. Vous avez précisé qu'un drapeau doit être levé quand votre lecture est terminé, vous pouvez alors mettre en sommeil votre processus jusqu'à ce que la lecture soit terminée et que le drapeau soit levé. Pour VMS, ceci est intégré au noyau. | In the first place, Ubuntu Touch has gone the Snappy way. This is a new way of distributing the actual files that a software package contains into our computer’s filesystem. In the regular versions of the *buntu distributions, the apt package system is used. In each package file (actually a .DEB extension file), many individual files are contained. On installation, each file will be written to the appropriate directory on our computer. So configuration files go into /etc, binary (program) files into /usr/bin, libraries into /usr/lib, and program data into /var. Snappy packages work in a different way: |
| |
Vous pouvez même attendre que l'un des drapeaux parmi plusieurs dans le même groupe soit levé (évènements multiples, $WFLOR). Dans l'exemple ci-dessus, imaginons qu'il soit possible que la prochaine partie du texte n'arrive jamais! Alors, vous pouvez déclencher un sablier qui lèvera un autre drapeau quand il aura fini, et vous spécifiez que vous voulez vous mettre en sommeil jusqu'à ce que l'un des deux drapeaux soit levé. Lorsque le processus (ou le thread) se réveille, il lit les drapeaux pour voir si les données sont arrivées ou si le sablier est épuisé (n'oubliez pas de désactiver le sablier si les données sont arrivées avant qu'il ne soit épuisé). Comme le noyau met à jour l'état du drapeau et que c'est lui qui réveille le processus, c'est une des manières les plus rapides de réagir à un évènement. | “Each snappy package is installed into its own directory. snappy packages will never overwrite files that belong to different packages or older versions of the same package. A normal snappy package can read only its own space and write to a special writable area. This is enforced via the apparmor profile for ubuntu-core apps.” |
| |
** | Source: Ubuntu Snappy Filesystem Layout Guide https://developer.ubuntu.com/en/snappy/guides/filesystem-layout/.** |
In VMS, all access to devices goes through a unified system call named QIO (Queued Input / Output). First you have to create a link to a device to get a handle. Each device has a different way to do this: To access a physical device directly, you use “assign”; to use a virtual device - such as a mailbox (IPC, described in part 4) - you use a kernel function to create an instance of that device. Then you use this handle in the QIO call to specify which device you want to access. | |
| |
As the name implies, the kernel uses queues to store your request, a separate queue for every device. This means you do not have to wait for the request to finish. Therefore this function exists in 2 flavors: The $QIO for asynchronous access, and $QIOW if you want to wait for the result. In both cases you have to specify an eventflag (the default is eventflag 0), used to signal that the request is executed. | On peut le considérer comme une fonctionnalité qui soit à la fois bonne et mauvaise. D'un côté, on n'a pas à bricoler avec des logiciels dont l'origine est douteuse. De l'autre, n'importe quel logiciel créé avec assez d'imagination pourrait à la longue convaincre l'utilisateur de saisir son mot de passe, accédant ainsi à root. Si Ubuntu Touch gagnait pas mal de parts du marché, de telles tentatives de hameçonnage deviendraient malheureusement probables, au lieu d'être seulement hypothétiques. |
| |
To implement asynchronous calls to functions that are synchronous in Linux, I've used threads. The call to QIO creates a new thread in which the synchronous function is used, the eventflag is cleared and the program continues. When the function is ready, the eventflag is set and the thread is closed. This way, the program behaves on Linux as it did on VMS. | Le gestionnaire de paquets |
| |
Fortunately, you do not always have to use the QIO call. There exist higher level calls that do the complex stuff for you, but the penalty is that this cannot be done asynchronously. As an example: Reading from or writing to a file is done with the VAX-Pascal “open” statement (in Free Pascal: assign), followed by reset/rewrite and readln/writeln (the same as in Free Pascal). | Puisque nous avons root, ce serait plutôt simple d'installer les paquets de nos logiciels préférés à partir des dépôts, et le tour est joué. Malheureusement, ce n'est pas aussi simple. |
** | |
| |
Pour VMS, tous les accès aux périphériques passent par un appel système unifié, le QIO (Queued Input/Output). D'abord vous devez créer un lien vers un périphérique pour obtenir un pointeur (handle). Chaque périphérique a une manière différente de le faire : pour accéder à un périphérique physique directement, vous utilisez « assign » ; pour utiliser un périphérique virtuel, comme une boite aux lettres (IPC, décrit dans la partie 4), vous utilisez une fonction du noyau pour créer une instance de ce périphérique. Ensuite vous utilisez ce pointeur dans la commande QIO pour spécifier quel périphérique vous voulez atteindre. | D'abord, Ubuntu Touch a opté pour Snappy. C'est une nouvelle façon de distribuer les fichiers que contient un paquet logiciel dans le système de fichiers de notre ordinateur. Dans les versions normales des distributions *buntu, le système des paquets apt est utilisé. Chaque paquet (en fait, un fichier avec une extension .DEB), contient beaucoup de fichiers individuels. À l'installation, chaque fichier est écrit dans le dossier approprié de notre ordinateur. Ainsi, des fichiers de configuration sont placés dans /etc, des fichiers binaires (programmes) vont dans /usr/bin, les bibliothèques, dans /usr/lib et les données du programme dans /var. Les paquets Snappy fonctionnent différemment : |
| |
Comme leur nom l'indique, le noyau utilise des queues (files d'attente) pour ranger vos demandes, une queue différente pour chaque périphérique. Ainsi vous n'avez pas à attendre que la demande se termine. Mais il existe deux saveurs pour cette fonction : le $QIO pour les accès asynchrones, et le $QIOW si vous voulez attendre le résultat. Dans les deux cas, vous devez nommer un drapeau (le drapeau par défaut est 0) à utiliser pour signaler que la demande est réalisée. | « Chaque paquet snappy est installé dans son propre répertoire. Les paquets snappy n'écraseront jamais des fichiers qui font partie d'autres paquets ou de versions anciennes du même paquet. Un paquet snappy normal ne peut lire que son propre espace et écrire vers une zone spécifique. Ces règles sont respectées grâce au profil apparmor pour les applications ubuntu-core. » |
| |
Pour construire des appels asynchrones dans des fonctions qui sont synchrones en Linux, j'ai utilisé les threads. L'appel à QIO crée un nouveau thread dans lequel la fonction synchrone est utilisée, le drapeau est abaissé et le programme continue. Quand la fonction est prête, le drapeau est levé et le thread est détruit. De cette façon, le programme se comporte sous Linux de la même manière que sous VMS. | |
| |
Heureusement, vous n'avez pas à utiliser tout le temps les appels QIO. Il existe des appels de fonctions de plus haut niveau qui font le boulot complexe à votre place, mais la contrepartie est que cela ne peut pas se faire de manière asynchrone. Par exemple : Lire ou écrire dans un fichier est réalisé avec la fonction « open » de VAX-Pascal (« assign » en Free Pascal), suivie de reset/rewrite et readln/writeln (idem en Free Pascal). | Source : Ubuntu Snappy Filesystem Layout Guide https://developer.ubuntu.com/en/snappy/guides/filesystem-layout/. |
| |
| |
| ===== 4 ===== |
| |
| **Instead of using the Snappy default location for applications (which is /apps), Ubuntu Touch uses directory /custom/click. For example, the Terminal application that comes with Ubuntu Touch can be located in three versions, all in subdirectories of /custom/click/ |
| com.ubuntu.terminal: |
| |
| # find / -name terminal |
| |
| /custom/click/com.ubuntu.terminal/0.7.121/lib/arm-linux-gnueabihf/bin/terminal |
| |
| /custom/click/com.ubuntu.terminal/0.7.121/lib/i386-linux-gnu/bin/terminal |
| |
| /custom/click/com.ubuntu.terminal/0.7.121/lib/x86_64-linux-gnu/bin/terminal |
| |
| Ubuntu Touch also has a different software manager. Both graphical (the “Ubuntu Store” app) and console (“pkcon”) versions are available. Unfortunately, neither of them has complete access to the vast range of software available inside the apt repositories. Even worse, some packages would seem to be available using pkcon, but cannot actually be installed in this way.** |
| |
| Au lieu de l'emplacement par défaut pour des applications sous Snappy (qui est /apps), Ubuntu Touch utilise le répertoire /custom/click. Par exemple, l'application Terminal livrée avec Ubuntu Touch peut être trouvée dans trois versions, toutes dans des sous-répertoires de /custom/click/ |
| |
| com.ubuntu.terminal : |
| |
| # find / -name terminal |
| |
| /custom/click/com.ubuntu.terminal/0.7.121/lib/arm-linux-gnueabihf/bin/terminal |
| |
| /custom/click/com.ubuntu.terminal/0.7.121/lib/i386-linux-gnu/bin/terminal |
| |
| /custom/click/com.ubuntu.terminal/0.7.121/lib/x86_64-linux-gnu/bin/terminal |
| |
| Ubuntu Touch possède aussi un gestionnaire de logiciels différent. Une version graphique (l'appli « Ubuntu Store » et une version console (« pkcon ») sont disponibles. Malheureusement, ni l'une ni l'autre n'a accès à toute la large gamme de logiciels disponibles dans les dépôts apt. Pire encore, certains paquets ont l'air d'être disponibles avec pkcon, mais ne peuvent pas être installés de cette façon. |
| ===== 5 ===== |
| |
| **So, what can we use to install our favorite server software? The answer is naturally the very same apt-get, aptitude, etc, commands we are used to on Ubuntu Server. Now, before going any further, let us stress that this is NOT something Canonical approves of, which is quite understandable in a way since there is no guarantee that the Snappy/Click packages and apt packages will play well together going forward. So please proceed with caution - and be prepared to reinstall the system from scratch if everything should go belly-up. (I do not think anything very bad will happen, but it COULD, so...) |
| |
| Before proceeding, we should note that the root filesystem is mounted read-only by default on Ubuntu Touch. So the first thing we will need to do is make it remount read-write. To do so, start on the device by going to Settings > About this device > Developer Mode, and turn the Developer Mode on. Now, with the USB cable, connect the device to the computer used to install Ubuntu Touch - or any computer with the phablet-tools package installed. As root, issue the following command on the computer: |
| |
| # phablet-config writable-image |
| |
| You should eventually see the device reboot, now with the filesystem in read-write.** |
| |
| Alors, comment installer nos logiciels serveur préférés ? La réponse est, naturellement, les mêmes commandes apt-get, aptitude, etc., auxquelles nous sommes habitués sur Ubuntu Server. Bon. Avant de continuer, j'aimerais souligner que c'est quelque chose que Canonical n'aime pas, ce qui est tout à fait compréhensible, puisqu'il n'y a pas de garantie que les paquets Snappy/Click et les paquets apt s'entendront bien ensemble demain. S'il vous plaît, soyez prudent - et soyez prêt à réinstaller le système à partir de zéro si tout plante. (Il y a peu de chances que quelque chose d'horrible se passe, mais c'est POSSIBLE, alors...) |
| |
| Avant de continuer, je dois signaler que le système de fichiers de root est monté par défaut en lecture seule sur Ubuntu Touch. Ainsi, la première chose que nous devons faire, c'est le remonter en lecture et en écriture. Pour ce faire, commencez sur votre dispositif en allant à Paramètres > À propos de > Mode développeur et activer celui-ci. Ensuite, utiliser son câble USB pour connecter le dispositif à l'ordinateur que vous avez utilisé pour installer Ubuntu Touch, ou n'importe quel ordinateur où le paquet phablet-tools est installé. En tant que root, saisissez la commande suivante sur l'ordinateur : |
| |
| # phablet-config writable-image |
| |
| Après un temps d'attente, vous devrez voir le redémarrage du dispositif, avec son système de fichiers en écriture et en lecture. |
| |
| ===== 6 ===== |
| |
| **Inside the Terminal app on the device itself, or through a terminal from the computer (try command “adb shell” on the computer with the device connected), we can now issue a series of commands: |
| |
| phablet@ubuntu-phablet:~$ sudo bash |
| |
| [sudo] password for phablet: |
| |
| root@ubuntu-phablet:~# apt-get update |
| |
| and we should see the tablet making its connection to the Ubuntu repositories in the usual manner. |
| |
| MAKING USE OF AVAILABLE TECHNIQUES |
| |
| Once the apt system is up and running, we can start installing the software to turn our tablet into a server. Just to make things clear: we will be installing software that is meant to work in the background, with, at most, error messages on the console or in log files. There will be no graphical programs on this one, basically because most graphical software for Ubuntu is still compiled for the X server. Ubuntu Touch runs Mir, which is not compatible.** |
| |
| À l'intérieur de l'appli Terminal du dispositif même, ou à partir d'un terminal sur l'ordinateur (essayez la commande « abd shell » sur l'ordinateur quand le dispositif y est connecté), nous pouvons maintenant donner une série de commandes : |
| |
| phablet@ubuntu-phablet:~$ sudo bash |
| |
| [sudo] password for phablet: |
| |
| root@ubuntu-phablet:~# apt-get update |
| |
| et l'on devrait voir la tablette se connecter normalement aux dépôts Ubuntu. |
| |
| Utiliser les techniques disponibles |
| |
| Une fois que le système apt fonctionne bien, nous pouvons commencer à installer les logiciels pour faire de notre tablette un serveur. Pour que les choses soient claires : nous allons installer des logiciels faits pour fonctionner en arrière-plan, avec, tout au plus, des messages d'erreur sur la console ou dans les journaux système. Il n'y aura pas de programme graphique sur celui-ci, parce que la plupart des logiciels graphiques pour Ubuntu sont encore compilés pour le serveur X. Ubuntu Touch exécute Mir qui n'est pas compatible. |
| |
| ===== 7 ===== |
| |
| **Perhaps a first step could be to install an SSH server, to enable us to SSH in from another computer. Actually, this is not necessary since the openssh-server package is already installed in Touch. However, for some reason it is not started automatically on boot. A quick fix is to edit the /etc/rc.local file and insert the appropriate command at the end of this file. It should now end like this: |
| |
| service ssh start |
| |
| exit 0 |
| |
| Meanwhile, the SSH service can be started manually at any time using the service command: |
| |
| service ssh restart |
| |
| When SSH-ing in from another computer, please remember the default user is “phablet”, so - assuming 192.168.0.117 is the IP address of the tablet, try: |
| |
| ssh phablet@192.168.0.117 |
| |
| Root entry through SSH and password-less access can be configured in the usual way.** |
| |
| Comme première étape, on pourrait installer un serveur SSH, pour nous permettre d'entrer dans la tablette à partir d'un autre ordinateur. Toutefois, cela n'est pas nécessaire puisque le paquet openssh-server est déjà installé dans Touch. Cependant, pour une raison inconnue il n'est pas lancé automatiquement au démarrage. Une solution rapide est d'éditer le fichier /etc/rc.local pour y insérer la commande appropriée à la fin. Il devrait maintenant se terminer comme ceci : |
| |
| service ssh start |
| |
| exit 0 |
| |
| Entretemps, le service SSH peut-être lancé manuellement n'importe quand, en utilisant la commande service : |
| |
| service ssh restart |
| |
| Quand vous accédez à la tablette via SSH à partir d'un autre ordinateur, vous devez vous rappeler que l'utilisateur par défaut est « phablet », aussi, en supposant que 192.168.0.117 est l'adresse IP de la tablette, essayez : |
| |
| ssh phablet@192.168.0.117 |
| |
| L'accès par root via SSH et un accès sans mot de passe peuvent être configurés normalement. |
| |
| |
| |
| ===== 8 ===== |
| |
| **Since SSH has support for file copying, the scp and rsync commands will work to transfer files to and from the tablet. SFTP will also work, enabling most desktop managers to mount the device’s filesystem over the network. |
| |
| A second service that may be of use is a web-server. Apache is a likely candidate: |
| |
| # apt-get install apache2 |
| |
| Once working, we could investigate options such as using Apache for webDAV. This would mean that once up, any other devices (or computers) on the same network could access files on the device, and if using webDAV-enabled software (such as Cadaver) could upload files to the device. Some calendar systems like to use webDAV to synchronize items. |
| |
| Windows file-sharing is easily enabled. Just install Samba, and the configuration file /etc/samba/smb.conf. Do not forget to add a samba password to user phablet! So: |
| |
| # apt-get install samba |
| |
| # vi /etc/samba/smb.conf |
| |
| # smbpasswd -a phablet |
| |
| # service smbd restart** |
| |
| Puisque SSH prend en charge la copie de fichiers, les commandes scp et rsync fonctionneront pour transférer des fichiers vers, et à partir de, la tablette. SFTP fonctionnera également, ce qui permettra à la plupart des gestionnaires de bureau de monter le système de fichiers du dispositif à partir du réseau. |
| |
| Un deuxième service qui peut être utile est un serveur Web. Apache est un candidat probable : |
| |
| # apt-get install apache2 |
| |
| Une fois que tout cela fonctionnera, nous pourrions explorer certaines options telles que l'utilisation d'Apache pour webDAV. Cela voudrait dire qu'une fois en fonctionnement, les autres dispositifs (ou ordinateurs) sur le même réseau pourraient accéder aux fichiers sur le dispositif et - si un logiciel où webDAV (tel que Cadaver) est activé - pourraient envoyer des fichiers vers le dispositif. Certains systèmes d'agenda aiment utiliser webDAV pour synchroniser des éléments. |
| |
| Le partage des fichiers avec Windows est facile à activer. Il suffit d'installer Samba et le fichier de configuration /etc/samba/smb.conf. N'oubliez pas d'ajouter un mot de passe pour samba à l'utilisateur phablet ! Ainsi : |
| |
| # apt-get install samba |
| |
| # vi /etc/samba/smb.conf |
| |
| # smbpasswd -a phablet |
| |
| # service smbd restart |
| |
| |
| |
| ===== 9 ===== |
| |
| **From another computer, we can now navigate through the network and log into our device. Try connecting to address <nowiki>“smb://phablet@192.168.0.117”</nowiki> (substituting your device’s IP address). It is always nice to see a mere mobile device recognized as a full-blown server. |
| |
| For extra Geek points, install a git repository and use it to work collaboratively on a project with other people. Doing a commit to your phone is probably not within the bound of normal users’ experience. |
| |
| Finally, an easy - and elegant - way of sharing the music and/or videos from your device to the local network is using a Universal Plug-’n-Play software tool to export your media library. Unfortunately, a complete Home Theatre such as Kodi/XBMC cannot be installed, since it is much too reliant on having a graphical display available. Even standalone mode does not seem to work on Touch. However, smaller UPnP/DLNA tools such as miniupnp do work well. Installation is simply: |
| |
| # apt-get install sqlite minidlna |
| |
===== 3 ===== | |
** | ** |
How many and what kind are available? | |
| |
There are 128 eventflags you can use, numbered from 0 to 127. As they are implemented as 32-bit unsigned integers within the kernel, the eventflags are divided in 4 blocks of 32 each. Because eventflags can be used for different purposes, there are also different eventflags. The first two blocks (or clusters as they are called in VMS) are the process local eventflags (0..31 and 32..63). They can be accessed only by the process itself, and are mainly used when accessing a driver or using a timer. The last two clusters (64..95 and 96..127) are called common eventflags. These clusters exist only when created. | À partir d'un autre ordinateur, nous pouvons maintenant parcourir le réseau et nous connecter à notre dispositif. Essayez de vous connecter à <nowiki>“smb://phablet@192.168.0.117”</nowiki> (en substituant l'adresse IP de votre dispositif). C'est toujours chouette de voir un simple dispositif mobile reconnu comme un serveur à part entière. |
| |
When you create a common eventflag cluster, you have to specify a name for the cluster. If separate processes in the same group (Linux: GID) specify the same name, they will reference the same cluster. This way, processes can synchronize: If one is setting an eventflag in such a cluster when done and the other is waiting for this same eventflag to be set. | Pour des points Geek supplémentaires, installer un dépôt git et l'utiliser pour travailler sur un projet en collaboration avec d'autres personnes. Enregistrer des changements dans un dépôt à partir de votre téléphone est sans doute au-delà de l'expérience d'un utilisateur normal. |
| |
Once created, they are not fixed to your process. You can switch between clusters (in VMS this is called mapping). Be aware that you can map a common eventflag cluster to a different block. In this case, an eventflag mapped to eventflag 64 in one process could be the same as eventflag 96 in another process! You should better avoid this to prevent confusion. | Enfin, une façon simple - et élégante - de partager de la musique et/ou des vidéos de votre dispositif vers le réseau local est d'utiliser un outil logiciel Universal Plug-n-Play pour exporter la bibliothèque de vos média. Malheureusement, il serait impossible d'y installer un système Home Cinéma tel que Kodi/XBMC, car cela dépend trop d'un affichage graphique. Même le mode autonome ne semble pas fonctionner sur Touch. Toutefois, des outils UPnP/DLNA plus petits, tels que miniupnp fonctionnent très bien. Pour l'installer, il suffit de : |
| |
Valid only when tested! | |
| |
To test my functions, I created a program to show/change all eventflags and to create common eventflag clusters. In the past, there have been times I would have paid good money to have such a program when working with VMS. This small program will also be available as open source. | # apt-get install sqlite minidlna |
| |
| ===== 10 ===== |
| |
| **Then, edit files /etc/default/minidlna and /etc/minidlna.conf with appropriate configuration stanzas, such as: |
| |
| media_dir=A,/home/phablet/Music |
| |
| media_dir=V,/home/phablet/Videos |
| |
| and |
| |
| network_interface=wlan0 |
| |
| Reboot the server: |
| |
| # service minidlna restart |
| |
| If there are any problems, you may find some indications on what is happening in the log files: |
| |
| # tail /var/log/minidlna.log |
| |
| From any other computer or tablet on the same network, the tablet’s contents should now be available. For example, on VLC: |
| |
Next month: In the next article, I will go more in-depth on logicals. | |
** | ** |
| |
Combien sont disponibles et de quels types sont-ils ? | Puis, éditer les fichiers /etc/default/minidlna et /etc/minidlna.conf avec les séquences appropriées de configuration, telles que : |
| |
| media_dir=A,/home/phablet/Music |
| |
| media_dir=V,/home/phablet/Videos |
| |
| et |
| |
| network_interface=wlan0 |
| |
| Redémarrez le serveur : |
| |
| # service minidlna restart |
| |
| En cas de problème, vous pourriez sans doute trouver des indications de ce qui se passe dans les fichiers log (journaux) : |
| |
| # tail /var/log/minidlna.log |
| |
| Le contenu de la tablette devrait maintenant être disponible à partir de tout autre ordinateur ou tablette sur le même réseau. Par exemple, sur VLC : |
| |
| |
| ===== 11 ===== |
| |
| **SOME FINAL WORDS |
| |
Vous pouvez utiliser 128 drapeaux, numérotés de 0 à 127. Puisqu'ils sont définis en entiers 32-bit non signés dans le noyau, les drapeaux sont regroupés en 4 blocs de 32. Comme les drapeaux peuvent remplir différents rôles, il y en a aussi de types différents. Les deux premiers blocs (ou clusters selon la terminologie VMS) sont les drapeaux de processus locaux (0..31 et 32..63). Il ne peuvent être manipulés que par les processus, et sont principalement utilisés pour accéder aux pilotes ou utiliser un sablier. Les deux derniers clusters (64..95 et 96..127) sont appelés les drapeaux communs. Ces clusters n'existent que lorsqu'ils sont créés. | Just to conclude, it may be well to consider some security aspects. Configuring a server securely is supposed to be a complex endeavour - and it actually is. The techniques shown above are in essence opening up doors to the world, such that those outside could conceivable use to get in. If you store sensitive information on the device, this could eventually be compromised. |
| |
Lorsque vous créez un cluster de drapeaux communs, vous devez donner un nom au cluster. Si différents processus d'un même groupe (Linux : GID) donne le même nom, ils vont faire référence au même cluster. Ainsi, les processus peuvent se synchroniser : si l'un lève un drapeau dans un de ces clusters lorsqu'il a terminé et qu'un autre est en attente de ce même drapeau. | So it is perhaps best to consider using a mix of security techniques such as strong passwords and encrypted protocols (HTTPs) where available. It is also good practice not to leave less secure services such as Samba (Windows file sharing) and UPnP open on networks you do not fully control. If you do wish to use them, then perhaps it would be best to make sure these servers are not broadcasting on a public network. Some possibilities are to tie them to a particular IP address - one that the device uses on your home network, but not on others -, or simply to have these services off by default and turn them on only when required. |
| |
Une fois créés, ils ne sont plus attachés à votre processus. Vous pouvez changer de cluster (en VMS, on appelle çà la correspondance). Attention de ne pas faire correspondre un cluster de drapeau commun à un bloc différent. Car dans ce cas, le drapeau correspondant au drapeau 64 dans un processus pourrait être le même que le drapeau 96 d'un autre processus ! Vous feriez mieux d'éviter cela pour empêcher la confusion. | With this in mind, there is no lack of interesting projects that can be investigated with an Ubuntu Touch device. Basically, if a Raspberry Pi can handle it, chances are the ‘phone in your pocket can also do so. In any case, it is nice to know that such possibilities are now available to make your device a little more than just a window for browsing the Internet.** |
| |
Ce n'est bon qu'une fois testé ! | Pour conclure |
| |
Pour tester mes fonctions, j'ai créé un programme qui montre/modifie tous les drapeaux et qui crée les clusters de drapeaux communs. Par le passé, il y eu bien des fois où j'aurais payé cher pour avoir un programme comme celui-ci quand je travaillais sous VMS. Ce petit programme sera aussi disponible en Open Source. | Enfin, il serait souhaitable de s'intéresser à certains aspects de la sécurité. Configurer un serveur sûr est censé être une tâche complexe, et ça l'est. Les techniques décrites ci-dessus ouvrent des portes vers le monde, des portes par lesquelles ceux à l'extérieur pourraient éventuellement entrer dans votre système. Si vous stockez des informations sensibles sur le dispositif, elles pourraient être compromises à la longue. |
| |
Le mois prochain : dans le prochain article, j'explorerai la logique (logicals) plus en détail. | Ainsi, vaut peut-être mieux envisager d'utiliser un mélange de techniques sécuritaires, telles que des mots de passe forts et des protocoles encryptés (HTTPs) quand ils sont disponibles. La bonne pratique veut que des services moins sûrs comme Samba (partage de fichiers avec Windows) et UPnP ne restent pas ouverts sur des réseaux que vous ne contrôlez pas entièrement. Si vous voulez les utiliser néanmoins, alors vous devriez sans doute vous assurer que ces serveurs n'émettent pas sur un réseau public. Vous pourriez par exemple les lier à une seule adresse IP spécifique - une que le dispositif utilise sur votre réseau domestique, mais pas sur d'autres -, ou tout simplement de garder ces services inactifs par défaut et de les activer uniquement quand c'est nécessaire. |
| |
| Tout en gardant la sécurité à l'esprit, les projets intéressants, utilisables sur un dispositif sous Ubuntu Touch, ne manquent pas. Essentiellement, si un Raspberry Pi peut le gérer, il y a de fortes chances que le téléphone dans votre poche peut le faire aussi. Quoi qu'il en soit, il est bon de savoir qu'il est possible maintenant de faire de votre dispositif plus qu'une simple fenêtre pour naviguer sur Internet. |