2022年2月20日日曜日

pCP Mobile:自宅WiFiとスマホテザリングのIPアドレスを固定できた!(スマホはダメ)

接続しているSSIDでIPアドレスを変更したい(pcp_startup.sh編)

wlan0.shが起動するときには未だWiFiが接続完了になってないようだ。
ならば、その後に設定すれば良いじゃん!
と思いついた。

piCorePlayerがブート時にキックするコマンドは
/opt/bootlocal.shからキックされる/usr/local/etc/init.d/pcp_startup.shのようだ。
これを変更してみる。

1.pcp_startup.shの確認
早速、/usr/local/etc/init.d/pcp_startup.shの中身を確認してみる。

tc@pCP:/usr/local/etc/init.d$ cat pcp_startup.sh 
#!/bin/sh
# put other system startup commands here

GREEN="$(echo -e '\033[1;32m')"

echo
echo "${GREEN}Running bootlocal.sh..."
#pCPstart------
/usr/local/etc/init.d/pcp_startup.sh 2>&1 | tee -a /var/log/pcp_boot.log

中略

#----------------------------------------------------------------------------------------
# Start wifi.
#----------------------------------------------------------------------------------------
WPACONFIGFILE=$WPASUPPLICANTCONF

if [ $WPACONFIGFOUND -eq 1 ]; then
WIFI="on"
pcp_save_to_config
dos2unix -u $WPACONFIGFILE
if [ $(pcp_wifi_maintained_by_user) -ne 0 ]; then
pcp_wifi_read_wpa_supplicant "colour"
pcp_wifi_write_wpa_supplicant "colour"
fi
pcp_wifi_update_wifi_onbootlst
pcp_backup text
echo "${RED}Reboot needed to enable wifi...${NORMAL}"
sleep 3
sudo reboot
exit 0
fi

if [ "$WIFI" = "on" ]; then
echo -n "${BLUE}"
/usr/local/etc/init.d/wifi wlan0 start
echo "Starting WiFi... ${GREEN}Done.${NORMAL}"
fi

#----------------------------------------------------------------------------------------
# Load configuration file pcp.cfg
#----------------------------------------------------------------------------------------
echo -n "${BLUE}Loading piCorePlayer configuration file...${NORMAL}"

中略

echo "${YELLOW}A large offset between 1970 and now is normal.${NORMAL}"

sudo su -c 'echo "Finished piCorePlayer v'${PCP_VERSION}' startup." > /dev/kmsg'

unset ORIG_AUDIO

という具合に長いスクリプトだ。
この中でwlan0.shがキックされ終了時には「Starting WiFi...」となり
WiFi接続が完了するようだ。

2.WiFiの状態を確認してみる
pcp_startup.shを修正してWiFi完了後の状態を確認する。

tc@pCP:/usr/local/etc/init.d$ sudo vi pcp_startup.sh 
tc@pCP:/usr/local/etc/init.d$ cat pcp_startup.sh
前略

if [ "$WIFI" = "on" ]; then
echo -n "${BLUE}"
/usr/local/etc/init.d/wifi wlan0 start
echo "Starting WiFi... ${GREEN}Done.${NORMAL}"
fi

#-------------
# Pei
#-------------
wpa_cli -iwlan0 status
iwconfig wlan0

#----------------------------------------------------------------------------------------
# Load configuration file pcp.cfg
#----------------------------------------------------------------------------------------

後略

という具合に突っ込んでみ、変更後は保存してリブート!
tc@pCP:/usr/local/etc/init.d$ sudo filetool.sh -b
Backing up files to /mnt/mmcblk0p2/tce/mydata.tgz / 
Done.
tc@pCP:/usr/local/etc/init.d$ sudo reboot

起動ログを確認してみる。
tc@pCP:~$ cat /var/log/pcp_boot.log
Starting piCorePlayer v8.0.0 startup...
Starting rngd using /dev/hwrng... Done.
Checking for boot files on mmcblk0p1...
  Trying to mount /dev/mmcblk0p1.
  ssh file found on mmcblk0p1.
  newpcp.cfg not found on mmcblk0p1.
Setting default piCorePlayer repository...
Generating sound card drop-down list...
Starting WiFi on wlan0...
udhcpc: started, v1.33.0
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending select for 192.168.3.188
udhcpc: lease of 192.168.3.188 obtained, lease time 7200
deleting routers
route: SIOCDELRT: No such process
adding dns 192.168.3.1
adding dns 192.168.3.1
Starting WiFi... Done.
bssid=40:xx:xx:xx:xx:32
freq=2452
ssid=TP-Link_BC32
id=0
id_str=Home
mode=station
wifi_generation=4
pairwise_cipher=CCMP
group_cipher=TKIP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.3.188
address=88:xx:xx:xx:xx:5e
uuid=e92axxxx-xxxx-xxxx-xxxx-xxxxff278537
wlan0     IEEE 802.11  ESSID:"TP-Link_BC32"  
          Mode:Managed  Frequency:2.452 GHz  Access Point: 40:xx:xx:xx:xx:32   
          Bit Rate=6.5 Mb/s   Tx-Power=20 dBm   
          Retry short  long limit:2   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=61/70  Signal level=-49 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:3   Missed beacon:0

Loading piCorePlayer configuration file... Done.
Loading pcp-lms-functions... Done.
Waiting for sound card Headphones to populate......................................... Failed to find Headphones... Done (42).
Waiting for network. Done (1).
Starting Openssh server... Done.
Starting Squeezelite and/or Shairport-sync... Done.
Starting httpd web server... Done.
Starting to advertise pcp.local... Done.
Setting CPU scaling governor to ondemand... Done.
Creating static footer... Done.

Finished piCorePlayer v8.0.0 startup.

よっしゃ~、バッチリSSIDを取得できてる!!
ここに突っ込むぞ。

3.IPアドレスを変更する
IPアドレスはDHCPで取得しているが勝手に変更できるようだ。
なので、このタイミングでSSIDを識別してIPアドレスを変更するようにした。

tc@pCP:/usr/local/etc/init.d$ sudo vi pcp_startup.sh 
tc@pCP:/usr/local/etc/init.d$ cat pcp_startup.sh
前略

if [ "$WIFI" = "on" ]; then
echo -n "${BLUE}"
/usr/local/etc/init.d/wifi wlan0 start
echo "Starting WiFi... ${GREEN}Done.${NORMAL}"
fi

#-------------
# Pei
#-------------
wpa_cli -iwlan0 status
iwconfig wlan0
if  iwconfig wlan0 | grep -q Redmi ; then
    ifconfig wlan0 192.168.132.231 netmask 255.255.255.0 broadcast 192.168.132.255 up
else
    ifconfig wlan0 192.168.3.96 netmask 255.255.255.0 broadcast 192.168.3.255 up
fi
echo "Pei's WiFi setting Done."

#----------------------------------------------------------------------------------------
# Load configuration file pcp.cfg
#----------------------------------------------------------------------------------------

という具合にしてみた。
スマホテザリングできなくても自宅WiFiに繋がるように順序を入れ替えた。

変更後は保存してリブート!
tc@pCP:/usr/local/etc/init.d$ sudo filetool.sh -b
Backing up files to /mnt/mmcblk0p2/tce/mydata.tgz / 
Done.
tc@pCP:/usr/local/etc/init.d$ sudo reboot

起動ログを確認してみる。
tc@pCP:~$ cat /var/log/pcp_boot.log
Starting piCorePlayer v8.0.0 startup...
Starting rngd using /dev/hwrng... Done.
Checking for boot files on mmcblk0p1...
  Trying to mount /dev/mmcblk0p1.
  ssh file found on mmcblk0p1.
  newpcp.cfg not found on mmcblk0p1.
Setting default piCorePlayer repository...
Generating sound card drop-down list...
Starting WiFi on wlan0...
udhcpc: started, v1.33.0
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending discover
udhcpc: sending select for 192.168.3.188
udhcpc: lease of 192.168.3.188 obtained, lease time 7200
deleting routers
route: SIOCDELRT: No such process
adding dns 192.168.3.1
adding dns 192.168.3.1
Starting WiFi... Done.
bssid=40:xx:xx:xx:xx:32
freq=2452
ssid=TP-Link_BC32
id=0
id_str=Home
mode=station
wifi_generation=4
pairwise_cipher=CCMP
group_cipher=TKIP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.3.188
address=88:xx:xx:xx:xx:5e
uuid=e92axxxx-xxxx-xxxx-xxxx-xxxxff278537
wlan0     IEEE 802.11  ESSID:"TP-Link_BC32"  
          Mode:Managed  Frequency:2.452 GHz  Access Point: 40:xx:xx:xx:xx:32             Bit Rate=6.5 Mb/s   Tx-Power=20 dBm   
          Retry short  long limit:2   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=61/70  Signal level=-49 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:3   Missed beacon:0

Pei's WiFi setting Done.
Loading piCorePlayer configuration file... Done.
Loading pcp-lms-functions... Done.
Waiting for sound card Headphones to populate......................................... Failed to find Headphones... Done (42).
Waiting for network. Done (1).
Starting Openssh server... Done.
Starting Squeezelite and/or Shairport-sync... Done.
Starting httpd web server... Done.
Starting to advertise pcp.local... Done.
Setting CPU scaling governor to ondemand... Done.
Creating static footer... Done.

Finished piCorePlayer v8.0.0 startup.

スクリプトはちゃんと動いたようだ。
試してみる。

tc@pCP:~$ ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 88:xx:xx:xx:xx:5E
          inet addr:192.168.3.96  Bcast:192.168.3.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:176 errors:0 dropped:57 overruns:0 frame:0
          TX packets:79 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:24689 (24.1 KiB)  TX bytes:14106 (13.7 KiB)

自宅WiFiのIPアドレスはちゃんと変更された。
192.168.3.96

今度はスマホにテザリングしてみると。。。
ちゃんと指定したIPアドレスに設定されていた。
192.168.132.231

やった~~!!できたできた~♪
後は本番機のスクリプトを変更して完了だぜ!!

2022/04/04:追記
スマホでsqueezeliteに接続できない。
ブラウザで192.168.132.231に接続もできない。
スマホ側のifconfigをコメントアウトしてみたら。。。
192.168.232.235なんてIPアドレスでテザリングされている!!
スマホがIPアドレスを取得する際に3オクテット目以降が変更されるようだ。
ということでテザリングのIPアドレスを固定することはできない。

そのため、前回設定で接続できなければ、
Network Utilityを使用してIPアドレスを調べるしかなさそうだ。
とりあえず今はそうしている(T_T)



0 件のコメント:

コメントを投稿