Unstable Wifi connection to Raspberry Pi 3

Written by pmd - - no comments

Original post

I am loosing connection to my Raspberry Pi 3 in a very much random way.

I recently replaced Subsonic by Airsonic, and connection to Pi seemed to be much more stable since that exact day. But today, it happened one more time... as I was expecting! Time to troubleshoot has come.

Since I am using 2 tables to root my traffic, one of them is not updated on some interface up/down events. I made a small script called by cron every 5 minutes to understand things and rebooting Pi once a day to get the access back:

#!/usr/bin/env bash

# Script to monitor and restart wireless access point when needed

# Logging
date >> NetworkCheckLog
echo "wap_check_pmd: Checking if network connection is down..." >> NetworkCheckLog
echo "$ ip route show table main" >> NetworkCheckLog
ip route show table main >> NetworkCheckLog
echo "$ ip route show table 42" >> NetworkCheckLog
ip route show table 42 >> NetworkCheckLog

# First make sure we can resolve google, otherwise 'ping -w' would hang
if ! $(host -W5 www.google.com > /dev/null 2>&1); then
        #Make a note in syslog
        logger "wap_check_pmd: Network connection is down..."
        date >> NetworkCheckLog
        ifconfig >> NetworkCheckLog
        echo "wap_check_pmd: Network connection is down..." >> NetworkCheckLog
        exit
fi

Time when it got fucked:

Mon  6 Aug 08:55:01 CEST 2018
wap_check_pmd: Checking if network connection is down...
$ ip route show table main
0.0.0.0/1 via 10.8.7.1 dev tun0
default via 192.168.1.1 dev wlan0 src 192.168.1.200 metric 303
10.8.8.0/24 dev tun0 proto kernel scope link src 10.8.7.12
31.192.112.170 via 192.168.1.1 dev wlan0
128.0.0.0/1 via 10.8.7.1 dev tun0
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.200 metric 303
$ ip route show table 42
default via 192.168.1.1 dev wlan0 src 192.168.1.200 metric 303
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.200 metric 303

Mon  6 Aug 09:00:01 CEST 2018
wap_check_pmd: Checking if network connection is down...
$ ip route show table main
0.0.0.0/1 via 10.8.7.1 dev tun0
default via 192.168.1.1 dev wlan0 src 192.168.1.200 metric 303
10.8.8.0/24 dev tun0 proto kernel scope link src 10.8.7.12
128.0.0.0/1 via 10.8.7.1 dev tun0
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.200 metric 303
$ ip route show table 42
Mon  6 Aug 09:00:15 CEST 2018
wap_check_pmd: Network connection is down...

I then checked /var/log/syslog:

Aug  6 08:59:26 raspberrypi dhcpcd[382]: wlan0: carrier lost
[...]
Aug  6 08:59:26 raspberrypi dhcpcd[382]: wlan0: deleting default route via 192.168.1.1
Aug  6 08:59:26 raspberrypi dhcpcd[382]: wlan0: deleting route to 192.168.1.0/24
[...]
Aug  6 08:59:51 raspberrypi dhcpcd[382]: wlan0: carrier acquired

After Googling, I found an interesting article. Which provide interesting tips.

  1. Use this command to read the current power saving mode of your Pi:
    $ sudo iw wlan0 get power_save
    Power save: on
  2. And this one to turn power_save off:
    $ sudo iw wlan0 set power_save off
  3. To make this permanent add the following line to /etc/rc.local:
    /sbin/iw dev wlan0 set power_save off

We will see if it helps :)

Update 27/10/2018

I choose to turn the power_save off as it originally was. But I came up with this script:

#!/bin/bash
#/home/pi/wap_check
# Script to monitor and restart wireless access point when needed
maxPloss=10 #Maximum percent packet loss before a restart

# Logging
# echo "$(date +"%d-%m-%y %H:%M:%S ") wap_check_pmd: Checking if network connection is down..." >> /home/pi/NetworkCheckLog

# If table 42 is empty, we lost raspberry
TABLE_42_eth0=$(ip route show table 42 | grep eth0)
TABLE_42_wlan0=$(ip route show table 42 | grep wlan0)
# addapt following "if" and TABLE_42_xxx variables above depending on your interfaces
if [[ -z "${TABLE_42_eth0}" ]] || [[ -z "${TABLE_42_wlan0}" ]]; then
  # Loging
  echo  "$(date +"%d-%m-%y %H:%M:%S ") wap_check_pmd: Table 42 is (partialy?) empty! Trying to populate it:" >> /home/pi/NetworkCheckLog
  logger "wap_check_pmd: Table 42 is (partialy?) empty! Trying to populate it."
  # Purge table 42 just in case
  sudo ip route flush table 42
  # Filling up the table 42
  ip route show table main | grep -v tun0 | while read LINE; do sudo ip route add $LINE table 42; done
  sleep 1
  ip route show table 42 >> /home/pi/NetworkCheckLog
fi

# IP cannot be the same, debian-transmission can go only through tun0
IP_VPN=$(sudo -u debian-transmission wget -qO- ifconfig.co)
IP_PUBLIC=$(wget -qO- ifconfig.co)
if [[ "${IP_VPN}" = "${IP_PUBLIC}" ]]; then
  echo "$(date +"%d-%m-%y %H:%M:%S ") wap_check_pmd: Same IP for debian-transmission and pi: $(echo $IP_VPN) and $(echo $IP_PUBLIC)" >> /home/pi/NetworkCheckLog
  logger "wap_check_pmd: Same IP for debian-transmission and pi..."
  if [[ -n "${IP_PUBLIC}"  ]]; then
    echo "$(date +"%d-%m-%y %H:%M:%S ") wap_check_pmd: Rebooting. [1]" >> /home/pi/NetworkCheckLog
        logger "wap_check_pmd: Rebooting. [1]"
    sleep 1
    sudo /sbin/reboot
        exit
  fi
fi

# Make sure we can resolve google, otherwise 'ping -w' would hang
if ! $(host -W5 www.google.com > /dev/null 2>&1); then
    # Make a note in syslog
    logger "wap_check_pmd: Network connection is down..."
        echo "$(date +"%d-%m-%y %H:%M:%S ") wap_check_pmd: Rebooting. [2]" >> /home/pi/NetworkCheckLog
        logger "wap_check_pmd: Rebooting. [2]"
        # Restart device
        sleep 1
        sudo /sbin/reboot
    exit
fi

# Initialize to a value that would force a restart
# (just in case ping gives an error and ploss doesn't get set)
ploss=101
# now ping google for 10 seconds and count packet loss
ploss=$(ping -q -w10 www.google.com | grep -o "[0-9]*%" | tr -d %) > /dev/null 2>&1
if [ "$ploss" -gt "$maxPloss" ]; then
    logger "wap_check_pmd: Packet loss ($ploss%) exceeded $maxPloss"
    echo "$(date +"%d-%m-%y %H:%M:%S ") wap_check_pmd: Packet loss ($ploss%) exceeded $maxPloss" >> /home/pi/NetworkCheckLog
    # restart_networking
fi

I run this script every 5 minutes, line in my crontab file:

*/5 * * * * /bin/bash /home/pi/NetworkCheck.sh

Log file looks like this:

22-09-18 22:25:02  wap_check_pmd: Table 42 is empty! Trying to populate it:
22-09-18 22:26:55  wap_check_pmd: Same IP for debian-transmission and pi:  and
22-09-18 22:27:09  wap_check_pmd: Rebooting. [2]
24-09-18 23:20:16  wap_check_pmd: Rebooting. [2]
25-09-18 22:26:10  wap_check_pmd: Packet loss (30%) exceeded 10
25-09-18 23:11:07  wap_check_pmd: Packet loss (16%) exceeded 10
04-10-18 02:55:12  wap_check_pmd: Packet loss (70%) exceeded 10
04-10-18 15:50:01  wap_check_pmd: Table 42 is empty! Trying to populate it:
default via 192.168.1.1 dev wlan0 src 192.168.1.200 metric 303
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.200 metric 303
04-10-18 19:20:12  wap_check_pmd: Packet loss (20%) exceeded 10
04-10-18 20:40:27  wap_check_pmd: Packet loss (30%) exceeded 10
04-10-18 20:55:21  wap_check_pmd: Packet loss (16%) exceeded 10
05-10-18 20:20:01  wap_check_pmd: Table 42 is empty! Trying to populate it:
default via 192.168.1.1 dev wlan0 src 192.168.1.200 metric 303
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.200 metric 303
05-10-18 20:52:25  wap_check_pmd: Packet loss (30%) exceeded 10
06-10-18 15:15:15  wap_check_pmd: Packet loss (30%) exceeded 10
07-10-18 08:55:02  wap_check_pmd: Same IP for debian-transmission and pi:  and
16-10-18 19:21:53  wap_check_pmd: Same IP for debian-transmission and pi:  and
16-10-18 19:22:07  wap_check_pmd: Rebooting. [2]
27-10-18 11:30:20  wap_check_pmd: Packet loss (20%) exceeded 10

youtube-dl, now yt-dlp

Written by pmd - - no comments

youtube-dl is a usefull packet to download youtube video through command line. GitHub.

List what to download

First step is to list what youtube video you wanna download and convert to mp3 file:

2 files to put on a web server which are:

  1. liste.txt which must be chmod 777 (index.php will write links in this file)
  2. index.php
<!DOCTYPE html>
<html>
<head>
<title>youtube-dl</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
width: 550px;
font-size: 75%;
}
p {
font-family: "Lucida Console", "Courier New", monospace;
white-space: nowrap
}
li {
font-family: "Lucida Console", "Courier New", monospace;
white-space: nowrap
}
hr {
border: 0;
border-bottom: 1px dashed #CCCCCC;
background: #FFFFFF;
}
input[type=text], select {
width: 80%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}

input[type=submit] {
width: 80%;
background-color: #4CAF50;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
border-radius: 4px;
cursor: pointer;
}

input[type=submit]:hover {
background-color: #45a049;
}

div {
border-radius: 5px;
background-color: #f2f2f2;
padding: 20px;
overflow:auto;
width: 500px;
}
</style>
</head>
<body>
<span style="white-space: nowrap">
<div>
<p>
<?php
if(isset($_POST['field1']))
{
$data = $_POST['field1'] . "\r\n";
$ret = file_put_contents('liste.txt', $data, FILE_APPEND | LOCK_EX);
if($ret === false) {
echo "There was an error writing this file.";
}
else {
echo "$ret bytes written to file.";
}
}
else {
echo "No post data to process.";
}
?>
</p>
</div>
<hr>

<div>

<p>Format to be respected:</p>
<ol>
<li>« https://www.youtube.com/watch?v=1YRW1QRKTBc »</li>
<li>« https://youtu.be/9cBtJYI6itg »</li>
<li>« https://soundcloud.com/hungry-music/nto-alter-ego »</li>
</ol>

<form action="index.php" method="POST">
<input type="text" id="fname" name="field1" placeholder="https://www.youtube.com/watch?v=1YRW1QRKTBc"><br />
<input type="submit" value="Submit">
</form>
</div>

<hr>

<div>
<p>Next link(s) to be downloaded and saved to mp3 files:</p>
<p>
<?php
echo nl2br(file_get_contents( "liste.txt" ));
?>
</p>
</div>

<hr>

<div>
<p>
Logs (last 200 lines): <br />
<?php
//echo nl2br(file_get_contents( "/path/to/history.txt" ));
echo nl2br(trim(implode("", array_slice(file("/path/to/history.txt"), -200))));
?>
</p>
</div>
</body>
</html>

Sources 1, 2

Secure input form

https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/
http://www.htaccesstools.com/htpasswd-generator/

location ^~ /youtube-dl {
     auth_basic           "Иди на хуй мозгоёб!!!";
     auth_basic_user_file /path/to/.htpasswd;
     location ~ \.php$ {
         include snippets/fastcgi-php.conf;
         fastcgi_pass unix:/run/php/php7.0-fpm.sock;
         }
 }

Restart nginx:

$ sudo service nginx restart

Download script

He depends on:

  • /path/to/liste_en_cours.txt
  • /path/to/history.txt
#!/usr/bin/bash
filename="$1"
liste_en_cours=/path/to/Downloads/youtube_auto/liste_en_cours.txt

cp -f $1 $liste_en_cours
sleep 1
echo -n > $1

echo "  " >> /path/to/Downloads/youtube_auto/history.txt
date >> /path/to/Downloads/youtube_auto/history.txt

while read -r line
do
    name="$(echo $line | sed 's/\r//g')"
    echo -n "$name | " >> /path/to/Downloads/youtube_auto/history.txt
    page="$(wget -O - $name)"
    echo $page | sed -n 's/.*<title>\(.*\)<\/title>.*/\1/ip;T;q' >> /path/to/Downloads/youtube_auto/history.txt

    /usr/local/bin/youtube-dl -f bestaudio $name --extract-audio --audio-format mp3 -o "/path/to/Downloads/youtube_auto/downloads/%(title)s.%(ext)s" | grep ffmpeg | grep mp3 | sed 's/.*\//===> /' | sed 's/mp3.*/mp3/' >> /path/to/Downloads/youtube_auto/history.txt

done < "$liste_en_cours"

mv -f /path/to/Downloads/youtube_auto/downloads/* /path/to/Music/youtube

#All big files goes to folder Mixes
for file in /path/to/Music/youtube/*; do
    SIZE="$(stat --printf="%s" "$file")"
    if (( $SIZE > 25000000 )); then
        mv -f "$file" /path/to/Music/Mixes
    fi
done

Source homemade. Now execute it with cron job by example.

Switching to yt-dlp

youtube-dl is notmaintained anymore. It now fails with "Unable to extract uploader id" error using version 2021.12.17. yt-dlp is a youtube-dl fork based on the now inactive youtube-dlc. The main focus of this project is adding new features and patches while also keeping up to date with the original project.

Use SSH to connect to Raspberry Pi. Run the following command to download the latest version of yt-dlp from GitHub repository:

$ sudo wget -qO /usr/local/bin/yt-dlp https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp

Set read and execute permissions for a file:

$ sudo chmod a+rx /usr/local/bin/yt-dlp

Now yt-dlp command will be available for all users as a system-wide command.
We can check yt-dlp version as follows:

yt-dlp --version

We can update yt-dlp to the latest version by using the following command:

sudo yt-dlp -U

So in above script I replace /usr/local/bin/youtube-dl by /usr/local/bin/yt-dlp.

Source.

Install Airsonic on Raspberry Pi 3

Written by pmd - - no comments

Stand-alone WAR installation integrated within systemd

Let's see how to install a stand-alone Airsonic on a Raspberry 3 integrated with Systemd.

First of all, we need Java to be installed:

$ sudo apt-get install openjdk-8-jre

By following these systemd setup instructions, Airsonic will be available at http://localhost:8080/airsonic.

  1. Setup dedicated airsonic user:
    $ sudo useradd airsonic
  2. Setup Airsonic data dir:
    $ sudo mkdir /var/airsonic
    $ sudo chown airsonic /var/airsonic
  3. Download the stand-alone WAR:
    $ sudo wget https://github.com/airsonic/airsonic/releases/download/v10.1.1/airsonic.war --output-document=/var/airsonic/airsonic.war
  4. Setup systemd service:
    $ sudo wget https://raw.githubusercontent.com/airsonic/airsonic/master/contrib/airsonic.service -O /etc/systemd/system/airsonic.service
    $ sudo systemctl daemon-reload
    $ sudo systemctl start airsonic.service
    $ sudo systemctl enable airsonic.service
    $ sudo wget https://raw.githubusercontent.com/airsonic/airsonic/master/contrib/airsonic-systemd-env -O /etc/sysconfig/airsonic

    Note: On Debian systems you need to replace /etc/sysconfig with /etc/default)

  5. Go configure http://localhost:8080/airsonic.

Set up a reverse proxy: nginx

  1. Go edit nginx configuration:
    $ sudo nano /etc/nginx/sites-available/default
  2.         location ^~ /airsonic {
                    proxy_pass http://127.0.0.1:8080;
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }
  3. Restart nginx:
    $ sudo service nginx restart

Now the Airsonic server should be accissible from outside uside http://publicadress.com/airsonic

Source 1 : Stand-alone WAR installation
Source 2 : The url I'm opening is http://publicadress.com/airsonic but it will be redirected to http://publicadress.com/login, which brings up error 404.

Set up the transcoder

$ sudo apt-get install ffmpeg

Then we need to link Airsonic with the transcoder ffmpeg.

$ sudo mkdir /var/airsonic/transcode
$ cd /var/airsonic/transcode
$ sudo ln -s /usr/bin/ffmpeg /var/aisonic/transcode/ffmpeg
$ ls -alh
total 8.0K
drwxr-xr-x 2 airsonic airsonic 4.0K Jul 22 10:54 .
drwxr-xr-x 5 airsonic tomcat8  4.0K Jul 22 10:48 ..
lrwxrwxrwx 1 root     root       15 Jul 22 10:54 ffmpeg -> /usr/bin/ffmpeg
$ sudo chown -R airsonic:airsonic /var/airsonic
$ ls -alh
total 8.0K
drwxr-xr-x 2 airsonic airsonic 4.0K Jul 22 10:54 .
drwxr-xr-x 5 airsonic airsonic 4.0K Jul 22 10:48 ..
lrwxrwxrwx 1 airsonic airsonic   15 Jul 22 10:54 ffmpeg -> /usr/bin/ffmpeg

Interact with server from Android

I use the Ultrasonic application:
ultrasonic

Source 1, 2, 3,

Startup log example

$ sudo systemctl status airsonic
● airsonic.service - Airsonic Media Server
     Loaded: loaded (/etc/systemd/system/airsonic.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-01-18 21:09:56 CET; 20min ago
   Main PID: 538 (java)
      Tasks: 33 (limit: 1597)
        CPU: 3min 15.474s
     CGroup: /system.slice/airsonic.service
             └─538 /usr/bin/java -Xmx700m -Dairsonic.home=/var/airsonic -Dserver.context-path=/airsonic -Dserver.port=8080 -jar /var/airsonic/airsonic.war

Jan 18 21:11:50 raspberrypi java[538]: 2022-01-18 21:11:50.554  INFO --- l.l.StandardLockService                  : Successfully released change log lock
Jan 18 21:11:51 raspberrypi java[538]: 2022-01-18 21:11:51.540  INFO --- o.a.p.service.SettingsService            : Java: 1.8.0_312, OS: Linux
Jan 18 21:11:53 raspberrypi java[538]: 2022-01-18 21:11:53.290  INFO --- org.airsonic.player.Application          : Detected Tomcat web server
Jan 18 21:12:31 raspberrypi java[538]: 2022-01-18 21:12:31.557  INFO --- o.a.p.service.PodcastService             : Automatic Podcast update scheduled to run every 24 hour(s), starting at Tue Jan 18 21:17:31 CET 2022
Jan 18 21:12:33 raspberrypi java[538]: 2022-01-18 21:12:33.840  INFO --- o.a.p.s.search.IndexManager              : Index was found (index version 18).
Jan 18 21:12:33 raspberrypi java[538]: 2022-01-18 21:12:33.900  INFO --- o.a.p.s.MediaScannerService              : Automatic media library scanning scheduled to run every 1 day(s), starting at 2022-01-19T03:00:00.887
Jan 18 21:13:03 raspberrypi java[538]: 2022-01-18 21:13:03.363  INFO --- org.airsonic.player.Application          : Started Application in 154.011 seconds (JVM running for 170.609)
Jan 18 21:17:31 raspberrypi java[538]: 2022-01-18 21:17:31.553  INFO --- o.a.p.service.PodcastService             : Starting scheduled Podcast refresh.
Jan 18 21:17:31 raspberrypi java[538]: 2022-01-18 21:17:31.565  INFO --- o.a.p.service.PodcastService             : Completed scheduled Podcast refresh.
Jan 18 21:18:01 raspberrypi java[538]: 2022-01-18 21:18:01.772  INFO --- o.a.p.f.BootstrapVerificationFilter      : Servlet container: Apache Tomcat/8.5.51
$

Extra applications on LEDE (GL-AR150)

Written by pmd - - no comments

Transmission

  1. opkg update
  2. opkg install transmission-daemon-openssl transmission-web luci-app-transmission
  3. opkg install nano
  4. nano /etc/config/transmission
  5. chmod -R 777 /tmp/USB_KEY

It is necessary to make a swap file on AR150 otherwise you cannot access the web interface...

  1. cd /path/where/we/will/make/swap-file
  2. Create a 64MB swap-file:
    dd if=/dev/zero of=swap-file bs=1M count=64
  3. mkswap swap-file
  4. swapon swap-file
  5. Then go to LuCI to specify the swap file in System > Mount points to have it mounted at next router reboot.

For worldwide access add a rule in LEDE firewall:
Any tcp, udp
From any host in wan
To any router IP at port 9091 on this device

Source

Bandwidth Monitor (nlbw)

opkg install luci-app-nlbwmon

Aussi :

https://github.com/Kiougar/luci-wrtbwmon

LEDE/OpenWRT on GL-AR150

Written by pmd - - no comments

How to upgrade GL-AR150 to Stock OpenWRT

  1. Connect to router using SSH
  2. # cd /tmp
  3. Check what is the last available release for GL-AR150 here.
  4. # wget http://downloads.lede-project.org/releases/17.01.4/targets/ar71xx/generic/lede-17.01.4-ar71xx-generic-gl-ar150-squashfs-sysupgrade.bin
  5. # sysupgrade lede-17.01.4-ar71xx-generic-gl-ar150-squashfs-sysupgrade.bin

Source

I installed this version: LEDE Reboot (17.01.4, r3560-79f57e422d).

How to upgrade all packets

opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade

Sources 1, 2

Enabling remote SSH access on LEDE/OpenWRT

Configure Dropbear

  1. Go to the System / Administration page.
  2. Under “SSH Access”, for the default “Dropbear instance”, set “Interface” to “unspecified”.

This will cause dropbear to accept connections on all interfaces.

Open port 22 (or other)

  1. Go to the Network / Firewall / Traffic Rules.
  2. Scroll down to the “Open ports on router” section.
  3. Enter a name for this rule, e.g. “Allow-SSH-WAN”.
  4. Set “Protocol” to “TCP”.
  5. Enter “22” as the “External Port”.
  6. Click “Add”.
  7. Click “Save and Apply”.

Source

Using USB storage devices and FAT32&NTFS filesystems

  1. Connect to router using SSH
  2. # opkg update
  3. # opkg install kmod-usb-storage
  4. # opkg install usbutils
  5. # lsusb -t
    /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M
       |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 480M
  6. To add support of FAT32 and NTFS (not tested yet) usb flash/disk drives:
    # opkg install kmod-fs-vfat ntfs-3g
  7. Then go to the LuCI administration page, System > Mount points, and configure :

Sources 1, 2, 3, 4, 5

Using the Huawei E3372 Hi-Link LTE Dongle with OpenWRT

Huawei E3372 and AR-150 have 192.168.8.1/24 IPv4 networks, change the LAN IP of AR-150.

  1. # opkg update && opkg install kmod-usb-net-rndis usb-modeswitch
    Of course, an internet connection is needed through Ethernet or Wifi for this step. :(
  2. Then go to the LuCI administration page, Network > Interfaces > Add new interface...:
  3. In my case interface "eth2" is now available to configure:
  4. In tab Firewall Settings, add this new interface in the wan firewall-zone:
  5. Click on Connect of the new network 4G_LTE:
  6. Done, you even have access to the USB dongle administration page 192.168.8.1.

Source Nouvelle source (2020-02)

DDNS

  1. # opkg install luci-app-ddns
  2. Go to LuCI administration interface > Services > Dynamic DNS.
  3. I used a Free DNS provider named freedns.afraid.org.

Source

Samba network share

  1. # opkg install luci-app-samba
  2. Go to LuCI administration interface > Services > Network Shares.
  3. Add shared directories:
    • Name: samba
    • Path: /Path/to/mounted/usb/key
    • Allowed user: empty
    • Create mask: 777
    • Directory mask: 777

Source

SFTP server

  1. # opkg update && opkg install openssh-sftp-server
  2. Use Filezilla or other to connect to sftp server.

Source

Road trip equipment

Written by pmd - - no comments

Road trip around France.

The car is a Citroën C4 Picasso:

It is planned to take all these during the trip:

  • 1 matelas 140x190x8
  • 1 couettes une personne + 1 duvet + 1 traversin
  • 1 bouteille de gaz Primagaz Twiny 6kg
  • 1 détendeur Clip-On bleu lagon (Un détendeur est fourni avec la première Twiny achetée. Source)
  • 1 tuyau de raccord gaz 1.5m
  • 1 réchaud gaz Base Camp Lid
  • 1 carton dans lequel placer le réchaud pour couper le vent
  • 1 poêle + 1 casserole + 1 couvercle
  • 1 planche à découper
  • 1 cuillère en bois
  • 2 torchons
  • 2 tupperwares
  • 2 sets de couverts (assiette + fourchette + couteau + cuillère)
  • 2 tasses
  • 1 éponge
  • 1 paic citron
  • 2 jerricans eau 10L
  • bac de manutention l.45 x P.35 x H.26.6 cm
  • dalles d'agencement 100 x 60 x 1.8 cm
  • 2 tréteaux
  • 1 poutre
  • 1 speaker bluetooth
  • 1 chargeur USB / emetteur FM alimenté allume cigare
  • 2 batterie portable 10000mAh
  • 1 routeur 4G
  • 1 savon de Marseille

One application has been used to find places to sleep : https://park4night.com/

An improvement that could be useful is to design a parcel shelf (plage-arrière) in wood in order to put the gaz cooker on it and be able to cook at the back of the car during rainy days. We thankfully didn't get any rainy days except the very first one of the trip.
It could be nice to take two folding chairs to sit anywhere you stop. But I don't know where to store it while sleeping...

Pizza/Tarte à la tomate

Written by pmd - - no comments

Prepare a pizza base

 Recipe pour 3 pâtes fines:

  • Farine : 500g
    • Farine : 100 g = 200 ml
  • 1 sachet de levure de boulangerie express
    • 1 sachet de levure = 3 cuillères à café
  • 1 cuillère à café de sel
  • 250mL d'eau tiède
  • 1 cuillère à café de sucre
  1. Verser la levure, le sel et le sucre dans un verre doseur. Ajouter 1/4 de litre d'eau tiède, bien mélanger. Couvrir d'un film plastique et laisser reposer environ 10 minutes (jusqu'à l'apparition d'une mousse brune bien épaisse en surface).
  2. Verser la farine dans un grand saladier et y faire un puits.
  3. Verser le mélange du verre doseur dans le saladier, mélanger à la main. Puis quand la pâte n'est plus collante pétrir environ 5 minutes à la main sur une surface farinée.Arroser d'un peu d'huile d'olive, puis pétrir à nouveau environ 5 minutes.
  4. Laisser reposer au moins 1 h sous un linge humide dans un endroit tiède (à côté d'un radiateur, d'une cheminée ou d'un poêle en hiver).
  5. Après repos, pétrir quelques instants puis diviser la pâte en trois boules égales (on peut en congeler).
    Etaler la pâte sur une surface farinée.

Make the pizza

  1. Switch on the oven at 180°C.
  2. Spread mustard everywhere on the base.
  3. Slice tomatoes and put it on the base.
  4. Mix an egg with tomato paste and pour it on the tomatoes.
  5. Disperse herbs and pepper on the tomatoes.
  6. Grate cheese (Emmental) and disperse it.
  7. Add sliced peperoni/salami.
  8. Put the pizza in the oven for 20min.

If you compare with Insanity MAX:30 nutrition plan:

  • 1 veggie (tomato) + 1 protein (egg + pepperoni) + 2 carbs (base) + 2 healthy fat (cheese) + 2 oil & nuts

Classified in : Food - Tags : none

Звери - Районы-кварталы

Written by pmd - - no comments

Районы-кварталы, аккорды @ amdm.ru
Звери - Районы-кварталы (песня под гитару)

Am  X  0  2  2  1  0
Dm  X  X  0  2  3  1
E   0  2  2  1  0  0
F   1  3  3  2  1  1

ms

 Am         Dm           E          Am
Больше нечего ловить - все, что надо я поймал,
 Am        Dm         E            Am
Надо сразу уходить, чтоб никто не привыкал.
 Am       Dm        E          Am
Ярко-желтые очки, два сердечка на брелке,
 F       Dm          E      E   
Развеселые зрачки, твое имя на руке.

Припев:
  Am         Dm      E     Am    
Районы, кварталы, жилые массивы, 
F     Dm     E     Am             
Я ухожу, ухожу красиво.           
  Am         Dm      E     Am    
Районы, кварталы, жилые массивы, 
F     Dm     E     Am             
Я ухожу, ухожу красиво.           

 Am         Dm           E          Am
У тебя все будет класс, будут ближе облака,
 Am         Dm           E          Am
Я хочу как в первый раз и поэтому пока.
 Am         Dm           E          Am
Ярко-желтые очки, два сердечка на брелке,
 F       Dm          E      E
Развеселые зрачки, я шагаю налегке.

Припев:
  Am         Dm      E     Am    
Районы, кварталы, жилые массивы, 
F     Dm     E     Am             
Я ухожу, ухожу красиво.           
  Am         Dm      E     Am    
Районы, кварталы, жилые массивы, 
F     Dm     E     Am             
Я ухожу, ухожу красиво.           

 Am         Dm           E          Am
Вот и все никто не ждет и никто не в дураках,
 Am         Dm           E          Am
Кто-то любит, кто-то врет и летает в облаках.
 Am         Dm           E          Am
Ярко-желтые очки, два сердечка на брелке,
 F       Dm          E      E
Развеселые зрачки, я шагаю налегке.

Припев:
  Am         Dm      E     Am    
Районы, кварталы, жилые массивы, 
F     Dm     E     Am             
Я ухожу, ухожу красиво.           
  Am         Dm      E     Am    
Районы, кварталы, жилые массивы, 
F     Dm     E     Am             
Я ухожу, ухожу красиво.           
  Am         Dm      E     Am    
Районы, кварталы, жилые массивы, 
F     Dm     E     Am             
Я ухожу, ухожу красиво.           
  Am         Dm      E     Am    
Районы, кварталы, жилые массивы, 
F     Dm     E     Am             
Я ухожу, ухожу красиво.    

Daft Punk - Get Lucky

Written by pmd - - no comments

Capo 2
Am  0  0  2  2  1  0
C   0  3  2  0  1  0
Em  0  2  2  0  0  0
D   0  0  0  2  3  2

ms

Like the legend of the phoenix, huh
All ends with beginnings
What keeps the planets spinning, uh huh
The force from the beginning, huh, look

We've come too far
To give up who we are
So let's raise the bar
And our cups to the stars

She's up all night 'til the sun
I'm up all night to get some
She's up all night for good fun
I'm up all night to get lucky

We're up all night 'til the sun
We're up all night to get some
We're up all night for good fun
We're up all night to get lucky

We're up all night to get lucky
We're up all night to get lucky
We're up all night to get lucky
We're up all night to get lucky

The present has no ribbon
Your gift keeps on giving
What is this I'm feeling?
If you want to leave, I'm with it, uh huh

We've come too far
To give up who we are
So let's raise the bar
And our cups to the stars

She's up all night 'til the sun
I'm up all night to get some
She's up all night for good fun
I'm up all night to get lucky

We're up all night 'til the sun
We're up all night to get some
We're up all night for good fun
We're up all night to get lucky

We're up all night to get lucky
We're up all night to get lucky
We're up all night to get lucky
We're up all night to get lucky

We're up all night to get
We're up all night to get
We're up all night to get
We're up all night to get

We're up all night to get
We're up all night to get
We're up all night to get
We're up all night to get

We're up all night to get together
We're up all night to get (Oh, we might get funked again)
We're up all night to get lucky
We're up all night to get lucky

We're up all night to get lucky
We're up all night to get lucky
We're up all night to get lucky
We're up all night to get lucky

We're up all night to get lucky
We're up all night to get lucky
We're up all night to get lucky
We're up all night to get lucky

(We're up all night to get lucky) We've come too far
(We're up all night to get lucky) To give up
(We're up all night to get lucky) Who we are
(We're up all night to get lucky) So let's
(We're up all night to get lucky) Raise the bar
(We're up all night to get lucky) And our cups
(We're up all night to get lucky) To the stars
(We're up all night to get lucky)

She's up all night 'til the sun
I'm up all night to get some
She's up all night for good fun
I'm up all night to get lucky

We're up all night 'til the sun
We're up all night to get some
We're up all night for good fun
We're up all night to get lucky

We're up all night to get lucky
We're up all night to get lucky
We're up all night to get lucky
We're up all night to get lucky

We're up all night to get lucky
We're up all night to get lucky
We're up all night to get lucky
We're up all night to get lucky

Manu Chao - Me gustas tu

Written by pmd - - no comments

All song:

Bm  7  9  9  7  7  7
A   5  7  7  6  5  5
Em  X  7  9  9  8  7
 e|---------|
 B|---------|
 G|---------|
 D|---------|
 A|-7-------|
 E|---7-9-8-|

ms

Spoken:
Te lo dije muy clarito
12 de la noche en La Habana, Cuba
11 de la noche en San Salvador, El Salvador
11 de la noche en Managua, Nicaragua

Me gustan los aviones, me gustas tú,
me gusta viajar, me gustas tú,
me gusta la mañana, me gustas tú,
me gusta el viento, me gustas tú,
me gusta soñar, me gustas tú,
me gusta la mar, me gustas tú,

Qué voy a hacer, je ne sais pas
qué voy a hacer, je ne sais plus,
qué voy a hacer, je suis perdu
¿qué horas son mi corazón?,

Me gusta la moto, me gustas tú,
me gusta correr, me gustas tú,
me gusta la lluvia, me gustas tú,
me gusta volver, me gustas tú,
me gusta marihuana, me gustas tú,
me gusta colombiana, me gustas tú,
me gusta la montaña, me gustas tú,
me gusta la noche (me gustas tú).

Qué voy a hacer, je ne sais pas
qué voy a hacer, je ne sais plus,
qué voy a hacer, je suis perdu
¿qué horas son mi corazón?,

Spoken: Doce, un minuto

Me gusta la cena, me gustas tú,
me gusta la vecina, me gustas tú,
(Spoken: Radio reloj: una de la mañana)
me gusta su cocina, me gustas tú,
me gusta camelar, me gustas tú,
me gusta la guitarra, me gustas tú,
me gusta el reggae, me gustas tú,

Qué voy a hacer, je ne sais pas
qué voy a hacer, je ne sais plus,
qué voy a hacer, je suis perdu
¿qué horas son mi corazón?,

Me gusta la canela, me gustas tú,
me gusta el fuego, me gustas tú,
me gusta menear, me gustas tú,
me gusta La Coruña, me gustas tú,
me gusta Malasaña, me gustas tú,
me gusta la castaña, me gustas tú,
me gusta Guatemala, me gustas tú.

Qué voy a hacer, je ne sais pas
qué voy a hacer, je ne sais plus,
qué voy a hacer, je suis perdu
¿qué hora son mi corazón?

(qué voy a hacer, je ne sais plus,
qué voy a hacer, je ne sais plus,
qué voy a hacer, je suis perdu),
¿qué hora son mi corazón...?
(qué voy a hacer, je ne sais plus,
qué voy a hacer, je ne sais plus,
qué voy a hacer, je suis perdu),
¿qué hora son mi corazón...?
¿qué hora son mi corazón...?
(¿qué hora son mi corazón...?)

¿qué hora son mi corazón...?
¿qué hora son mi corazón...?
¿qué hora son mi corazón...?

Spoken:
4 de la mañana

Alabim alabam alabim bom bam
alabim alabam alabim bom bam
obladi, oblada obladi da da
alabim alabam alabim bom bam

Spoken:
Radio reloj: 5 de la mañana.
No todo lo que es oro brilla; remedio chino e infalible...

Classified in : Guitare - Tags : none
Rss feed of the articles