Docker cheat-sheet

Docker is great for development, but also, it gives you the superpower of extremely small images to easily move around docker containers.

I need this for personal stuff, but I think it can be useful to others, so let’s share it.

It’s a living list so I’m gonna add here stuff as soon as I need it.

Foreplay (Composer) – a.k.a. Install fest
#Install composer:
sudo apt-get -y install python-pip
sudo pip install docker-compose
Images
#Build an image from a dockerfile in pwd:
docker build --rm=true -t tagname .
#--rm=true -> Remove intermediate containers after a successful build
#-t, --tag=[] -> Name and optionally a tag in the 'name:tag' format
#-f, --file -> Name of the Dockerfile (Default is 'PATH/Dockerfile')
Docker Composer
#Start a container with:
docker-compose up -d
#up -> Create and start containers
#-d -> Detached mode: Run containers in the background,
       print new container names.
       Incompatible with --abort-on-container-exit.
Containers
#Check what's running:
docker ps

#Stop container:
docker stop {containerid}

 

 

Letsencrypt is broken on Debian Jessie

You need backports,

so first add the jessie-backports to your favourite apt source.list

# Backport
deb http://http.debian.net/debian jessie-backports main

Then apt-get update, and then install back letsencrypt forcing the use of the backports:

apt-get install -t jessie-backports letsencrypt

That’s it,

Giuseppe

Unable to configure permitted SSL ciphers SSL Library Error: 336486680 error:140E6118:SSL routines:SSL_CIPHER_PROCESS_RULESTR:invalid command

You copy/pasted the virtualhost configuration from an output that truncated the long line that starts by

SSLCipherSuite

 

Am I right?

😉

Extend Xen guest partition on a live system

nanites

No restart of the guest VM is required

on Dom0:

lvextend /dev/lvm/domU.lan-var -L +5G
Extending logical volumedomU.lan-var  to 7.00 GiB
Logical volume domU.com-var successfully resized

On DomU

resize2fs /dev/xvdaX #(where X is a number)
resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/xvdaX is mounted on /var; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/xvdaX to 1835008 (4k) blocks.
The filesystem on /dev/xvdaX is now 1835008 blocks long.

 

 

Generate, check, debug and convert with OpenSSL

General OpenSSL Commands

These commands allow you to generate CSRs, Certificates, Private Keys and do other miscellaneous tasks.

  • Generate a new private key and Certificate Signing Request
    openssl req -out CSR.csr -new -newkey rsa:2048 -nodes -keyout privateKey.key
  • Generate a self-signed certificate
    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt
  • Generate a certificate signing request (CSR) for an existing private key
    openssl req -out CSR.csr -key privateKey.key -new
  • Generate a CSR and key for a SAN sertificateCreate a config file called req.cnf to use it with openssl like the following:
  • [req] 
    distinguished_name = req_distinguished_name 
    req_extensions = v3_req 
    prompt = no 
    [req_distinguished_name] 
    C = NL 
    ST = NL 
    L = Amsterdam 
    O = Red Light District B.V. 
    OU = IT 
    CN = amsterdamredlights.nl 
    [v3_req] 
    keyUsage = keyEncipherment, dataEncipherment 
    extendedKeyUsage = serverAuth 
    subjectAltName = @alt_names 
    [alt_names] 
    DNS.1 = www.amsterdamredlights.nl 
    DNS.2 = amsterdamredlights.nl 
    DNS.3 = intranet.redlightdistrict.nl

With this file use the following command:

openssl req -new -out redlightsdistrict.nl.csr -newkey rsa:2048 -nodes -sha256 -keyout redlightsdistrict.nlkey.temp -config req.cnf
  • Generate a certificate signing request based on an existing certificate
    openssl x509 -x509toreq -in certificate.crt -out CSR.csr -signkey privateKey.key
  • Remove a passphrase from a private key
    openssl rsa -in privateKey.pem -out newPrivateKey.pem

Checking Using OpenSSL

If you need to check the information within a Certificate, CSR or Private Key, use these commands.

  • Check a Certificate Signing Request (CSR)
    openssl req -text -noout -verify -in CSR.csr
  • Check a private key
    openssl rsa -in privateKey.key -check
  • Check a certificate
    openssl x509 -in certificate.crt -text -noout
  • Check a PKCS#12 file (.pfx or .p12)
    openssl pkcs12 -info -in keyStore.p12
  • Check a CA bundle against a certificate
    openssl verify -verbose -purpose sslserver -CAfile <chain file> <cert>
    • Check certificate issuer
openssl x509 -noout -in cert.pem -issuer
    • Check the subject for whom the cert has been issued
openssl x509 -noout -in cert.pem -subject
    • Check validity (dates)
openssl x509 -noout -in cert.pem -dates
    • Check the above 3, all at once
openssl x509 -noout -in cert.pem -issuer -subject -dates
    • Check hash value
 openssl x509 -noout -in cert.pem -hash
    • Check certificate MD5 fingerprint
openssl x509 -noout -in cert.pem -fingerprint

Check an MD5 hash of the public key to ensure that it matches with what is in a CSR or private key

openssl x509 -noout -modulus -in certificate.crt | openssl md5
openssl rsa -noout -modulus -in privateKey.key | openssl md5
openssl req -noout -modulus -in CSR.csr | openssl md5

 

Debugging Using OpenSSL

If you are receiving an error that the private doesn’t match the certificate or that a certificate that you installed to a site is not trusted, try one of these commands.

  • Check an MD5 hash of the public key to ensure that it matches with what is in a CSR or private key
    openssl x509 -noout -modulus -in certificate.crt | openssl md5
    openssl rsa -noout -modulus -in privateKey.key | openssl md5
    openssl req -noout -modulus -in CSR.csr | openssl md5
  • Check an SSL connection. All the certificates (including Intermediates) should be displayed
    openssl s_client -connect www.paypal.com:443
  • If the dns hasn’t propagated yet you can use an ip address and a hostname like the following example
$ openssl s_client -connect 127.0.0.1:443 -servername giuseppeurso.net

Converting Using OpenSSL

These commands allow you to convert certificates and keys to different formats to make them compatible with specific types of servers or software. For example, you can convert a normal PEM file that would work with Apache to a PFX (PKCS#12) file and use it with Tomcat or IIS.

  • Convert a DER file (.crt .cer .der) to PEM
    openssl x509 -inform der -in certificate.cer -out certificate.pem
  • Convert a PEM file to DER
    openssl x509 -outform der -in certificate.pem -out certificate.der
  • Convert a PKCS#12 file (.pfx .p12) containing a private key and certificates to PEM
    openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes

    You can add -nocerts to only output the private key or add -nokeys to only output the certificates.

  • Convert a PEM certificate file and a private key to PKCS#12 (.pfx .p12)
    openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
  • Convert a p7b (non binary) certificate to Pem
    openssl pkcs7 -in certificate_file.p7b -print_certs -out cert.pem

    If this throws an error, just open the p7b fiel and replace:

    -----BEGIN PKCS #7 SIGNED DATA-----
    -----END PKCS #7 SIGNED DATA-----
    

    with

    -----BEGIN CERTIFICATE-----
    -----END CERTIFICATE-----
    • Convert a p7b (binary) certificate to Pem

      You can easily guess whether a certificate is in a binary form by looking at it with for instance the cat command, If it looks garbled it’s binary
      In these cases you should first convert it from binary tand then you can convert it to pem with the previous example. This is how you convert it if binary:

      openssl pkcs7 -inform der -in a.p7b -out a.cer
    • SSL bundle concatenation order for haproxy:
-----BEGIN MY CERTIFICATE-----
-----END MY CERTIFICATE-----
-----BEGIN INTERMEDIATE CERTIFICATE-----
-----END INTERMEDIATE CERTIFICATE-----
-----BEGIN INTERMEDIATE CERTIFICATE-----
-----END INTERMEDIATE CERTIFICATE-----
-----BEGIN ROOT CERTIFICATE-----
-----END ROOT CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----

 

Originally posted on Sun Jan 13, 2008 at https://www.sslshopper.com/article-most-common-openssl-commands.html expanded, enriched and improved with personal experiences since then.

Ubuntu 14.04 preseed/late_command doesn’t work: this is why

The reason why

d-i preseed/late_command string

doesn’t work on your installation of Ubuntu 14.04 is that you are probably using Ubiquity.
I spent several hours trying to figure this out and at the end I managed to understand (thanks to http://askubuntu.com/questions/104135/preseed-late-command-not-running) that instead I (and you while you are here) should use this command:

ubiquity ubiquity/success_command string \

This last made my installation completely work.

Hope this will help others out there.

Giuseppe

Asus X202E touchpad sensitivity with Ubuntu

The ones out there who decided to drop Windows 8 in favor of Ubuntu after buying an Asus X202E will probably face the issue of a too sensitive touchpad which makes the laptop barely usable, with a lot of random unwanted clicks especially during the “two finger scrolling”. The two finger scrolling is a feature I really don’t want to give up as well as the touch to click one, as i find them really convenient as long as I have to use the laptop as laptop, which means without an external pointing device such as a mouse.

First step to get to the desired settings is to check which hardware are we using.

As reported at this url http://superuser.com/questions/229839/reduce-laptop-touch-pad-sensitivity-in-ubuntu the best is to run the command:

xinput list

This will return the list of the input devices used by X (for a complete man page, refer to this : Xinput man page in a new tab)

From the list returned it will be easy to guess which is the touchpad device, in the Asus X202E it is:

ETPS/2 Elantech Touchpad (debian wiki here)

Since the laptop is equipped with a touchscreen display, do not confuse the touchpad with the digitizer of the display (Atmel Atmel maXTouch Digitizer).

Now we can easily get the initial parameter of the touchpad so we can tinker with them and the worst of the cases we can use them to revert the settings to the initial state.

To do this, to read the setting we are currently running with, the command to be issued is:

 xinput list-props "ETPS/2 Elantech Touchpad" | grep -i finger

This will return a few lines:

Synaptics Finger (289): 1, 1, 0
Synaptics Two-Finger Pressure (295): 282
Synaptics Two-Finger Width (296): 7
Synaptics Two-Finger Scrolling (299): 1, 1

We are going to tinker with the first parameter, “Synaptic Finger” in order to require much more pressure of the finger for the touchpad to become active.

what I type is:

sudo xinput set-prop "ETPS/2 Elantech Touchpad" "Synaptics Finger" 5 20 0

Where the second parameter (30) is the one used as threshold for the measured finger pressure. The first one seems to be the one used as “Release pressure” to measure the act of clicking.

I hope this short guide will be useful for other out there.

Final tip:

This settings will be gone after next reboot, so the best is to create a bash script and make it being executed at your login as suggested on this page: http://www.mepis.org/docs/en/index.php?title=Configuring_the_touchpad_with_xinput

so let’s create a script called touchpad.sh

#!/bin/bash
sudo xinput set-prop "ETPS/2 Elantech Touchpad" "Synaptics Finger" 5 20 0

Let’s make it executable with:

chmod 755 touchpad.sh

You conveniently save it under a easily accessible folder like /usr/bin

then, if ou use Gnome 2or 3 like me, it’s sufficient to do as reported on this page http://stackoverflow.com/questions/8247706/start-script-when-gnome-starts-up you can open the terminal and type:

gnome-session-properties

Using the graphical interface you can set it up and look for the script by just browsing the filesystem.

useful info here as well: https://help.ubuntu.com/community/SynapticsTouchpad

Enjoy your new configured touchpad.

asus x202e

Ubuntu Xinput man page

xinput – utility to configure and test X input devices

 

xinput(1) General Commands Manual xinput(1)

 

NAME
xinput – utility to configure and test X input devices
SYNOPSIS
xinput [OPTIONS] [DEVICE]
DESCRIPTION
xinput is a utility to list available input devices, query information about a
device and change input device settings.

OPTIONS
–version
Test if the X Input extension is available and return the version num‐
ber of the program and the version supported by the server. This
option does not require a device name.

–list [–short || –long || –name-only || –id-only] [device]
If no argument is given list all the input devices. If an argument is
given, show all the features of device. If –long is provided, the
output includes detailed information about the capabilities of each
devices. Otherwise, or if –short is provided, only the device names
and some minimal information is listed. If –name-only is provided,
the output is limited to the device names. One device name is listed
per line. Note that the order the devices are listed is undefined. If
–id-only is provided, the output is limited to the device IDs. One
device ID is listed per line. Note that the order the devices are
listed is undefined.

–get-feedbacks device
Display the feedbacks of device.

–set-pointer device
Switch device in core pointer. This option does nothing on X servers
1.5 and later.

–set-mode device ABSOLUTE|RELATIVE
Change the mode of device.

–set-ptr-feedback device threshold num denom
Change the pointer acceleration (or feedback) parameters of device.
The xset(1) man page has more details. For X.Org Server 1.7 and above,
there are additional device properties pertaining to pointer accelera‐
tion. These do not replace, but complement the pointer feedback set‐
ting.

–set-integer-feedback device index value
Change the value of an integer feedback of device.

–set-button-map device map_button_1 [map_button_2 […]]
Change the button mapping of device. The buttons are specified in
physical order (starting with button 1) and are mapped to the logical
button provided. 0 disables a button. The default button mapping for a
device is 1 2 3 4 5 6 etc.

–query-state device
Query the device state.

–list-props device [device […]]
Lists properties that can be set for the given device(s).

–set-int-prop device property format value
Sets an integer property for the device. Appropriate values for for‐
mat are 8, 16, or 32, depending on the property. Deprecated, use
–set-prop instead.

–set-float-prop device property value
Sets a float property for the device. Deprecated, use –set-prop
instead.

–set-prop [–type=atom|float|int] [–format=8|16|32] device property value
[…]
Set the property to the given value(s). If not specified, the format
and type of the property are left as-is. The arguments are inter‐
preted according to the property type.

–watch-props device
Prints to standard out when property changes occur.

–delete-prop device property
Delete the property from the device.

–test [-proximity] device
Register all extended events from device and enter an endless loop
displaying events received. If the -proximity is given, ProximityIn
and ProximityOut are registered.

–test-xi2 [device]
Register for a number of XI2 events and display them. If a device is
given, only events on this device are displayed.

–create-master prefix [sendCore] [enable]
Create a new pair of master devices on an XI2-enabled server with the
given prefix. The server will create one master pointer named “prefix
pointer” and one master keyboard named “prefix keyboard”. If sendCore
is 1, this pair of master devices is set to send core events
(default). If enable is 1, this master device pair will be enabled
immediately (default).

–remove-master master [Floating|AttachToMaster] [returnPointer] [returnKey‐
board]
Remove master and its paired master device. Attached slave devices
are set floating if Floating is specified or the argument is omitted.
If the second argument is AttachToMaster, returnPointer specifies the
master pointer to attach all slave pointers to and returnKeyboard
specifies the master keyboard to attach all slave keyboards to.

–reattach slave master
Reattach slave to master.

–float slave
Remove slave from its current master device.

–set-cp window master
Set the ClientPointer for the client owning window to master. master
must specify a master pointer.

–map-to-output device crtc
Restricts the movements of the absolute device to the RandR crtc. The
output name must match a currently connected output (see xrandr(1)).
If the NVIDIA binary driver is detected or RandR 1.2 or later is not
available, a Xinerama output may be specified as “HEAD-N”, with N
being the Xinerama screen number. This option has no effect on rela‐
tive devices.

–enable device
Enable the device. This call is equivalent to xinput –set-prop device
“Device Enabled” 1

–disable device
Disable the device. This call is equivalent to xinput –set-prop
device “Device Enabled” 0

device can be the device name as a string or the XID of the device.

slave can be the device name as a string or the XID of a slave device.

master can be the device name as a string or the XID of a master device.

property can be the property as a string or the Atom value.

SEE ALSO
X(7), xset(1), xrandr(1)

COPYRIGHT
Copyright 1996,1997, Frederic Lepied.

Copyright 2007, Peter Hutterer.

Copyright 2008, Philip Langdale.

Copyright 2009-2011, Red Hat, Inc.
AUTHORS
Peter Hutterer <peter.hutterer@who-t.net>
Philip Langdale, <philipl@alumni.utexas.net>
Frederic Lepied, France <Frederic.Lepied@sugix.frmug.org>
Julien Cristau <jcristau@debian.org>
Thomas Jaeger <ThJaeger@gmail.com>
and more.

 

X Version 11 xinput 1.6.0 xinput(1)