Auto-restart MariaDB after crash

Open file in nano (or other text editor) from root user:

nano /etc/systemd/system/multi-user.target.wants/mariadb.service

Change parameters in file:

# Restart crashed server only, on-failure would also restart, for example, when
# my.cnf contains unknown option
Restart=always
RestartSec=45s

Restart daemons:

systemctl daemon-reload
systemctl restart mariadb.service

Openwrt and 4G USB Modem Dongle (Huawei) E3372-325

1. Connect to router over ssh and run opkg update

2. Install packages opkg install kmod-usb-net kmod-usb-net-rndis kmod-usb-net-cdc-ether kmod-usb2 kmod-usb3 kmod-usb-net-huawei-cdc-ncm usb-modeswitch kmod-usb-serial usbutils

3. Check modem lsusb:

lsusb openwrt

4. Check connection name for modem dmesg | grep usb (for me it’s usb0, somethimes there’s name eth1 and etc.:

modem interface name

5. Create interface in Openwrt Web Panel «Network» — «Interfaces»:

create mobile interface

6. Important! Add new mobile interface in WAN-zone in firewall.

7. After all this manipulation you can see working interface:

working mobile interface

8. And after all these steps, I was able to go to the model control panel at the address of http://192.168.8.1/

Ubuntu 22.0.4 and 4G USB Modem Dongle (Huawei) E3372-325

For 4G USB Modem Dongle (Huawei) E3372-325 — first seconds you can see in lsusb Bus 005 Device 013: ID 3566:2001 Mobile Mobile and after Bus 005 Device 015: ID 12d1:155e Huawei Technologies Co., Ltd. Mobile

Full instruction here https://blog.tanatos.org/posts/huawei_e3372h-325_brovi_with_linux/.

So 2 scripts are below

/usr/local/bin/brovi_switch (make it executable!)

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# vim: filetype=bash

#   2023-01-28 Pavel Piatruk, piatruk.by

ID=$$

USB_ID=$(basename $DEVPATH)


{
#set|sort 

#ls -la /sys/$DEVPATH

echo bInterfaceClass on ports as follows

grep -H .  /sys$DEVPATH/1*/bInterfaceClass

IC=$( grep -h .  /sys$DEVPATH/*:1.0/bInterfaceClass )

echo "got bInterfaceClass on 1st port $IC"
    echo usb_modeswitch -b $BUSNUM -g $DEVNUM -v 3566 -p 2001

case $IC in
08) 
    echo Storage MODE
    ;;
e0)

    echo "Already RNDIS"
    LOCKFILE=/var/run/brovi.$USB_ID.lock
    if [[ -e $LOCKFILE ]]
    then    
        LOCKFILE_AGE=$(( $(date +%s ) - $(stat  $LOCKFILE -c %Y) )) 
        echo LOCKFILE_AGE=$LOCKFILE_AGE
    fi

    if [[ -n $LOCKFILE_AGE ]] && [[ $LOCKFILE_AGE -lt  10 ]]
    then    echo was switched VERY recently, noop
    else

    set > $LOCKFILE

    CMDS=(
        "usb_modeswitch -b $BUSNUM -g $DEVNUM -v $ID_VENDOR_ID -p $ID_MODEL_ID  -W -R  -w 400 "
        "usb_modeswitch -b $BUSNUM -g $DEVNUM -v $ID_VENDOR_ID -p $ID_MODEL_ID  -W -R "
    )

    i=0

    for CMD in "${CMDS[@]}"
    do
        i=$(($i+1))
        echo "=====STEP$i, run: $CMD"
        $CMD
    done
    fi

    ;;
ff)
    echo Serial Port
    ;;
*)
    echo Unknown mode
    ;;
esac

} | logger -t BROVI

exit 0

and UDEV script /etc/udev/rules.d/40-huawei.rules

ACTION!="add", GOTO="modeswitch_rules_end"
SUBSYSTEM!="usb", GOTO="modeswitch_rules_end"

# All known install partitions are on interface 0
ATTRS{bInterfaceNumber}!="00", GOTO="modeswitch_rules_end"

GOTO="modeswitch_rules_begin"

LABEL="modeswitch_rules_begin"
# Huawei E3372-325
ATTR{idVendor}=="3566", ATTR{idProduct}=="2001", RUN+="/usr/local/bin/brovi_switch %k %p"

LABEL="modeswitch_rules_end"

Front-End System Design Links

Web resources

YouTube channels

Books

  • Designing Data-Intensive Applications (Martin Kleppmann)
  • Clean Architecture: A Craftsman’s Guide to Software Structure and Design (Robert C. Martin Series)

Useful Services

Serial (COM port) to USB cable for old APC UPS

Firstly find and buy cable on aliexpress by keywords «APC Smart UPS DB9, CP2102, USB RS232, serial 9 D-Sub, cable 940-0024C, Windows 7/8/10, Mac, Linux».

Continue reading

Infrastructure Plan For Small Developers Team

Software

  • Base for virtualization on bare-metal server (KVM + web): Proxmox
  • Linux for VM: Debian or Ubuntu
  • Password manager (Docker + web): Passbolt
  • Git & Team (Docker + web): GitLab
  • Task manager (Docker + web): Taiga
  • NAS: OpenMediaVault
  • An open-source & self-hostable Heroku / Netlify alternative: Coolify (Self hosting in 2023)

Minimal Hardware Requirements

  • CPU: 4 core (AMD Athlon 3000G, Intel i3 — all CPU with little TDP).
  • Disk: 500 Gb SSD/NVMe 1 disk for proxmox and VMs + 1 Tb HDD/SSD 1 disk for backup.
  • Memory: 32 Gb

WordPress Free Themes

GPLDL Premium WordPress Themes Repository

The GPLDL Premium WordPress Themes Repository currently counts 604 downloads.

GPLDL provides free downloads of Premium WordPress Themes from all leading WordPress Developers like AppThemes, CSSIgniter, Dessign, Cyberchimps, Elegant Themes, Elmastudio, Envato/Themeforest, Graph Paper Press, Obox, PanKogut, BuddyPress Team, ThemeZilla, Themify, WooThemes, WPMUDEV including regular updates when they become available.

All WordPress Themes at GPLDL are true originals (no modifications, not nulled, no malware) obtained from the respective developers and are redistributed legally under the terms of the GNU General Public License.

Download themes

Debug Angular application in VSCode and Chromium

If you want debug Angular application in VSCode and Chromium in Linux that you should’t install extensions for that! You need add only one file launch.json in your project with this configuration:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch Chrome",
      "request": "launch",
      "type": "chrome",
      "url": "http://localhost:4200/#",
      "webRoot": "${workspaceFolder}",
      "runtimeExecutable": "/usr/bin/chromium",
      "runtimeArgs": [
        "http://localhost:4200",
        "--new-window",
        "-user-data-dir=${workspaceFolder}/DevProfile",
        "--remote-debugging-port=9222",
        "--disable-background-networking"
      ]
    }
  ]
}

Important notes

  1. check path to chromium binary file, for me it’s «/usr/bin/chromium».
  2. maybe you don’t need create user-data-dir for debug action.
  3. if you see error «unverified breakpoint» in VSCode that meen you need check path url and webRoot fields in your launch.json.