OpenWrt TOOLS

# 備忘録兼ねて

::: note
### 初心者対応構成
- スクリプトでの自動設定
- UCIとLuCi及びWinSCPにて比較しながら作業がおススメ
:::

::: note
### [PowerShell](https://learn.microsoft.com/ja-jp/powershell/scripting/what-is-windows-powershell?view=powershell-7.4)で[SSHアクセス](https://openwrt.org/docs/guide-quick-start/sshadministration)

- [PowerShellの開始](https://learn.microsoft.com/ja-jp/powershell/scripting/windows-powershell/starting-windows-powershell?view=powershell-7.4) (キー入力)：`Win`+`x` > `a` > `はい`
※Windows7以降標準搭載

```sh
ssh root@192.168.1.1
```

<details><summary>ssh root@192.168.1.1のショートカット作成（デスクトップ）</summary>

```powershell:powershell
$DESKTOP = ([Environment]::GetFolderPath("Desktop") + "\192.168.1.1.lnk")
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$DESKTOP")
$Shortcut.TargetPath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
$Shortcut.Arguments = '-windowstyle hidden -ExecutionPolicy RemoteSigned "Start-Process ssh root@192.168.1.1"'
$Shortcut.IconLocation = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe,0"
$Shortcut.WorkingDirectory = "."
$Shortcut.Save()

```

- `強制的に貼り付け`
- `yes`

---

</details>

<details><summary>SSHログイン出来ない場合:exclamation:</summary>

known_hostsクリア
- `C:\Users\yourusername\.ssh\known_hosts` ※Windows隠しファイル
```powershell:powershell
Clear-Content .ssh\known_hosts -Force

```
---
OpenSSHのインストール
※Windows 10 Fall Creators Update(1709)以降標準搭載
- 機能の確認
```powershell:powershell
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

```
- 機能のインストール
```powershell:powershell
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

```
---

</details>

:::

# TOOLS
::: note
### パスワード初期化
```sh
sed -i 's/^root:[^:]*:/root::/' /etc/shadow
```

:::

::: note
### dos2unix
Unix形式の改行コード（LF）に変換
```sh
opkg install dos2unix
```
```sh
# 例
dos2unix /etc/config-software/openwrt-config.sh
```
UTF-8に変換
```sh
opkg install iconv
```
```sh
# 例
iconv -f SHIFT_JIS -t UTF-8 /etc/config-software/openwrt-config.sh > /tmp/openwrt-config.sh
mv /tmp/openwrt-config.sh /etc/config-software/openwrt-config.sh

```

:::
::: note
### [ethtool](https://openwrt.org/packages/pkgdata/ethtool)
使い方
```sh
# opkg update
opkg install ethtool

SFP="eth1" # sfp2　など
ethtool -s ${SFP} speed 2500 duplex full autoneg on

ethtool -m ${SFP}

```
:::

::: note
### kmod-qca-nss-dp
```sh
dmesg | grep -i nss

```
:::

::: note
### find
```sh
find / -name 〇〇〇*

```
:::

::: note
### [BusyBox](https://busybox.net/downloads/BusyBox.html)
```ruby
busybox <アプレット> [引数...] # または
<アプレット> [引数...] # シンボリックリンクされている場合

```
:::

::: note
### SLEEP 0.5（小数点以下対応）

0.2秒
```sh
if command -v usleep >/dev/null 2>&1; then usleep 200000; else sleep 0.2; fi
```

```sh
# 使い方
# sleep_safe 0.5  # 0.5秒スリープ
# sleep_safe 0.2  # 0.2秒スリープ
# sleep_safe 1    # 1秒スリープ

sleep_safe() {
    local delay="$1"
    if command -v usleep >/dev/null 2>&1; then
        usleep "$(awk "BEGIN {print $delay * 1000000}")"
    else
        sleep "$delay"
    fi
}
```

:::

::: note
### htpasswdを使えるようにする
対応：arch64_cortex-a53, arm_cortex-a7_neon-vfpv4, x86_64

[htpasswd](https://github.com/site-u2023/config-software/blob/main/htpasswd)
libaprutil 75.04 KiB
libapr 92.12 KiB
libexpat 45.10 KiB
libuuid1 11.00 kiB

```sh
DISTRIB_ARCH=`cat /etc/openwrt_release | grep DISTRIB_ARCH | awk '{print substr($0,index($0,"=") )}'`
if  [ "${DISTRIB_ARCH}" = "='aarch64_cortex-a53'" ]; then
wget --no-check-certificate -O /usr/bin/htpasswd https://github.com/site-u2023/config-software/raw/main/htpasswd
fi
if  [ "${DISTRIB_ARCH}" = "='arm_cortex-a7_neon-vfpv4'" ]; then
wget --no-check-certificate -O /usr/bin/htpasswd https://github.com/site-u2023/config-software/raw/main/htpasswd-arm
fi
if  [ "${DISTRIB_ARCH}" = "='x86_64'" ]; then
wget --no-check-certificate -O /usr/bin/htpasswd https://github.com/site-u2023/config-software/raw/main/htpasswd-x86
fi
chmod +x /usr/bin/htpasswd
opkg update
opkg install --nodeps libaprutil
opkg install --nodeps libapr
opkg install --nodeps libexpat
opkg install --nodeps libuuid1

```
```sh
USERNAME="ユーザー名"
PASSWORD="パスワード"
htpasswd -B -n -b ${USERNAME} ${PASSWORD}

```
:::

::: note
### インストール済みパッケージ確認

フラッシュ後のインストールパッケージ確認
- [install-config.sh](https://github.com/site-u2023/config-software/blob/main/install-config.sh)
```bash
mkdir /etc/config-software; wget --no-check-certificate -O /etc/config-software/list-installed/install-config.sh https://raw.githubusercontent.com/site-u2023/config-software/main/install-config.sh
sh /etc/config-software/list-installed/install-config.sh > /etc/config-software/list-installed/my-package
cat /etc/config-software/list-installed/my-package

```

入っているパッケージ全て確認
```bash
grep -H Installed-Size: /usr/lib/opkg/info/*.control | sed 's,^.*/\([^/]\+\)\.control:Installed-Size: *\(.*\),\2\t\1,' | sort -n

```
:::

:::note
### [openwrt opkg 一覧表示 プリインのパッケージと、あとからインストールしたのを分類](https://pastebin.com/AaPqvVej)
```sh
#!/bin/sh
# Create temporary files to store package information with timestamps
temp_file_user=$(mktemp)
temp_file_ok=$(mktemp)
count_user=0
count_ok=0
 
# Get total number of packages
total_packages=$(opkg list-installed | wc -l)
echo "Total packages to process: $total_packages"
 
# Create files to store package names
user_packages=""
ok_packages=""
 
# Loop through installed packages and get their installation time and status
for pkg in $(opkg list-installed | awk '{print $1}'); do
    status=$(opkg status $pkg | grep -E 'Status' | awk '{print $3}')
    installed_time=$(opkg status $pkg | grep 'Installed-Time' | awk '{print $2}')
    # Convert timestamp to YYYY-MM-DD HH:MM:SS format
    installed_datetime=$(date -d @$installed_time +'%Y-%m-%d %H:%M:%S')
 
    if [ "$status" = "user" ]; then
        echo "$installed_datetime $pkg" >> $temp_file_user
        count_user=$((count_user + 1))
        user_packages="$user_packages $pkg"
    else
        echo "$installed_datetime $pkg" >> $temp_file_ok
        count_ok=$((count_ok + 1))
        ok_packages="$ok_packages $pkg"
    fi
 
    echo "($((count_user + count_ok))/$total_packages) U: $count_user, P: $count_ok package: $pkg"
done
 
# Sort the temporary files by date and write to the output file
{
    echo "## User Installed Packages"
    sort $temp_file_user
    echo ""
    echo "## PREINSTALL OK Installed Packages"
    sort $temp_file_ok
    echo ""
    echo "Total user installed packages: $count_user"
    echo "Total preinstall ok installed packages: $count_ok"
} > /tmp/installed_packages_with_time.txt
 
# Write the package names to separate files
echo $user_packages > /tmp/packagename-user.txt
echo $ok_packages > /tmp/packagename-ok.txt
 
# Clean up the temporary files
rm $temp_file_user $temp_file_ok
 
# Check if nano is installed, if not use cat and more
if command -v nano > /dev/null; then
    nano /tmp/installed_packages_with_time.txt
else
    cat /tmp/installed_packages_with_time.txt | more
fi

:::


::: note
### MTU調査

該当インターフェイス（WAN及びWAN6等）のMTUを`1500`にしてから実行
```sh
opkg install iputils-ping
reboot # 必須

```

```sh
ping -M do -s 1500 1.1.1.1

```

```sh
ping -M do -s 1500 one.one.one.one

```
以下のように表示される
`ping: local error: message too long, mtu=****`

MTUの値をそれぞれのインターフェイスに入力

:::

::: note
### ストレージの拡張

[cfdisksize2fs](https://openwrt.org/toh/google/wifi#expanding_storage_optional)
※Google Wi-Fiの場合
```sh
opkg update && opkg install cfdisk resize2fs
cfdisk /dev/mmcblk0

```
- 空のスペース行の前の最後のパーティションに移動します
- サイズ変更を選択
- 残りの空きスペースを占めるのに十分なスペースが自動的に選択されます
- パーティションテーブルを書き込んで終了します
- リブート
- 以下を使用してファイルシステムを更新します

```sh
LOOP0="空き領域の手前の領域"
resize2fs /dev/${LOOP0}

```
:::

::: note
### [Attended Sysupgrade](https://openwrt.org/docs/guide-user/installation/attended.sysupgrade)
```sh
opkg update
luci-app-attendedsysupgrade
opkg install auc

```
:::

::: note
### ハードウェアオフロード確認
```sh
modinfo nft_flow_offload

```
:::

::: note
### LuCi Runtime error
LuCiが壊れた時
```sh
opkg install luci-app-uhttpd

```
:::

::: note
### LED
[ネットフィルター](https://openwrt.org/start?id=docs/guide-user/base-system/led_configuration#net_filter)
利用可能LED確認
```sh
ls /sys/class/leds/

```
設定
```sh
LED='green:router'
opkg update
opkg install kmod-ipt-led
# 受信SSHトラフィック
iptables -A INPUT -p tcp --dport 22 -j LED --led-trigger-id ssh --led-delay 1000
# トリガー
echo netfilter-ssh > /sys/class/leds/${LED}/trigger

```
:::

::: note
### 温度
インストール
```sh
opkg update
opkg install lm-sensors

```
確認
```sh
sensors

```
:::

::: note
### lshw
```sh
hwinfo

```
:::
::: note
### arp
```sh
arp -a

```

### ifconfig
```sh
ifconfig

```
### fping
```sh
 fping -g 192.168.1.0/24

 ```
:::

::: note
### デバイス確認
```sh
ls -l /dev/*

```

### USB確認
```sh
lsusb && lsusb -t

```
:::


# あとがき
大抵の事はOpenWrtサイトにある
ただ、資料が膨大だから、探すのは至難
限りなく無知だったので、ひたすら読み漁った・・・