Building an installer package for Privileges.app

One of the open-source contributions by the Apple@SAP team has been Privileges.app, a tool designed to grant or take away administrator rights from accounts on macOS. The general idea behind Privileges is that it allows people to work with the account privileges of a standard user for day-to-day use, but allows them to get administrator rights when needed.

Documentation for Privileges.app can be found at the GitHub repo which hosts it, which is available via the link below:

https://github.com/SAP/macOS-enterprise-privileges

However, one item not included in that documentation is how to package it for deployment. Instead, AutoPkg recipes were written and made available to automate the packaging process:

However, not everyone is able to use AutoPkg in their environment, so manual packaging instructions are now available here. For more details, please see below the jump:

Downloading the latest release of Privileges

Privileges.app is available for download from GitHub, via the following link:

https://github.com/SAP/macOS-enterprise-privileges/releases/latest

From there, click on the Privileges.zip download link.

Screen Shot 2019 03 20 at 8 56 09 AM

 

Once uncompressed, Privileges.app is self-contained and can be installed via drag and drop.

Screen Shot 2019 03 20 at 9 28 56 AM

 

Packaging Privileges.app

Pre-requisites:

 

1. Set up a new Packages project and select Raw Package.

Screen Shot 2019 03 20 at 9 29 38 AM

2. In this case, I’m naming the project Privileges and storing the project files in my home folder.

Screen Shot 2019 03 20 at 9 29 51 AM

 

3. Once the Packages project opens, click on the Project tab. You’ll want to make sure that the your information is correctly set here (if you don’t know what to put in, check the Help menu for the Packages User Guide. The information you need is in Chapter 4 – Configuring a project.)

Screen Shot 2019 03 20 at 9 30 38 AM

In this example, I’m not changing any of the options from what is set by default.

4. Next, click on the Settings tab. In the case of my project, I want to install with root privileges and not require a logout, restart or shutdown.

To accomplish this, I’m choosing the following options in the Settings section:

In the Tag section:

  • Identifier: set as appropriate (for my installer, I’m using com.companyname.pkg.Privileges
  • Version: set as appropriate (for my installer, I’m usings 1.0.3 )

In the Post-installation Behavior section:

  • On Success: should be set to Do Nothing

In the Options section:

  • Require admin password for installation should be checked
  • Relocatable should be unchecked
  • Overwrite directory permissions should be unchecked
  • Follow symbolic links should be unchecked

Screen Shot 2019 03 20 at 9 31 25 AM

7. Select the Payload tab.

Screen Shot 2019 03 20 at 9 31 35 AM

8. Select the Applications directory.

Screen Shot 2019 03 20 at 9 32 05 AM

9. Under the Hierarchy menu, select Add Files…

Screen Shot 2019 03 20 at 9 32 15 AM

 

10. Select Privileges.app.

Screen Shot 2019 03 20 at 9 33 29 AM

Screen Shot 2019 03 20 at 9 35 13 AM

 

11. By default, the permissions for the app will be as follows:

Owner: root
Group: admin
Access: drwxr-xr-x

Screen Shot 2019 03 20 at 9 35 14 AM

 

Change the permissions to match the following:

Owner: root
Group: wheel
Access: drwxr-xr-x

Screen Shot 2019 03 20 at 9 35 23 AM

12. Select the Scripts tab.

Screen Shot 2019 03 20 at 9 35 32 AM

The last part is adding a preinstall script and postinstall script. Here’s the preinstall script being used for this installer package:

If not already selected, select the preinstall script and add it to the project.

Note: This is the same preinstall script used by the AutoPkg .pkg recipe for Privileges.

Screen Shot 2019 03 20 at 9 36 55 AM

Screen Shot 2019 03 20 at 9 37 02 AM

 

Here’s the postinstall script being used for this installer package:

If not already selected, select the postinstall script and add it to the project.

Note: This is the same postinstall script used by the AutoPkg .pkg recipe for Privileges.

Screen Shot 2019 03 20 at 9 37 21 AM

Screen Shot 2019 03 20 at 9 37 27 AM

 

13. Build the package. (If you don’t know to build, check the Help menu for the Packages User Guide. The information you need is in Chapter 3 – Creating a raw package project and Chapter 10 – Building a project.)

Testing the installer

Once the package has been built, test it by installing it on a test machine which has the following:

  • Does not have Privileges.app installed

Screen Shot 2019 03 20 at 9 38 27 AM

The end result should be that Privileges.app installs into /Applications and is able to do the following tasks:

  1. Grant admin rights to a standard user
  2. Take away admin rights from an admin user

Screen Shot 2019 03 20 at 11 01 53 AM

Checking the SSL certificate used by an Active Directory domain controller

Yesterday, Jamf sent out the following notification in advance of the release of Jamf Pro 10.11.0:

One part of the message which caused some concern is this section:

Additionally, any LDAP server connections using LDAPS will require that the hostname of the LDAP server match the Common Name (CN) on the certificate that is uploaded to the Jamf Pro Server. A mismatch will prevent communication between the LDAP server and Jamf Pro Server.

What’s being referred to here is what’s known as an SSL hostname mismatch error, which is a sign that the SSL certificate being used to secure the connection isn’t configured correctly. But how can you tell with the SSL certificate used on an Active Directory domain controller? For more details, please see below the jump.

You can use the following openssl command to pull information about the SSL certificate used on your AD domain controller.

openssl s_client -connect servername_goes_here:636

You’ll need to replace servername_goes_here with the actual DNS hostname of your AD domain controller. For example, if your AD domain controller is named server.mycompany.local, you would use the following command:

openssl s_client -connect server.mycompany.local:636

When you run the command, you should get a block of text that looks similar to this:

Screen Shot 2019 03 19 at 9 07 20 AM

Copy out the Server certificate section, between (and including) —–BEGIN CERTIFICATE—– and —–END CERTIFICATE—— and put the copied text into a text editor.

Screen Shot 2019 03 19 at 9 07 21 AM

From there, save it as a .cer file.

Screen Shot 2019 03 19 at 9 28 25 AM

 

Once saved as a .cer file, you’ll be able to check the certificate using QuickLook and see what the certificate’s common name (CN) is.

Screen Shot 2019 03 19 at 8 54 08 AM

FreeBSD sur un ThinkPad <br> FreeBSD on a ThinkPad

Mon portable donnait des signes de faiblesse. Le clavier abîmé par le chat qui le prenait pour dormir, le support de FreeBSD lui-même qui était aléatoire. Son âge aussi, plus de 3 ans. Et je l’ai un peu mal traité.

Je me suis donc décidé à le changer. Après un rapide sondage sur la page Facebook de FreeBSD, il s’avère que les portables qui sont le mieux supportés par FreeBSD sont les ThinkPad de Lenovo, version X ou T. Les T sont bien plus cher que les X, j’ai donc opté pour un X280.

English version below

La configuration du portable

J’ai décidé, même si c’est un peu cher, d’avoir un portable bien pourvu. J’ai donc choisi d’avoir 16Go de RAM, un SSD de 512Go, un core i7 de 8e génération à 4,00Ghz. j’ai également choisi, et c’est l’un des points fort des portables de grandes marques, un clavier QWERTY.

Comme prévu, j’étais absent lors de la première présentation du colis. J’ai patienté le lendemain pour avoir mon précieux.

Déballage

La machine est bien emballée, sans fioriture à la « Apple ». l’alimentation est au standard de l’Union Européenne, via un connecteur USB-c. Pas de superflu, pas de CD/DVD. La machine est livrée avec Windows 10.

Un très bon point pour cette machine, elle dispose d’un cache webcam.

Sauvegarde de Window10

Après certains déboires avec la machine précédente, j’ai appris qu’il fallait conserver un Windows d’origine dans un coin. C’est utile pour faire les mises à jour du firmware de la machine qui ne sont fournies que pour cet OS.

Microsoft propose un outil sur son site pour faire une clef USB de secours. En fait, il suffit de télécharger l’image ISO de Windows et de la mettre sur le support désiré.

Il faut bien sûr s’assurer quel le support est bootable avant de tout casser.

Mise à jour du l’UEFI sans Windows

Il semble qu’il soit possible de mettre à jour l’UEFI en utilisant une image ISO téléchargable ici.

Je dois avouer que je ne l’ai pas fait, de peur de tout perdre. Pensez à faire DES sauvegardes.

Téléchargement de l’image FreeBSD 12.0-RELEASE

Pour télécharger la bonne image, rendez-vous sur site de FreeBSD. Je l’ai fait sur mon ancienne machine pour bénéficier des outils que je connais bien pour mettre cette image sur une clef USB.

La commande utilisée couramment pour copier une image sur une clef USB est dd(1) :

# dd if=/chemin/vers/limage.img of=/chemin/vers/le/périphérique

Malheureusement, la commande dd(1) ne donne aucun état d’avancement du processus, c’est frustrant et on peut se demander s’il n’est pas planté. C’est là que la commande pv(1) vient à notre secours.

# pv -tepb FreeBSD-12.0-RELEASE-amd64-memstick.img | dd of=/dev/da0
1% [=                                                              ]

Configuration UEFI/BIOS sur le ThinkPad

L’image de FreeBSD-12.0-RELEASE et l’OS lui même peuvent démarrer directement sur l’UEFI. Vérifiez que l’ordre de test est bien [UEFI first then BIOS]

Une fois ces opérations réalisées, on peut démarrer sur la clef USB et commencer l’installation. Choisissez les options que vous désirez. J’ai opté pour une installation sur ZFS chiffré. Le processus d’installation est extrêmement rapide.

En plus du mot de passe root qui vous est demandé, pensez à créer tout de suite un autre utilisateur, celui de tous les jours.

J’ai choisi le même UID/GID que mon utilisateur sous GNU/Linux au travail pour faciliter les échanges de fichiers. Pensez ausi à ajouter votre utilisateur au groupe wheel

L’installation terminée il faut redémarrer et penser à retirer la clef USB de son port.

Ça démarre et après

Il est temps de se connecter et de constater que l’on a pas grand-chose et en particulier, pas de réseau WiFi.

La connexion au réseau WiFi

Il faut déterminer le matériel présent dans la machine et trouver le bon pilote à charger dans le noyau.

# pciconf -lvc
…
iwm0@pci0:59:0:0:	class=0x028000 card=0x00108086 chip=0x24fd8086 rev=0x78 hdr=0x00
    vendor     = ’Intel Corporation’
    device     = ’Wireless 8265 / 8275’
    class      = network
…

Nous voilà renseignés, il s’agit d’une carte intel wireless 8265/8275. Les trois premières lettres nous renseignent même sur le pilote à utiliser, ici : iwm.

Le fichier /boot/loader.conf

C’est dans ce fichier que nous allons demander le chargement du pilote au démarrage du noyau.

if_iwm_load="YES"
iwm8265fw_load="YES"
wlan_ccmp_load="YES"
wlan_tkip_load="YES"

Le fichier /etc/rc.conf

Dans ce fichier nous allons créer un alias vers le pilote que nous venons définir dans /boot/loader.conf. Nous allons également indiquer les options que le périphérique WiFi devrait utiliser pour fonctionner. Ainsi, nous lui indiquons qu’il devrait prendre son adresse via DHCP :

background_dhclient="YES"
wlans_iwm0="wlan0"
ifconfig_wlan0="WPA SYNCDHCP powersave"

La demande de DHCP en tâche de fond permet de ne pas bloquer le processus de démarrage si par malchance aucun serveur DHCP ne pouvait nous répondre. C’est le même principe qui procède de l’option SYNCDHCP. L’option WPA sert à mettre en place les connexions chiffrées via le protocole idoine et indique par la même que nous allons utiliser un fichier de configuration supplémentaire.

Le fichier /etc/wpa_supplicant

Ce fichier va stocker les informations des différents réseaux WiFi/WPA que vous allez utiliser. Chez vous, dans votre entreprise, à l’hôtel, dans le train, etc. Commençons par le réseau le plus proche de vous.

Chaque bloc network correspond à un réseau différent.

network={
        ssid="Maison-sucree-Maison"
        bssid=aa:bb:cc:dd:ee:ff
        key_mgmt=WPA-PSK
        proto=RSN
        psk="ilestpasbeaumonmotdepasse"
}

1

Lors du lancement du daemon wpa_supplicant, celui-ci va scanner les réseaux environnants et s’il trouve une correspondance avec l’un de ceux définis dans votre fichier de configuration, il y a des chances pour que la connexion se fasse toute seule.

Un petit test

Il est temps de tester notre configuration en relançant les différents éléments nécessaires. En fait, le redémarrage du réseau suffit a lancer aussi wpa_supplicant et la demande d’une adresse IP au serveur DHCP (pourvu que vous en ayez un opérationnel à portée d’ondes).

# service netif restart

La commande ifconfig nous renseigne sur l’état de notre connexion :

# ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	ether a1:b2:c3:d4:e5:f6
	hwaddr a1:b2:c3:d4:e5:f6
	inet 11.22.33.44 netmask 0xffffff00 broadcast 11.22.33.255
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	media: IEEE 802.11 Wireless Ethernet DS/2Mbps mode 11g
	status: associated
	ssid Maison-sucree-Maison channel 11 (2462 MHz 11g) bssid aa:bb:cc:dd:ee:ff
	regdomain FCC country US authmode WPA2/802.11i privacy ON
	deftxkey UNDEF AES-CCM 2:128-bit powersavemode CAM powersavesleep 100
	txpower 30 bmiss 10 scanvalid 60 protmode CTS wme roaming MANUAL
	groups: wlan 

On dirait que le réseau WiFi fonctionne.

Mise à jour du système

À partir du moment où le réseau fonctionne, il est possible, voire nécessaire de faire les mises à jours des logiciels installés de base.

bootstrap du système de gestion de paquet

Il est indispensable que le système de paquet (pkg(7)) ait connaissance des paquets disponibles sous format binaire, si c’est ce que vous voulez utiliser.2

Mise à jour des paquets déjà installés

La mise à jour se fait avec le même utilitaire :

# sudo pkg upgrade

Le bluetooth

Malgré tous mes efforts, je n’arrive pas à le faire fonctionner. Un trou en moins dans la sécurité du portable ☺.

La carte graphique

De nos jours il devient difficile de se passer d’une interface graphique (même si ce blog est écrit avec vim(1) et que j’utilise mutt(1) pour gérer mon courrier électronique.

En fait, l’installation d’une interface graphique avec Xorg fonctionne presque toute seule. J’ai choisi mate (ex gnome2).

# sudo pkg install mate-common

La configuration de Xorg

On arrive à la partie la plus compliquée de l’installation. Longtemps, j’ai utilisé le pilote vesa(4x). Ce pilote est lent et ne permet pas à la machine de donner son plein potentiel. Heureusement il existe un autre pilote, i915kms. Il suffit de le charger au lancement de la machine, dans le fichier /boot/loader.conf en ajoutant la ligne :

kld_list="/boot/modules/i915kms.ko"

Dans le répertoire /usr/local/etc/X11/xorg.conf.d on ajoute un fichier driver.intel.conf pour utiliser ce pilote :

1
2
3
4
5
6
7
8
9
Section "Device"
        Option          "AccelMethod"
        Option          "TripleBuffer"
        Option          "HotPlus"
        Option          "TearFree"
        Identifier      "Card0"
        Driver          "intel"
        BusID           "PCI:0:2:0"
EndSection

La prise en compte se fera au prochain redémarrage ou, si vous avez chargé le pilote drm-next3, au prochain redémarrage de l’interface graphique.4

La console de connexion

Avec Mate, il n’y a pas de gestionnaire de connexions graphique prévu. Le seul logiciel qui fonctionne correctement bien qu’abandonné est SLiM. Fort heureusement, il fait encore partie des ports *BSD. Nous allons donc pouvoir l’installer tranquillement.

# pkg install slim-freebsd-themes slim-themes

Nous en profitons pour installer les thèmes spécifiques à FreeBSD et d’autres thèmes.

Le fichier de configuration est /usr/local/etc/slim.conf. La seule modification est le choix du thème. Ceux-ci se trouvent dans /usr/local/share/slim/themes/. Tous (ou presque) présentent une image de prévisualisation, à vous de choisir celui qui vous sied le plus.5

Il existe des alternatives à slim : gdm, xdm, sddm etc. Je vous laisse les découvrir.

Il faut aussi demander au système de lancer le daemon slim au démarrage. Cela se fait en ajoutant la ligne slim_enabled="YES" dans le fichier /etc/rc.conf. Par exemple ainsi :

# sysrc slim_enabled="YES"

Le touchpad

En fait, le touchpad fonctionne sans configuration. Il est assez étrange de ne pas trouver de panneau de contrôle pour le gérer. C’est donc en chargeant un module noyau et en changeant des valeurs pour Xorg que l’on arrive à avoir une configuration optimale.

Prise en charge par le noyau

Dans le fichier /boot/loader.conf, il faut ajouter la ligne :

hw.psm.synaptics_support="1"

Configuration de Xorg

Pour cette configuration, nous allons copier le fichier fourni par défaut /usr/local/share/X11/xorg.conf.d/70-synaptics.conf dans le répertoire /usr/local/etc/X11/xorg.conf.d.

# sudo cp /usr/local/share/X11/xorg,d/70-synaptics.conf /usr/local/etc/X11/xorg.conf.d/.

Puis le modifier à notre sauce :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
EndSection

Section "InputClass"
        Identifier "touchpad ignore duplicates"
        MatchIsTouchpad "on"
        MatchOS "Linux"
        MatchDevicePath "/dev/input/mouse*"
        Option "Ignore" "on"
EndSection

Section "InputClass"
        Identifier "enable synaptics SHMConfig"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
        Option "SHMConfig" "true"
EndSection

Section "InputDevice"
        Identifier "Mouse0"
        Driver "mouse"
        Option "Protocol" "auto"
        Option "Device" "/dev/sysmouse"
        Option "ZAxisMapping" "4 5 6 7"
EndSection

ZAxisMapping 4 5 6 7 représentent les boutons de la souris et les déplacements verticaux.

Pour avoir le ¨Natural Scrolling¨, vous pouvez ajouter le fichier /usr/local/etc/X11/xorg.conf.d/20-natural-scrolling.conf qui contient :

1
2
3
4
5
6
7
8
Section "InputClass"
        Identifier "Natural Scrolling"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Option "VertScrollDelta" "-1"
        Option "HorizScrollDelta" "-1"
        Option "DialDelta" "-1"
EndSection

Les touches « spéciales »

Le clavier de mon X280 comporte des touches spéciales pour gérer le son (plus/moins/silence) et la luminosité de l’écran. Ces fonctions marchent avec les combinaisons de touches Fn+F1 (silence), Fn+F2 (moins), Fn+F3 (plus), Fn+F5 (moins de luminosité) et Fn+F6 (plus de luminosité).

Dans l’interface graphique

Malheureusement ces combinaisons de touches ne fonctionnent pas par défaut. Il faut ajouter le port graphics/intel_backlight et le tester de façon simple :

# sudo pkg install intel_backlight
# intel_backlight decr 15

La luminosité devrait diminuer de 15 %. Utilisez plusieurs fois la dernière commande pour vérifier que le changement est significatif. Pour augmenter la luminosité il suffit de remplacer decr par incr.

Si cela fonctionne, il vous reste à configurer ces combinaisons dans les raccourcis clavier de votre interface graphique.

Dans le même temps reconfigurer, les raccourcis par défaut pour le son.6

Dans le UEFI/BIOS

Il est possible, dans le UEFI/BIOS, de faire en sorte que les touches de fonction soient accessibles sans passer par la touche Fn. Cela peut faciliter la vie.

Conclusion

FreeBSD sur un Thinkpad X280, cela fonctionne. Il y a deux petites choses qui me dérangent :

  • impossible de désactiver le touchpad pendant la frappe au clavier. Un survol trop proche avec le pouce peut envoyer le curseur bien loin de la ligne que vous êtes en train d’écrire ;
  • le bluetooth qui ne fonctionne pas ;

Cette installation est la mienne et me convient. Je ne me prétend par expert et d’autres peuvent sans doute faire mieux.

Lien externe

Je vous conseille de télécharger et de garder avec vous le PDF dont voici le lien :

English version



My laptop was at the end of its life. 3 years old only, but the keyboard was used by the cat to sleep, the FreeBSD support was not really good and I wasn’t very soft with it.

So I decided to change. After asking the Facebook FreeBSD User Group I decided to buy a Lenovo X280 with a 500GB SSD, 16GB of memory and an Intel Corei7 8th generation, 4.00Ghz.

The package

The computer is very well packed, with no fioriture like Apple did. Standard EU power Supply with USB-c connector. Nothing more, no CD/DVD. The computer is delivered with Windows 10.

Very good point, there is a hard webcam cache (a small slider, to cover the lens).

Windows 10 Backup

With the previous machine, I learned that we should always copy of the original OS. It’s the only way to make the firmware update for example.

Microsof provide a tool, on his website in order to make a rescue usb key. In fact, It’s only an ISO image of Windows to put on the USB volume.

Be sure to boot with this support before break everything.

UEFI update whitout Windows

It seems possible to update the UEFI by downloading a bootable ISO image, here.

I did not try by fear to lose everything. If you decide to do it, make backups.

Downloading FreeBSD 12.0-RELEASE

In order to download the right image please visit the official FreeBSD website. I used to do this download on my old laptop (wich was already on FreeBSD) to use tools that I really know to make a bootable USB key.

The main command to copy an image to another support is dd(1):

# dd if=/path/to/image.img of=/path/to/support

Unfortunately, dd(1) does not provide any feedback. It’s frustrating and you can ask yourself if the process is not broken. The command pv(1) can help us.

# pv -tepb FreeBSD-12.0-RELEASE-amd64-memstick.img | dd of=/dev/da0
1% [=                                                              ]

Configure UEFI/BIOS on ThinkPad

The FreeBSD-12.0-RELEASE usbstick and the OS itself could boot on UEFI. Be sure that the boot sequence is [UEFI first then BIOS]

Once you did it, boot on the USB key and start the installation. Pick the options you want/need. I choose to install a encrypted ZFS. A passphrase will be asked during the installation process and asked every time the system boot.

The installation process is pretty fast.

You will ask to choose a root password. The install process will also ask for creating another user in order to NOT work as root.

I choosed the same uid/gid as my user on GNU/linux at work in order to exchange files with no owner difficulties. Remember to invite your user in the wheel group.

Once the installation finished, it’s time to reboot and remove the USB key.

Well it’s booting, and after

Log in and you’ll notice that we don’t have a lot of things that works, especially no WiFi.

The WiFi connection

We need to find which hardware is on the computer in order to find the right driver to load in the kernel.

# pciconf -lvc
…
iwm0@pci0:59:0:0:	class=0x028000 card=0x00108086 chip=0x24fd8086 rev=0x78 hdr=0x00
    vendor     = 'Intel Corporation'
    device     = 'Wireless 8265 / 8275'
    class      = network
…

Here is the answer, it’s an intel wireless 8265/8275 wireless card. The first third letter give us the driver to use, iwm.

The /boot/loader.conf file

In this file we will put a lot of information about the boot sequence and the driver to load in the kernel.

if_iwm_load="YES"
iwm8265fw_load="YES"
wlan_ccmp_load="YES"
wlan_tkip_load="YES"

The /etc/rc.conf file

In this file, we describe which services to start automatically at boot.

Here we’re gonna make an alias for the driver put in /boot/loader.conf file. We also define the option for the WiFi device had to use in order to work. Therefore we say it to find it’s IP Address using DHCP:

background_dhclient="YES"
wlans_iwm0="wlan0"
ifconfig_wlan0="WPA SYNCDHCP powersave"

The DHCP request in background allow to not slow down the other boot processes if there is no responding DHCP server. It’s the same for SYNCDHCP. The option WPA is used to prepare the encrypted connection with the WPA protocol. We will use another file to describe the connection itself.

The /etc/wpa_supplicant file

In this file we will have the informations for all the known WiFi connections. At home, at work, in the train, at the hotel, etc. Starting with the nearest network.

Each network block is a different network.

network={
        ssid="Home-Sweet-Home
        bssid=aa:bb:cc:dd:ee:ff
        key_mgmt=WPA-PSK
        proto=RSN
        psk="whatawonderfulpasswordisntit"
}

7

When the daemon wpa_supplicant starts, it’s gonna scan the Wi-Fi networks around you and look if one is already known. If it is the case, the connection will be esthablished automatically.

A small test

It’s time to test your configuration by relaunching all the necessary parts. In fact, restarting the network itself will launch wpa_supplicant to and the request for an IP address to a DHCP should work if you have a fonctional server.

# service netif restart

The ifconfig command give us information about our connections:

# ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	ether a1:b2:c3:d4:e5:f6
	hwaddr a1:b2:c3:d4:e5:f6
	inet 11.22.33.44 netmask 0xffffff00 broadcast 11.22.33.255 
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	media: IEEE 802.11 Wireless Ethernet DS/2Mbps mode 11g
	status: associated
	ssid Home-Sweet-Home channel 11 (2462 MHz 11g) bssid aa:bb:cc:dd:ee:ff 
	regdomain FCC country US authmode WPA2/802.11i privacy ON
	deftxkey UNDEF AES-CCM 2:128-bit powersavemode CAM powersavesleep 100
	txpower 30 bmiss 10 scanvalid 60 protmode CTS wme roaming MANUAL
	groups: wlan 

It looks like a WiFi connection is established.

System update

Once network is working, you have to update default installed software.

bootstrap of the Package Manager System

It’s mantadory for the package manager (pkg(7)) to know which packages are available in binary format, if this is the way you want to install softwares.8

# sudo pkg

Update of the already installed packages

The update use the same pkg(7) command:

# sudo pkg upgrade

The bluetooth

Despite all my efforts and searches, I cannot find a way to make it working. This is a security hole fixed!

The graphic card

Nowadays it’s really difficult to not use a graphical interface (even though this blog is written with vim(1) and I use mutt(1) to manage my emails.

In fact, the graphic card installation with Xorg works almost by itself. I chose the mate (ex gnome2) desktop environment.

# sudo pkg install mate-common

Xorg configuration

This is the most complicated part of the installation. During a long time I used the vesa(4x) driver. This driver is very slow and does not allow the computer to be used at is full potential. Fortunately there is another driver, i915kms. You just have to load it at the machine boot. This is done by inserting a new line in /boot/loader.conf:

kld_list="/boot/modules/i915kms.ko"

In the /usr/local/etc/X11/xorg.conf.d we have to add a configuration file for the driver, driver.intel.conf:

1
2
3
4
5
6
7
8
9
Section "Device"
        Option          "AccelMethod"
        Option          "TripleBuffer"
        Option          "HotPlus"
        Option          "TearFree"
        Identifier      "Card0"
        Driver          "intel"
        BusID           "PCI:0:2:0"
EndSection

The file will be used at the next reboot or, if you already loaded the i915kms9 driver, the next time you restart the graphical interface10

Console login

Mate doesn’t provide any graphical login interface. The only working software is an abandonned software named SLiM. Fortunately it is still in the *BSD ports. We just have to install it:

# pkg install slim-freebsd-themes slim-themes

We install themes at the same time.

The configuration file is /usr/local/etc/slim.conf. The only modification we have to do is the theme choice. The themes are in /usr/local/share/slim/themes. Almost every one of them provide a preview image letting you choose the one your prefer11.

You also need to ask the system to launch the slim daemon during the boot. You can do it by adding the line slim_enabled="YES" in the /etc/rc.conf file or by using the command sysrc(8).

# sysrc slim_enabled="YES"

There are other display managers like gdm, xdm, sddm. I let you discover them.

The TouchPad

In fact, the Touchpad work out of the box. But it’s very strange to not have a control panel for it. In order to have an optimal configuration we will change some kernel parameters and values in Xorg configuration.

Load the driver into the kernel

Add this line into your /boot/loader.conf file:

hw.psm.synaptics_support="1"

Xorg additionnal configuration

For this configuration we are going to copy the defaults provided file /usr/local/share/X11/xorg.conf.d/70-synaptics.conf in the /usr/local/etc/X11/xorg.conf.d/ folder:

# sudo cp /usr/local/share/X11/xorg,d/70-synaptics.conf /usr/local/etc/X11/xorg.conf.d/.

Then modify it for our use:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
EndSection

Section "InputClass"
        Identifier "touchpad ignore duplicates"
        MatchIsTouchpad "on"
        MatchOS "Linux"
        MatchDevicePath "/dev/input/mouse*"
        Option "Ignore" "on"
EndSection

Section "InputClass"
        Identifier "enable synaptics SHMConfig"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
        Option "SHMConfig" "true"
EndSection

Section "InputDevice"
        Identifier "Mouse0"
        Driver "mouse"
        Option "Protocol" "auto"
        Option "Device" "/dev/sysmouse"
        Option "ZAxisMapping" "4 5 6 7"
EndSection

ZAxisMapping 4 5 6 7 are the mouse bouton and vertically scrolls

In order to have the ¨Natural Scrolling¨, you can add another fonfiguration file called /usr/local/etc/X11/xorg.conf.d/20-natural-scrolling.conf:

1
2
3
4
5
6
7
8
Section "InputClass"
        Identifier "Natural Scrolling"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Option "VertScrollDelta" "-1"
        Option "HorizScrollDelta" "-1"
        Option "DialDelta" "-1"
EndSection

The “specials” keys

On my X280 keyboard there are special keys to manage sound (increase/decrease/muted) and the screen brightness. Those functions work the shortcut Fn+F(muted), Fn+F2 (decrease), Fn+F3 (increase), Fn+F5/Fn+F6 (brightness).

In the graphical interface

Unfortunately those shorcuts does not work out of the box. We need to add the port graphics/intel_backlight and test it with a very simple command:

# sudo pkg install intel_backlight
# intel_backlight decr 15

The bightness of your screen decrease by 15%. Use the last command several times to see if it really changes. To increase brightness just replace decr by incr.

If it works, you just have to configure those shortcuts in the graphical interface.

In the same time configure the sound keys.12

In the UEFI/BIOS

You can, in the UEFI/BIOS switch Function keys to get utility shortcuts without Fn key rather than F-X keys. It could be interesting.

To conclude

FreeBSD on a Thinkpad X280, it works, Just three little things annoys me:

  • I don’t find a way to automatically disable the touchpad when I use the keyboard. Therefore the cursor sometimes goes away to another line;
  • the Bluetooth does not work.

This installation is mine and is ok for me. I am not an expert and some may have other methods, other tricks.

External Link

Maybe it’s a good idea to download and keep on backup this document:

  1. Ne rêvez pas, les informations reproduites ici ne sont pas celles d’un réseau Wi-Fi de ma connaissance. 

  2. C’est ce que j’utiliserais dans cet article. 

  3. avec la commande # sudo kldload i915kms 

  4. que vous pouvez provoquer avec la combinaison CTRL+ALT+Effacement 

  5. Je pense qu’il est assez simple de faire le vôtre à partir de vos plus belles photos. 

  6. Merci à mon ami Bertrand pour m’avoir guidé dans cette configuration et à Porkepix pour les relectures, suggstions et corrections. 

  7. Don’t be silly the informations are not real and are about a network I know. 

  8. This is what I will use all along this blog post. 

  9. with the command # sudo kldload i915kms 

  10. that you can trigger through the shortcut CTRL+ALT+Backspace 

  11. I think you can make yours with your own pictures. 

  12. Thanks to my friend Bertrand who helped me in this configuration and Porkepix for reread, advice and correct. 

Mounting Time Machine local snapshots as read-only volumes

Starting with macOS High Sierra, Time Machine on Apple File System-formatted (APFS) boot drives gained the ability to create APFS snapshots. These snapshots are stored on the boot volume, but are not the same as the local backups that Time Machine uses on HFS+-formatted drives.

On HFS+ formatted drives, Time Machine local backups are stored in an invisible directory named .MobileBackups on the root level of the boot drive.

Screen Shot 2019 02 23 at 10 44 17 AM

In turn, this .MobileBackups directory is mountable as /Volumes/MobileBackups and you can access the backed-up files stored inside by navigating via the command line or Finder window.

Screen Shot 2019 02 23 at 10 59 43 AM

On APFS-formatted drives, the /.MobileBackups directory and /Volumes/MobileBackups are no longer available. Instead, Time Machine is now using APFS snapshots to store a read-only copy of the state of your Mac at the time when that snapshot was taken. These snapshots are invisible to the file system, so unlike HFS+, there isn’t a directory or file you can access. Instead, you now need to use the mount_apfs command’s -s option to mount APFS snapshots as read-only volumes.

Screen Shot 2019 02 23 at 11 45 51 AM

For more details, please see below the jump.

To mount a Time Machine local snapshot as a read-only volume, you will need to first create a directory in a preferred location. This directory will act as the mount point for the snapshot.

For this example, a directory named snapshotbackup will be created in the /tmp directory.

Screen Shot 2019 02 23 at 11 20 20 AM

Next, the snapshot to mount must be identified. The snapshots currently stored on the boot drive can be listed using the following command:

tmutil listlocalsnapshots /

Screen Shot 2019 02 23 at 11 13 43 AM

 

For this example, the following snapshot will be used:

com.apple.TimeMachine.2019-02-23-102421

Screen Shot 2019 02 23 at 11 21 02 AM

 

Once the mount point and snapshot have been identified, a command similar to the one shown below should mount the snapshot:

mount_apfs -s snapshot_name_here backed_up_volume_name_here mountpoint_name_here

For this example, the command should look like this:

mount_apfs -s com.apple.TimeMachine.2019-02-23-102421 / /tmp/snapshotbackup

Screen Shot 2019 02 23 at 11 25 39 AM

The snapshot should then mount and appear as a read-only volume in the Finder.

Screen Shot 2019 02 23 at 11 26 43 AM

Screen Shot 2019 02 23 at 11 26 49 AM

To access the snapshot’s contents via the command line, you will need to access it via the mount point. For this example, this means the following directory path:

/tmp/snapshotbackup

 

Screen Shot 2019 02 23 at 11 29 44 AM

Once finished with the snapshot, it can be unmounted via the command line or the Finder. To unmount via the command line, a command similar to the one shown below should unmount the snapshot:

diskutil unmount mountpoint_name_here

For our example, the following command will unmount the snapshot:

diskutil unmount /tmp/snapshotbackup

Screen Shot 2019 02 23 at 11 34 11 AM

Pleroma in Jail

I used to have a mastodon jail. With the 2.5.0 version it become very hard to maintain and I decided to shut it down and open an account on another instance. But I wasn’t very satisfied by the fail.

So, I decided to try Pleroma which use ActivityPub as mastdon to federated instances. It make Pleroma instances visible by mastodon instances and vice versa.

We start with a functional jail (see my articles in french on this website), with ssh access and use of my poudriere as package repository.

Pre-requisite

Some software are required in order to install pleroma. You must install them on your jail.

Install gmake

# pkg install gmake

Install bash

# pkg install bash

install Elixir

# pkg install elixir

Install postgresql96-server and postgresql96-client

# pkg install postgresql96-server postgresql96-client

add user pleroma

# pw useradd -n pleroma -c "Pleroma user" -s /usr/local/bin/bash -m -w random
<Password for 'pleroma' is: RANDOMGENERATED>

:warning: Be sure to keep the generated password safe

Download pleroma sources

It time to start pleroma installation.

Being pleroma

# su - pleroma
% cd ~

Clonning source

% git clone https://git.pleroma.social/pleroma/pleroma.git

Install dependencies

% cd pleroma
% mix deps.get
warning: the VM is running with native name encoding of latin1 which may cause Elixir to malfunction as it expects utf8. Please ensure your locale is set to UTF-8 (which can be verified by running "locale" in your shell)
!!! RUNNING IN LOCALHOST DEV MODE! !!!
FEDERATION WON'T WORK UNTIL YOU CONFIGURE A dev.secret.exs
Could not find Hex, which is needed to build dependency :plug_cowboy
Shall I install Hex? (if running non-interactively, use "mix local.hex --force") [Yn] y
* creating /home/pleroma/.mix/archives/hex-0.18.2
* Getting phoenix (https://github.com/phoenixframework/phoenix.git)
remote: Enumerating objects: 82, done.
remote: Counting objects: 100% (82/82), done.
remote: Compressing objects: 100% (82/82), done.
remote: Total 39579 (delta 2), reused 68 (delta 0), pack-reused 39497
Receiving objects: 100% (39579/39579), 10.19 MiB | 10.88 MiB/s, done.
Resolving deltas: 100% (25684/25684), done.
* Getting crypt (https://github.com/msantos/crypt)
remote: Enumerating objects: 245, done.
remote: Total 245 (delta 0), reused 0 (delta 0), pack-reused 245
Receiving objects: 100% (245/245), 150.83 KiB | 780.00 KiB/s, done.
Resolving deltas: 100% (104/104), done.
* Getting websocket_client (https://github.com/jeremyong/websocket_client.git)
remote: Enumerating objects: 2, done.
remote: Counting objects: 100% (2/2), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 375 (delta 0), reused 2 (delta 0), pack-reused 373
Receiving objects: 100% (375/375), 81.11 KiB | 839.00 KiB/s, done.
Resolving deltas: 100% (219/219), done.
Resolving Hex dependencies...
Dependency resolution completed:
Unchanged:
  base64url 0.0.1
  bunt 0.2.0
  cachex 3.0.2
  calendar 0.17.4
  certifi 2.3.1
  comeonin 4.1.1
  connection 1.0.4
  cors_plug 1.5.2
  cowboy 1.1.2
  cowlib 1.0.2
  credo 0.9.3
  db_connection 1.1.3
  decimal 1.5.0
  earmark 1.3.0
  ecto 2.2.10
  eternal 1.2.0
  ex_aws 2.1.0
  ex_aws_s3 2.0.1
  ex_doc 0.19.1
  ex_machina 2.2.0
  gen_smtp 0.13.0
  gettext 0.15.0
  hackney 1.13.0
  html_sanitize_ex 1.3.0
  httpoison 1.2.0
  idna 5.1.2
  jason 1.0.0
  jose 1.8.4
  makeup 0.5.5
  makeup_elixir 0.10.0
  meck 0.8.9
  metrics 1.0.1
  mime 1.3.1
  mimerl 1.0.2
  mochiweb 2.15.0
  mock 0.3.1
  mogrify 0.6.1
  nimble_parsec 0.4.0
  parse_trans 3.2.0
  pbkdf2_elixir 0.12.3
  phoenix_ecto 3.3.0
  phoenix_html 2.11.2
  phoenix_pubsub 1.1.1
  plug 1.7.1
  plug_cowboy 1.0.0
  plug_crypto 1.0.0
  poison 3.1.0
  poolboy 1.5.1
  postgrex 0.13.5
  ranch 1.3.2
  ssl_verify_fun 1.1.1
  swoosh 0.20.0
  tesla 1.2.1
  trailing_format_plug 0.0.7
  tzdata 0.5.17
  unicode_util_compat 0.3.1
  unsafe 1.0.0
  web_push_encryption 0.2.1
* Getting plug_cowboy (Hex package)
* Getting phoenix_pubsub (Hex package)
* Getting phoenix_ecto (Hex package)
* Getting postgrex (Hex package)
* Getting gettext (Hex package)
* Getting comeonin (Hex package)
* Getting pbkdf2_elixir (Hex package)
* Getting trailing_format_plug (Hex package)
* Getting html_sanitize_ex (Hex package)
* Getting phoenix_html (Hex package)
* Getting calendar (Hex package)
* Getting cachex (Hex package)
* Getting httpoison (Hex package)
* Getting tesla (Hex package)
* Getting jason (Hex package)
* Getting mogrify (Hex package)
* Getting ex_aws (Hex package)
* Getting ex_aws_s3 (Hex package)
* Getting earmark (Hex package)
* Getting ex_machina (Hex package)
* Getting credo (Hex package)
* Getting mock (Hex package)
* Getting cors_plug (Hex package)
* Getting ex_doc (Hex package)
* Getting web_push_encryption (Hex package)
* Getting swoosh (Hex package)
* Getting gen_smtp (Hex package)
* Getting hackney (Hex package)
* Getting mime (Hex package)
* Getting certifi (Hex package)
* Getting idna (Hex package)
* Getting metrics (Hex package)
* Getting mimerl (Hex package)
* Getting ssl_verify_fun (Hex package)
* Getting unicode_util_compat (Hex package)
* Getting parse_trans (Hex package)
* Getting jose (Hex package)
* Getting poison (Hex package)
* Getting base64url (Hex package)
* Getting makeup_elixir (Hex package)
* Getting makeup (Hex package)
* Getting nimble_parsec (Hex package)
* Getting plug (Hex package)
* Getting plug_crypto (Hex package)
* Getting meck (Hex package)
* Getting bunt (Hex package)
* Getting eternal (Hex package)
* Getting unsafe (Hex package)
* Getting tzdata (Hex package)
* Getting mochiweb (Hex package)
* Getting connection (Hex package)
* Getting db_connection (Hex package)
* Getting decimal (Hex package)
* Getting ecto (Hex package)
* Getting poolboy (Hex package)
* Getting cowboy (Hex package)
* Getting cowlib (Hex package)
* Getting ranch (Hex package)
- Generate configuration

Generate pleroma instance

% mix pleroma.instance gen
…
To get started:
1. Verify the contents of the generated files.
2. Run `sudo -u postgres psql -f 'config/setup_db.psql'`.
3. Run `mv 'config/generated_config.exs' 'config/prod.secret.exs'`.

Copy config/setup_db.psql on PostgreSQL jail

I use an another jail for my PosgreSQL databases (once again look at my article - in french - on this blog). If you have PostgreSQL installed on the Pleroma jail, skip this step.

% scp config/setup_db.psql root@192.168.12.3:/tmp/.

the root password on PostgreSQL jail will be ask

  On the PosgreSQL jail execute as root

Create the role and the database

# sudo -u postgres psql -f '/tmp/setup_db.psql'
CREATE ROLE
CREATE DATABASE
You are now connected to database "pleroma_dev" as user "postgres".
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION

Allow remote connection to the database

Edit the /var/db/pgsql/data96/pg_hba.conf to allow local (or remote depending of you configuration) connexions.

 Back on pleroma jail, as pleroma user

Move generated configuration as production configuration

% mv config/{generated_config.exs,prod.secret.exs}

Run the database migration

% MIX_ENV=prod mix ecto.migrate

Verify the migration on the PosgreSQL jail, login as root

# sudo -u postgres psql -d pleroma_dev
psql (9.6.10)
Type "help" for help.

pleroma_dev=# \dt
                   List of relations
 Schema |            Name             | Type  |  Owner
--------+-----------------------------+-------+---------
 public | activities                  | table | pleroma
 public | apps                        | table | pleroma
 public | filters                     | table | pleroma
 public | lists                       | table | pleroma
 public | notifications               | table | pleroma
 public | oauth_authorizations        | table | pleroma
 public | oauth_tokens                | table | pleroma
 public | objects                     | table | pleroma
 public | password_reset_tokens       | table | pleroma
 public | push_subscriptions          | table | pleroma
 public | schema_migrations           | table | pleroma
 public | user_invite_tokens          | table | pleroma
 public | users                       | table | pleroma
 public | websub_client_subscriptions | table | pleroma
 public | websub_server_subscriptions | table | pleroma
(15 rows)

pleroma_dev=# \q

Back on the pleroma jail as pleroma user

nginx configuration on the host

This is the first part of the configuration, in order to obtain a valid certificate for our host pleroma.example.com.

Let's Encrypt certificate

We use let’s encrypt certificates.

Be sure the host name resolvable

# dig pleroma.example.com

; <<>> DiG 9.12.3-P1 <<>> pleroma.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15552
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;pleroma.example.com.	IN	A

;; ANSWER SECTION:
pleroma.example.com. 86400 IN	A	203.0.113.96

;; Query time: 63 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: lun. déc. 24 13:12:01 CET 2018
;; MSG SIZE  rcvd: 72

nginx basic configuration

server {
    listen 80;
    server_name pleroma.example.com;
        access_log /var/log/nginx/foobar-access.log main;
        error_log /var/log/nginx/foobar-error.log;

     location /.well-known/acme-challenge {
        root /usr/local/www/foobar;
    }

}

Obtain a certificate with certbot

# certbot certonly -d pleroma.exemple.com

Complete nginx configuration

First the SSL part

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
    listen 443 ssl http2;
    # listen [::]:443 ssl http2;
    server_name pleroma.example.com;

    access_log /var/log/nginx/pleroma-access.log main;
    error_log /var/log/nginx/pleroma-error.log;

    ssl_protocols TLSv1.2;
    ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_certificate /usr/local/etc/letsencrypt/live/pleroma.example.com/fullchain.pem;
    ssl_certificate_key /usr/local/etc/letsencrypt/live/pleroma.example.com/privkey.pem;er 
    ssl_dhparam /usr/local/etc/ssl/dhparam.pem;

    location /.well-known/acme-challenge {
        root /usr/local/www/foorbar;
    }
}

Then the proxy_pass part

Must be put before the last }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/activity+json application/atom+xml;

    # the nginx default is 1m, not enough for large media uploads
    client_max_body_size 16m;

    location / {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        proxy_pass http://192.168.12.4:4000;

        client_max_body_size 16m;
    }

    location ~ ^/(media|proxy) {
        proxy_cache pleroma_media_cache;
        slice              1m;
        proxy_cache_key    $host$uri$is_args$args$slice_range;
        proxy_set_header   Range $slice_range;
        proxy_http_version 1.1;
        proxy_cache_valid  200 206 301 304 1h;
        proxy_cache_lock on;
        proxy_ignore_client_abort on;
        proxy_buffering off;
        chunked_transfer_encoding on;
        proxy_pass http://192.168.12.4:4000;
    }

Enable and test the configuration

# ln -s /usr/local/etc/nginx/sites-available/pleroma_jail.conf /usr/local/etc/nginx/sites-enabled/.
# nginx -t

Launch Pleroma on the jail

The next step is to launch and test your pleroma instance:

# su - pleroma
% cd pleroma
% MIX_ENV=prod /usr/local/bin/mix phx.server
…

You should be able to connect to your pleroma instance with the hostname you’ve defined in DNS.

Launch automatically

By default pleroma sources come with startup for OpenBSD and NetNSD, but nothing for FreeBSD. We gonna transform the NetBSD one into a FreeBSD startup script.

Copy the original file

# cp /usr/home/pleroma/pleroma/installation/netbsd/rc.d/pleroma /usr/local/etc/rc.d/pleroma

Edit the new file

  • We need, to reorder the mandatory keyword PROVIDE and REQUIRE1
# REQUIRE: DAEMON pgsql
# PROVIDE: pleroma
  • Change pkg in paths into bin
  • Add some variables:
pleroma_user="pleroma"
pleroma_home="/usr/home/pleroma"
  • Then change the check_pidfile function to be conform to our installation and OS.
check_pidfile()
{
        #pid=$(pgrep -U "${pleroma_user}" /bin/beam.smp$)
        pid=$(pgrep beam.smp$)
        echo -n "${pid}"
}

The complete script

Here is the complete script:2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/sh
# REQUIRE: DAEMON pgsql
# PROVIDE: pleroma

if [ -f /etc/rc.subr ]; then
        . /etc/rc.subr
fi

name="pleroma"
rcvar=${name}_enable
command="/usr/local/bin/elixir"
command_args="--detached -S /usr/local/bin/mix phx.server"
start_precmd="ulimit -n unlimited"
pidfile="/dev/null"
pleroma_user="pleroma"
pleroma_home="/usr/home/pleroma"

pleroma_chdir="${pleroma_home}/pleroma"
pleroma_env="HOME=${pleroma_home} MIX_ENV=prod"

check_pidfile()
{
        #pid=$(pgrep -U "${pleroma_user}" /bin/beam.smp$)
        pid=$(pgrep beam.smp$)
        echo -n "${pid}"
}

if [ -f /etc/rc.subr -a -d /etc/rc.d -a -f /etc/rc.d/DAEMON ]; then
        # newer NetBSD
        load_rc_config ${name}
        run_rc_command "$1"
else
        # ancient NetBSD, Solaris and illumos, Linux, etc...
        cmd=${1:-start}

        case ${cmd} in
            start)
                echo "Starting ${name}."
                 ${start_cmd}
                 ;;

            stop)
                 echo "Stopping ${name}."
                 check_pidfile
                 ! [ -n ${pid} ] && kill ${pid}
                 ;;

            restart)
                 ( $0 stop )
                 sleep 5
                 $0 start
                 ;;

            *)
                echo 1>&2 "Usage: $0 [start|stop|restart]"
                exit 1
                ;;
     esac
    exit 0
fi

Put in /etc/rc.conf

The last step is to put it on the /etc/rc.conf file, by editing it or use the sysrc command:

# sysrc pleroma_enable="YES"

Let’s start

# service pleroma start

And it should work.

To conclude

With a small amount of effort we can make pleroma working in a FreeBSD jail.

  1. Have a look to rcorder(8) to understand rc files 

  2. I will propose a PR for this script 

Karl Lagerfeld, vrai fan d’Apple : une petite histoire

Comme l’a signalé Macg, Karl Lagerfeld était un vrai fou d’Apple. Une histoire me revient en mémoire à ce sujet.

Aux alentours de 2002, quelques temps après le lancement de l’iMac G4, le centre de formation Apple où je travaillais à l’époque avait été contacté, je crois par les ateliers du Carrousel du Louvre, pour une requête particulière. Dans le cadre d’une exposition, on nous avait demandé de diffuser une interview de Karl Lagerfeld sur 15 iMac G4, soigneusement installés dans une pièce derrière une grande baie vitrée, la lecture devant être synchronisée entre les différents iMac. Et la requête d’avoir des iMac G4 venait directement de Lagerfeld.

Au départ, nous avions envisagé une lecture simultanée des vidéos en utilisant de l’AppleScript lançant un DVD simultanément sur tous les appareils, mais cela s’est révélé vite trop compliqué. À la place, nous avions décidé de trouver une autre solution en utilisant la technologie QuickTime Streaming Server : un Power Mac G4 qui diffusait un flux vidéo en streaming, capté par tous les Mac en même temps. La solution fut testée, validée et mise en production par mes camarades de jeux, le plus difficile étant de trouver un compromis en terme de qualité d’image acceptable avec le réalisateur de l’interview.

J’ai eu à me déplacer une fois sur le site de l’événement, pour régler un petit souci. Et c’était franchement chouette : ces 15 iMac, posés sur différents niveaux, diffusant l’interview dans une synchronisation impeccable, avec au sol de magnifiques immenses affiches de Lagerfeld qui dansait avec un modèle, ça avait vraiment de la gueule.

Selon l’organisateur de l’événement, les 15 iMac ont tourné sans discontinuer durant les quelques semaines de l’expo sans aucun problème, tout juste un redémarrage de temps en temps quand ça coinçait. Ce fut un succès. Et paraît-il, Lagerfeld était venu voir tout ça sur place, et avait été ravi. 

Tout ça pour dire : l’univers de la mode ne m’intéresse pas vraiment, et sûrement que Lagerfeld avait son lot d’excentricité, une certaine folie plus ou moins assumée. Mais il est évident que c’était un vrai inconditionnel d’Apple.

Accessoirement, il a aussi prêté son image à une des meilleures pubs de la Sécurité Routière (même s’il n’a pas porté réellement le fameux gilet).

Et rien que pour ça, merci M. Lagerfeld. 

B9718636798Z 1 20190219152958 000+G4JD0REV0 1 0 png

Kickstarter : le Side Kick, de Fuse

Il y a quelques temps, dans l’émission iWeek, j’avais présenté le Side Winder de Fuse (à 34:05), un adaptateur/enrouleur fort pratique pour les chargeurs des MacBook et MacBook Pro. Un accessoire fort utile quand on désenroule/enroule son chargeur plusieurs fois par jour. Le projet a été plus que backé, j’ai bien reçu mon adaptateur dans les temps, et il fonctionne très bien, merci pour lui.

Fuse Reel, enrouleur pour MacBook et MacBook Pro

Février 2019, rebelote : Fuse lance le Side Kick, un autre mécanisme d’enrouleur, plus compact et sûrement plus pratique avec un petit champignon qui se colle sur le chargeur, sûrement plus discret que le Side Winder. Si vous êtes intéressé, ça se finance ici. Le projet est déjà financé, en fait, mais vous pouvez encore commander.

NB : ce n’est pas un billet sponsorisé, juste un conseil d’achat d’un utilisateur satisfait :-)

NewImage

Faut-il déployer Microsoft Office via le Mac App Store ?

Depuis quelques semaines, Office 2019 est disponible sur le Mac App Store, Un mouvement très attendu de la part de Microsoft, et qui pourrait faciliter le déploiement de la suite en entreprise.

Office Mac App Store

Ou la compliquer. C’est assez délicat en fait.

One Office to rule them all (not)

Il faut bien comprendre que la version proposée est en réalité Office 365, la version en abonnement de Microsoft Office. Donc, si vous déployez cette version  d’Office mais que vous n’avez pas d’abonnement Office 365, les applications servent juste de liseuse de documents Office. Bon, c’est mieux que rien, mais pas forcément folichon. Il vous en coûtera de 68,99€ à 124,99€ par an selon la formule choisie. Pour ce prix, vous aurez le bonheur de pouvoir utiliser les apps Office, de bénéficier d’une adresse e-mail via Exchange, de plein de stockage OneDrive et autres joyeusetés. Si à la fin vous en avez marre, hop, vous arrêtez de payer et vous n’avez plus rien. Snif.

Le truc, c’est que si vous n’aimez pas vous abonner à vos logiciels, vous pouvez toujours utiliser les apps Office. En effet, Microsoft vend toujours des licences en achat unique. C’est plus cher : 299€. ET vous ne pouvez installer l’application que sur UN seul poste. Alors que les abonnements Office 365 vous permettent d’installer plusieurs copies des apps dans votre famille. Notez aussi que chez Microsoft, une tablette 10,1″, par exemple, c’est un ordinateur, et pas une tablette. Oui, c’est TROP SIMPLE parfois chez eux.

Notons aussi (mais ça c’est pas la faute de Microsoft) que les applications Office sont devenus beaucoup plus lourdes sur le disque avec le temps : la faute à Apple, qui oblige à ce que toutes les apps du Mac App Store soient sandboxées.

Abonnement ou achat définitif ? L’épineux choix

La question est surtout : avez-vous envie de confier toutes vos données à une seule société et utiliser tous ses services de façon optimale ? Économiquement, basculer vers Office 365 peut être plus intéressant que d’utiliser des services séparés. C’est pouvoir utiliser aussi les applicationss en mode cloud, récupérer ses fichiers depuis OneDrive, bénéficier de la solidité d’Exchange… Ce n’est pas un choix déconnant. Office 365 dispose également de solides fonctionnalisés de travail en collaboration, et si vous êtes prêt à investir du temps, la bascule peut être un choix intéressant en supprimant les services redondants (plus besoin de Dropbox – même si ce dernier est meilleur techniquement que OneDrive, pas besoin d’avoir des comptes mails en plus, etc).

De plus, il est important de rappeler que Microsoft réserve certaines fonctionnalités à Office 365. Ainsi, pendant très longtemps, la fonction de d’envoi de mail différé était réservé à Office 365. Si vous aviez une licence perpétuelle d’Office 2016, impossible d’avoir accès à cette fonction ! En revanche, c’est désormais possible avec Office 2019. Mais là encore, dans les futures évolutions d’Office, il est probable que certaines fonctionnalités soient réservées à Office 365 et que les utilisateurs d’Office 2019 ne puissent que les regarder de loin avec un petite larmichette dans les yeux. La vie est dure.

Il est évident que sur le long terme, Microsoft gagne plus d’argent en louant ses licences plutôt qu’en les vendant plein pot. À vous de voir si vous avez surtout envie de gérer toute votre vie au sein de l’écosystème Microsoft ou non, et de tirer partir de 100% des fonctions des logiciels.

Une autre possibilité aussi : vous pouvez utiliser la suite iWork (Pages, Keynote, Numbers) et rester dans l’écosystème Apple, en important/exportant si nécessaire vos documents aux formats Office. C’est ce que je fais la plupart du temps, mais je conserve encore un abonnement Office (essentiellement pour raison de tests).

Bon, alors, on déploie via le Mac App Store ou pas ?

C’est vrai, ça ! On cause, on cause… mais on n’a toujours pas répondu à cette question. Vaut-il mieux déployer Office pour Mac via l’App Store, ou continuer de déployer via les packages classiques proposés par Microsoft ?

Là encore, la réponse est moins évidente qu’il n’y paraît.

Selon la taille et la structure de votre entreprise, mettre à jour Office (une mise à jour tous les mois désormais) peut être lourd… et long. C’est là où on constate une grosse différence entre l’App Store et le package classique : l’application Office sera plus lourde, et surtout, la mettre à jour implique de re-télécharger toute l’app. Enfin chaque app, ce qui peut avoir un impact significatif sur la bande passante disponible et le trafic Internet.

Il existe pourtant une parade : la mise en cache du contenu. Dans la préférence Système Partage, cliquez sur Mise en cache de contenu, et les mises à jour des apps seront stockées en local, dès qu’un des postes aura commencé à les télécharger. Les postes suivants les téléchargeront depuis ce Mac au lieu de se connecter à Internet (truc en option : cliquez sur le bouton Options avec la touche Option enfoncée pour accéder à plus de réglages).

Mise en cache de Contenu

Cependant, sachez que Microsoft propose aussi de télécharger les mises à jour sur un serveur web local avec Microsoft Auto Update. Cependant, la mise en œuvre est BEAUCOUP plus complexe que celle proposée par Apple. Cela peut être intéressant si vous souhaitez conserver un contrôle très précis sur les mises à jour Office déployées.  Et surtout, le système de Microsoft permet de déployer des versions d’Office en version intégrale, en plus des versions pour Office 365, là où l’App Store ne connaît que la version par abonnement.

Je dirais que si vous avez une petite structure, un Mac qui traine (ou un macOS Server à dégager), mettre en place la mise en cache de contenu est une bonne solution très simple à mettre en œuvre, tout en conservant la facilité de déploiement du Mac App Store et les bénéfices d’Office 365.

La page à connaître : macadmins.software

Dans tous les cas, si vous voulez récupérer les mises à jour de Microsoft Office et des autres apps Microsoft sur Mac, il y a une adresse et une seule à connaître : https://macadmins.software ! Cette page est non-officielle mais bien gérée par l’équipe des développeurs de Microsoft Office Mac. Vous y trouverez des dizaines d’astuces, les liens vers toutes les versions d’Office, des logiciels pour assurer le support technique

Et donc, plusieurs versions d’Office. Trop, sans doute. Déchiffrons un peu l’offre.

  • Office 365 : la dernière version d’Office 365. Abonnement obligatoire.
  • Office 365 Business Pro : la dernière version d’Office 365, avec en plus l’application Teams. Abonnement obligatoire.
Toutes les versions suivantes ne nécessitent PAS d’abonnement et sont en achat perpétuel :
  • Office 2019 Volume License Serializer : logiciel d’activation si vous disposez d’une licence Microsoft Office 2019 en volume. Pas d’abonnement obligatoire, mais il faut un accès à un portail spécifique pour récupérer ce package..
  • Office 2019 Volume License : application d’installation, compatible avec le logiciel de déploiement du numéro de série. Pas d’abonnement obligatoire, mais il faut un accès à un portail spécifique pour récupérer le package de déploiement de la licence Office 2019.
  • Office 2019 Home & Student Retail : Office 2019 pour la maison et pour les étudiants.
  • Office 2016 Volume License Serializer : logiciel d’activation, pour Office 2016 cette fois-ci. Et il vous faudra…
  • Office 2016 Volume License : … cette version d’Office 2016 pour pouvoir déployer cette version proprement.
  • Office 2016 Home & Student Retail : Office 2016 pour la maison et pour les étudiants, désormais plus vendu (remplacé par Office 2019).

En résumé : si vous devez déployer Office 365, déployez le premier ou deuxième package… ou passez par le Mac App Store.

En conclusion

J’ai failli juste écrire « comme d’hab avec Microsoft, côté licences, c’est le bordel », et finalement ça n’aurait pas été si injustifié que ça. Il faut juste penser à déployer la version d’Office qui convient à votre licence, et à choisir la licence en fonction de vos besoins réels. Si vous êtes prêts à investir dans l’environnement Microsoft, foncez sur Office 365, c’est une offre de plus en plus riche et ambitieuse, et vous serez sûr de bénéficier toujours des nouvelles fonctionnalités. SI vous préférez des licences classiques et que vous pensez ne pas être frustré par les différences fonctionnelles avec Office 365, restez sur une licence classique et ne vous prenez pas la tête.

(Et si vous avez vraiment du mal, contactez Gete.Net Consulting, on fournit aussi des services de déploiement d’apps pour les parcs d’entreprise).

Et j’en profite quand même pour applaudir Microsoft qui fait vraiment du bon boulot sur la partie déploiement et gestion d’Office pour les administrateurs Mac. Le chemin parcouru est spectaculaire, les équipes sont super à l’écoute sur le channel Microsoft-Office sur Slack, de nombreux outils et formations en ligne ont été fournis… Très, très appréciable. Si Apple pouvait toujours en faire autant…

Mouse doesn’t move at FileVault login screen in VMware Fusion macOS Mojave VMs

As part of working with FileVault on macOS Mojave, I’ve been using VMs running in VMware Fusion 11.x for testing. As part of that, I’ve seen a problem where the mouse doesn’t move when the VM has booted to the FileVault login screen. The keyboard responds and arrow keys can be used to select users, but the mouse itself is immovable and does not respond.

Screen Shot 2019 02 14 at 8 29 34 PM

After some research, I ran across someone who had the same issue and found a workaround. For more details, please see below the jump.

By default, VMware Fusion 11.02 sets up VMs to use Hardware Version 16, which is the latest available.

Screen Shot 2019 02 14 at 8 53 13 PM

Downgrading to Hardware Version 14 allows the mouse to move at the FileVault login screen again.

Screen Shot 2019 02 14 at 8 53 18 PM

To downgrade hardware versions for your VM, please use the procedure shown below.

  1. Shut down the VM.
  2. Open the VM’s Settings window.
  3. Select Compatibility
  4. Click the arrow for Advanced options
  5. Click on the Use Hardware Version: drop-down menu and select 14.
  6. Click the Apply button.
  7. Close the VM’s Settings window.
  8. Start the VM.

ezgif-4-64323b63191b

The mouse should now move at the FileVault login window.

ezgif-4-b4dcd32c19e0

Re-syncing local account passwords and Secure Token on FileVault-encrypted Macs running macOS Mojave

As part of FileVault on Apple File System, Apple introduced a new account attribute called Secure Token. As mentioned in a previous post, Secure Token can present some interesting problems for Mac admins who work with FileVault-encrypted laptops. Among the potential complications are these scenarios:

  • “I changed the password for my local account, but only the old password is being taken at the FileVault login screen.”
  • “We’ve lost the password to the only local user account with a Secure Token, so now we can’t enable any other accounts on this Mac for FileVault.”

Usually, this happens because the local account password in question was changed outside of the Users & Groups preference pane in System Preferences and now Secure Token and the account password are out of sync with each other.

Up until the past few days, the only fix I knew of for that situation was to back up the data and wipe the drive. However, it looks like there is a workaround for encrypted Macs which fixes the password problem and sorts out Secure Token in these scenarios. In both cases, a personal recovery key will be needed as the way to authorize the needed changes. For more details, please see below the jump.

Note: The methods described below only work with local accounts. Mobile accounts need to have password changes authorized by their parent directory service and directory services like Active Directory and Open Directory will not be accessible when using the tools and procedures described below.

There are two methods which can be used with a personal recovery key to reset a local account’s password and resync a Secure Token:

  • FileVault login screen password reset
  • macOS Recovery password reset

FileVault login screen password reset

At the FileVault login screen, the following procedure can be used to reset a local account’s password:

1. Select the user account in question.
2. Click the question mark icon.

Screen Shot 2019 02 09 at 5 03 51 PM

3. Click the arrow icon.

Screen Shot 2019 02 09 at 5 08 34 PM

4. Enter the personal recovery key in the provided blank, then click on the arrow icon.

Screen Shot 2019 02 09 at 5 11 34 PM

The encryption will unlock at this point and the Mac will boot.

Screen Shot 2019 02 09 at 5 12 33 PM

5. At the Reset Password dialog window, enter a new password and then click the Reset Password button.

Screen Shot 2019 02 09 at 5 14 03 PM

 

As part of the password reset process, the Secure Token attribute for the account will also resync. That should allow FileVault to work normally again.

macOS Recovery password reset

In macOS Recovery, there is a resetFileVaultpassword tool which can use the personal recovery key to authorize password changes and Secure Token resync. The following procedure can be used to reset a local account’s password:

1. Boot to macOS Recovery.

Screen Shot 2019 02 08 at 3 52 32 PM

2. Under the Utilities menu, select Terminal.

Screen Shot 2019 02 09 at 5 17 51 PM

3. In Terminal, enter the following command and hit Enter.

resetFileVaultpassword

Screen Shot 2019 02 09 at 5 18 51 PM

This will launch a Reset Password window, with a blank for entering the personal recovery key.

Screen Shot 2019 02 09 at 5 19 27 PM

4. Enter the personal recovery key, then click the Next button.

Screen Shot 2019 02 09 at 5 20 08 PM

5. Select the account whose password needs to be reset, then click the Next button.

Screen Shot 2019 02 09 at 6 18 39 PM

6. Enter a new password and verify it, then click the Next button.

Screen Shot 2019 02 09 at 5 21 31 PM

7. When prompted, click the Restart button.

Screen Shot 2019 02 09 at 5 22 01 PM

 

As part of the password reset process, the resetFileVaultpassword tool also resyncs the Secure Token attribute for the account. That should allow FileVault to work normally again.