{{tag>[hardware apu sms initramfs]}} =====Arch Linux - send SMS from initramfs===== This is just a proof of concept. Might be useful to notify someone when a system has been booted and reached initramfs, and it is waiting for the decryption pass phrase. ====Install packages==== * Install the required tools:pacman -S screen expect ====Configure HSDPA module==== Huawei MU609 * The module might be configured for packet switched (PS) only. To be able to send SMS via AT commands, the module needs to be configured for CP_PS, CS or CS_ONLY, CS = circuit switched. If you also want to set up a dataconnection, configure CS_PS. If you don't include CS, you will receive the error: ''+CMS ERROR: 500'' when sending an SMS. # screen /dev/ttyUSB0 115200 at^syscfg=2,2,3FFFFFFF,1,2 ====Configure initramfs==== * Edit the mkinitcpio configuration file: ''/etc/mkinitcpio.conf'': # Load these modules before any boot hooks are run MODULES="ehci_hcd ohci_pci usbserial option ohci_hcd ehci_pci" # Include these binaries BINARIES="/usr/bin/expect /usr/bin/stty" # Include the script and TCL dependency FILES="/usr/lib/tcl8.6/init.tcl /usr/local/bin/init-sms.sh" # Add custom 'sms' hook HOOKS="base udev autodetect modconf block keyboard sms encrypt filesystems fsck" ====Create custom hook==== * ''/usr/lib/initcpio/hooks/sms'':#!/usr/bin/ash run_hook() { /usr/local/bin/init-sms.sh } * ''/usr/lib/initcpio/install/sms''#!/bin/bash build() { add_runscript } ====Create SMS script==== * This is just a simple quick expect script. #!/usr/bin/expect # device set modem /dev/ttyUSB0 # keep it open exec sh -c "sleep 3 < $modem" & # serial port parameters (probably not needed for USB) exec stty -F $modem 9600 raw -clocal -echo -istrip -hup # connect spawn -open [open $modem w+] send "at\r" expect "OK" # Unlock SIM if needed. send "at^cpin?\r" expect { # ^CPIN: SIM PIN,3,10,3,10,3 "*CPIN: SIM PIN*" { send_user "SIM is locked, trying PIN...\n" send "at^cpin=123456\r" expect { "OK" { } "+CME ERROR: incorrect password" { send_user "Wrong PIN, please configure the right PIN.\n" } } } # ^CPIN: READY,,10,3,10,3 "*CPIN: READY*" { send_user "SIM is ready.\n" } } # Wait 5 seconds, device is connecting to network... sleep 5 # set text mode send "at+cmgf=1\r" expect "OK" # set GSM encoding send "at+csmp=,,,0\r" expect "OK" # Configure SMS service center send {AT+CSCA="+31653131313"} send "\r" expect "OK" # Select TE character set send {at+cscs="GSM"} send "\r" expect "OK" # Send SMS to number... send {at+cmgs="0612345678"} send "\r" expect "> " # Text to send, end with \x1A = ctrl-z send "System has reached initramfs." send "\x1a" ====Generate new initramfs==== * Generate new initramfs:mkinitcpio -p linux * Reboot and test!