|
7 | 7 |
|
8 | 8 | import xmir_base |
9 | 9 | from gateway import * |
| 10 | +import read_info |
10 | 11 |
|
11 | 12 | gw = Gateway() |
12 | 13 |
|
| 14 | +FN_kmod = 'kmod/xmir_patcher-{kver}-{arch}{preempt}.ko' |
| 15 | +fn_kmod = '/tmp/xmir_patcher.ko' |
13 | 16 | FN_patch = f'tmp/ssh_patch.sh' |
14 | 17 | fn_patch = '/tmp/ssh_patch.sh' |
15 | 18 | FN_install = f'tmp/ssh_install.sh' |
|
63 | 66 |
|
64 | 67 | rm -f /tmp/ssh_patch.log |
65 | 68 | $DIR_PATCH/ssh_patch.sh |
| 69 | +
|
| 70 | +### bdata_patch ### |
66 | 71 | ''' |
67 | 72 | with open(FN_install, 'w', newline = '\n') as file: |
68 | 73 | file.write(ssh_install) |
| 74 | + |
| 75 | +bdata_patch = ''' |
| 76 | +rm -f /tmp/bdata_patch.log |
| 77 | +TELNET_EN=`bdata get telnet_en` |
| 78 | +SSH_EN=`bdata get ssh_en` |
| 79 | +UART_EN=`bdata get uart_en` |
| 80 | +if [ "$TELNET_EN" != "1" -o "$SSH_EN" != "1" -o "$UART_EN" != "1" ]; then |
| 81 | + KMOD_FN=/tmp/xmir_patcher.ko |
| 82 | + if [ -f $KMOD_FN ]; then |
| 83 | + insmod $KMOD_FN |
| 84 | + if lsmod | grep -q xmir_patcher ; then |
| 85 | + echo 'set_mtd_rw|bdata' > /sys/module/xmir_patcher/parameters/cmd |
| 86 | + RESP=`cat /sys/module/xmir_patcher/parameters/cmd` |
| 87 | + if [ "${RESP::2}" = "0|" ]; then |
| 88 | + bdata set telnet_en=1 |
| 89 | + bdata set ssh_en=1 |
| 90 | + bdata set uart_en=1 |
| 91 | + bdata commit |
| 92 | + echo OK > /tmp/bdata_patch.log |
| 93 | + fi |
| 94 | + [ ! -f /tmp/bdata_patch.log ] && echo error_3 > /tmp/bdata_patch.log |
| 95 | + fi |
| 96 | + [ ! -f /tmp/bdata_patch.log ] && echo error_2 > /tmp/bdata_patch.log |
| 97 | + fi |
| 98 | + [ ! -f /tmp/bdata_patch.log ] && echo error_1 > /tmp/bdata_patch.log |
| 99 | +fi |
| 100 | +''' |
69 | 101 |
|
70 | 102 | ssh_uninstall = '''#!/bin/sh |
71 | 103 | DIR_PATCH=/etc/crontabs/patches |
|
87 | 119 | with open(FN_uninstall, 'w', newline = '\n') as file: |
88 | 120 | file.write(ssh_uninstall) |
89 | 121 |
|
| 122 | +# --------------------------------------------------------------------------- |
| 123 | + |
| 124 | +dev = read_info.DevInfo(gw, verbose = 0, infolevel = 1) |
| 125 | +dev.get_env_list() |
| 126 | +bdata = dev.env.bdata |
| 127 | +if bdata and bdata.var: |
| 128 | + telnet_en = bdata.var["telnet_en"] if 'telnet_en' in bdata.var else None |
| 129 | + ssh_en = bdata.var["ssh_en"] if 'ssh_en' in bdata.var else None |
| 130 | + uart_en = bdata.var["uart_en"] if 'uart_en' in bdata.var else None |
| 131 | + print(f'bdata: telnet_en = {telnet_en}, ssh_en = {ssh_en}, uart_en = {uart_en}') |
| 132 | + if telnet_en != '1' or ssh_en != '1' or uart_en != '1': |
| 133 | + print(f'CPU arch: {dev.info.cpu_arch}') |
| 134 | + print(f'Kernel: {dev.info.linux_stamp}') |
| 135 | + krn_ver = dev.info.linux_ver.split('.') |
| 136 | + kver = krn_ver[0] + '.' + krn_ver[1] |
| 137 | + arch = dev.info.cpu_arch |
| 138 | + if kver in [ '4.4', '5.4' ] and arch in [ 'armv7', 'arm64' ]: |
| 139 | + print(f'Insert patch for bdata partition!') |
| 140 | + preempt = '-preempt' if 'PREEMPT' in dev.info.linux_stamp else '' |
| 141 | + FN_kmod = FN_kmod.format(kver = kver, arch = arch, preempt = preempt) |
| 142 | + if not os.path.exists(FN_kmod): |
| 143 | + die(f'File "{FN_kmod}" not found!') |
| 144 | + ssh_install = ssh_install.replace('### bdata_patch ###', bdata_patch) |
| 145 | + with open(FN_install, 'w', newline = '\n') as file: |
| 146 | + file.write(ssh_install) |
| 147 | + FN_bdata_log = f'tmp/bdata_patch.log' |
| 148 | + fn_bdata_log = '/tmp/bdata_patch.log' |
| 149 | + |
| 150 | +# --------------------------------------------------------------------------- |
90 | 151 |
|
91 | 152 | action = 'install' |
92 | 153 | if len(sys.argv) > 1: |
93 | 154 | if sys.argv[1].startswith('u') or sys.argv[1].startswith('r'): |
94 | 155 | action = 'uninstall' |
95 | 156 |
|
96 | 157 | if action == 'install': |
| 158 | + if FN_bdata_log: |
| 159 | + gw.run_cmd(f"rm -f {fn_bdata_log}") |
| 160 | + gw.upload(FN_kmod, fn_kmod) |
97 | 161 | gw.upload(FN_patch, fn_patch) |
98 | 162 | gw.upload(FN_install, fn_install) |
99 | 163 |
|
|
110 | 174 | gw.run_cmd(f"rm -f {fn_patch} ; rm -f {fn_install} ; rm -f {fn_uninstall}") |
111 | 175 |
|
112 | 176 | print("Ready! The Permanent SSH patch installed.") |
| 177 | + |
| 178 | +if FN_bdata_log: |
| 179 | + gw.download(fn_bdata_log, FN_bdata_log, verbose = 0) |
| 180 | + if not os.path.exists(FN_bdata_log): |
| 181 | + print(f'WARN: Patch for bdata partition not executed!') |
| 182 | + else: |
| 183 | + with open(FN_bdata_log, 'r') as file: |
| 184 | + res = file.read() |
| 185 | + print(f'Patch for bdata result: {res}') |
0 commit comments