Установка Entware-3x на Android

ZigZag
Сообщения: 72
Зарегистрирован: 28 окт 2015, 03:43

Сообщение ZigZag » 03 янв 2018, 03:32

kaztost писал(а):Источник цитаты Забыл
4) убедиться, что unset LD_LIBRARY_PATH.
Делал unset LD_LIBRARY_PATH на пару с LD_PRELOAD. После делал перепроверку

Код: Выделить всё

echo $LD_LIBRARY_PATH
echo $LD_PRELOAD
там было пусто
И раздобыть strace под aarch64 для точной диагностики.
Как это ни странно, но таковой имеется, точнее он под armv7, но без проблем работает под aarch64. Что конкретно интересует ?
Попробуйте Микросистема для удобной начальной установки Entware в качестве ограниченной замены или инструмента для установки entware. Все бинарники там статические под armv7.
Что-то маловато бинарников

Код: Выделить всё

busybox
scp
sftp
ssh
ssh-keygen
dropbear
dropbearkey
mc
Да и смысл мне в них ? dropbear есть от ssh-дроида, mc и sftp мне не нужен, мне хватает cp и ls, busybox тоже вменяемый, даже два (один от мефика, другой от стериксона). Как я уже писал, c инструментарием для установки проблем НЕТ, проблемы возникают с загруженным софтом.

UPD: Кажется нашёл где проблема, вчера по запарке не заметил

Код: Выделить всё

Connecting to entware-3x.zyxmon.org (81.4.123.217:80)
libc-2.25.so           1% |*                                                                                                                                                      | 15840   0:01:16 ETA


libc-2.25.so весит 123 КБ

Хм, валидация по md5 ой как-бы не помешала ... пойду заменять либу и проверять ...

UPD2: Всё равно Segmentation fault, значит проблема всё же в чем-то другом. Хотя и это тоже вылезло бы в своё время :D

UPD3: Провалидировал все загруженные файлы - ld-2.25.so тоже оказался битым, хотя при его загрузке прогресс дошёл до 100%

Итак, заменил либы, едем дальше.

Код: Выделить всё

-bash-4.3# unset LD_LIBRARY_PATH
-bash-4.3# unset LD_PRELOAD
-bash-4.3# /opt/bin/opkg update
Downloading http://entware-3x.zyxmon.org/binaries/armv7/Packages.gz
Updated list of available packages in /opt/var/opkg-lists/packages
-bash-4.3# /opt/bin/opkg install entware-opt
Installing entware-opt (1.0-4) to root...
Downloading http://entware-3x.zyxmon.org/binaries/armv7/entware-opt_1.0-4_armv7-3x.ipk
Collected errors:
 * parse_from_stream_nomalloc: Missing new line character at end of file!
 * satisfy_dependencies_for: Cannot satisfy the following dependencies for entware-opt:
 *      zoneinfo-asia *         zoneinfo-europe *       terminfo *      locales *
 * opkg_install_cmd: Cannot install package entware-opt.
-bash-4.3# /opt/bin/opkg install opkg
Unknown package 'opkg'.
Collected errors:
 * parse_from_stream_nomalloc: Missing new line character at end of file!
 * opkg_install_cmd: Cannot install package opkg.

Бинарники завелись, но всё снова не слава богу :D

UPD4:

Код: Выделить всё

 ls -l /opt/var/opkg-lists/packages
-rw-rw-rw-    1 root     root        125280 Jan  3 01:01 /opt/var/opkg-lists/packages


Сливаю

Код: Выделить всё

http://entware-3x.zyxmon.org/binaries/armv7/Packages.gz
вручную на компе - размер - 291193. Могу в принципе сейчас вручную заменить и более чем уверен, что всё заведётся, но есть ли смысл если файлы по дороге бьются ? Как-то это нифига не нормально. Ладно бы файлы бил wget, но и opkg туда же

UPD5:

Код: Выделить всё

 /opt/bin/opkg update
Downloading http://entware-3x.zyxmon.org/binaries/armv7/Packages.gz
Updated list of available packages in /opt/var/opkg-lists/packages
Collected errors:
 * parse_from_stream_nomalloc: Missing new line character at end of file!
 -bash-4.3# ls -l /opt/var/opkg-lists/
-rw-rw-rw-    1 root     root        125280 Jan  3 01:37 packages 


Размер снова 125280, при этом судя по логам, то, что назагружал битого wget так же весит 125280 (ниже выдержки из логов)

Код: Выделить всё

ls -l /opt/lib/libc-2.25.so
-rw-rw-rw-    1 root     root        125280 Jan  2 06:40 

ls -l /opt/lib/ld-2.25.so
-rwxr-xr-x    1 root     root        125280 Jan  2 06:40

Интересно, что это за нахрен такой (простите мой английский) ??? Роутер тут точно ни с какого бока - уже проверил на 2-х (один стоит на расстоянии вытянутой руки), софт тоже - та же петрушка у wget и opkg. В чём затык ? В железе ? Так я без проблем на смарте смотрю потоковое видео и качаю многомегабайтные файлы браузером, а вот shell-софт давится по неясной причине и обгрызает файлы больше 125280 байт :crazy:

UPD6: Сейчас слил браузером на смарте Packages.gz - размер корректный - 291193
Keenetic Omni II [v2.08(AAUS.4)C2]; Zyxel Keenetic [V1.00(BFW.4.4)D0]

ZigZag
Сообщения: 72
Зарегистрирован: 28 окт 2015, 03:43

Сообщение ZigZag » 03 янв 2018, 05:20

Сейчас погонял wget из разных busybox'ов - встроенный и от стериксона недогружают файлы, от мефика грузит на ура целиком (всё-таки причина в софте). При этом с тем же busybox'ом от стериксона (тот же бинарник) на другом смарте проблем не было. В целом, wget можно заменить, но разве это поможет в случае бинарника opkg ? Он же вроде сам грузит данные. Или использует wget ?

Заменил, результат налицо (таки бинарник opkg использует wget)

Код: Выделить всё

/opt/bin/opkg update
Downloading http://entware-3x.zyxmon.org/binaries/armv7/Packages.gz
Updated list of available packages in /opt/var/opkg-lists/packages
Collected errors:
 * parse_from_stream_nomalloc: Missing new line character at end of file!
-bash-4.3# ls -l /opt/var/opkg-lists/packages
-rw-rw-rw-    1 root     root        291193 Jan  3 04:45 /opt/var/opkg-lists/packages
Но всё равно, с файлом что-то не то - opkg его никак не может распарсить. Хм мб всё с нуля накатить ? Хотя вроде все либы и бинарники на месте.

UPD: Грохнул /opt/var/opkg-lists/packages и дело пошло

Код: Выделить всё

-bash-4.3# rm /opt/var/opkg-lists/packages
-bash-4.3# /opt/bin/opkg update
Downloading http://entware-3x.zyxmon.org/binaries/armv7/Packages.gz
Updated list of available packages in /opt/var/opkg-lists/packages
-bash-4.3# /opt/bin/opkg install entware-opt
Installing entware-opt (1.0-4) to root...
Downloading http://entware-3x.zyxmon.org/binaries/armv7/entware-opt_1.0-4_armv7-3x.ipk
Installing libc (2.25-8) to root...
Downloading http://entware-3x.zyxmon.org/binaries/armv7/libc_2.25-8_armv7-3x.ipk
Installing libgcc (6.3.0-8) to root...
Downloading http://entware-3x.zyxmon.org/binaries/armv7/libgcc_6.3.0-8_armv7-3x.ipk
Installing libssp (6.3.0-8) to root...
Downloading http://entware-3x.zyxmon.org/binaries/armv7/libssp_6.3.0-8_armv7-3x.ipk
Installing librt (2.25-8) to root...
Downloading http://entware-3x.zyxmon.org/binaries/armv7/librt_2.25-8_armv7-3x.ipk
Installing libpthread (2.25-8) to root...
Downloading http://entware-3x.zyxmon.org/binaries/armv7/libpthread_2.25-8_armv7-3x.ipk
Installing libstdcpp (6.3.0-8) to root...
Downloading http://entware-3x.zyxmon.org/binaries/armv7/libstdcpp_6.3.0-8_armv7-3x.ipk
Installing busybox (1.27.2-2) to root...
Downloading http://entware-3x.zyxmon.org/binaries/armv7/busybox_1.27.2-2_armv7-3x.ipk
Installing zoneinfo-asia (2017c-1) to root...
Downloading http://entware-3x.zyxmon.org/binaries/armv7/zoneinfo-asia_2017c-1_armv7-3x.ipk
Installing zoneinfo-europe (2017c-1) to root...
Downloading http://entware-3x.zyxmon.org/binaries/armv7/zoneinfo-europe_2017c-1_armv7-3x.ipk
Installing findutils (4.6.0-1) to root...
Downloading http://entware-3x.zyxmon.org/binaries/armv7/findutils_4.6.0-1_armv7-3x.ipk
Installing terminfo (6.0-1c) to root...
Downloading http://entware-3x.zyxmon.org/binaries/armv7/terminfo_6.0-1c_armv7-3x.ipk
Installing locales (2.25-8) to root...
Downloading http://entware-3x.zyxmon.org/binaries/armv7/locales_2.25-8_armv7-3x.ipk
Configuring libgcc.
Configuring libc.
Configuring libssp.
Configuring libpthread.
Configuring librt.
Configuring terminfo.
Configuring locales.
Entware uses separate locale-archive file independent from main system
Creating locale archive - /opt/usr/lib/locale/locale-archive
Adding en_EN.UTF-8
Adding ru_RU.UTF-8
You can download locale sources from http://pkg.entware.net/sources/i18n_glib225.tar.gz
You can add new locales to Entware using /opt/bin/localedef.new
Configuring zoneinfo-europe.
Configuring busybox.
Warning: '/opt/bin/xargs' is already exists, skipping.
Warning: '/opt/bin/find' is already exists, skipping.
Configuring zoneinfo-asia.
Configuring libstdcpp.
Configuring findutils.
Configuring entware-opt.
-bash-4.3# /opt/bin/opkg install opkg
Installing opkg (2011-04-08-9c97d5ec-17a) to root...
Downloading http://entware-3x.zyxmon.org/binaries/armv7/opkg_2011-04-08-9c97d5ec-17a_armv7-3x.ipk
Configuring opkg.
-bash-4.3# cp -f /opt/etc/passwd.1 /opt/etc/passwd
-bash-4.3# cp -f /opt/etc/group.1 /opt/etc/group
-bash-4.3# cp -f /opt/etc/shells.1 /opt/etc/shells
-bash-4.3#

:ugeek: :ugeek: :ugeek:
Keenetic Omni II [v2.08(AAUS.4)C2]; Zyxel Keenetic [V1.00(BFW.4.4)D0]

Dr.Acid
Сообщения: 152
Зарегистрирован: 26 авг 2015, 22:46

Сообщение Dr.Acid » 03 янв 2018, 11:44

ZigZag, поздравляю, вы прошлись по очень старым граблям, называемым wget !
Сам уже не раз убеждался, что "правильный" wget - залог успеха в инсталляции любой системы. Причём, как я понимаю, проблема кроется не только в самом wget, но и в либах, которые он пользует(или слинкован с ними, если static).

Аватара пользователя
Zyxmon
Администратор
Сообщения: 1387
Зарегистрирован: 09 авг 2015, 14:33

Сообщение Zyxmon » 03 янв 2018, 14:30

ZigZag писал(а):Источник цитаты В целом, wget можно заменить, но разве это поможет в случае бинарника opkg ? Он же вроде сам грузит данные. Или использует wget ?

opkg использует wget. О Том, что в одной из версий busybox wget кривой я писал, даже Стериксону дал патч.... Но не помогло.
ZigZag писал(а):Источник цитаты Хотя вроде все либы и бинарники на месте.

Только длина у них меньше, обрезаны они.

ZigZag
Сообщения: 72
Зарегистрирован: 28 окт 2015, 03:43

Сообщение ZigZag » 03 янв 2018, 15:36

Dr.Acid, ну на прошлом смарте я использовал полноценный статичный wget, которым заменил busybox'овый и поэтому проблема обошла меня стороной. Хотя я что-то такое на 4pda припоминаю. На новом смарте из-за новой "линии защиты от пользователей" не "pie" бинарники отвалились и пришлось пользоваться тем что есть - вот и наступил на грабли :|
Zyxmon писал(а):opkg использует wget.
Да это я уже понял - там же отписался
Заменил, результат налицо (таки бинарник opkg использует wget)

Zyxmon писал(а):Только длина у них меньше, обрезаны они.
Не, с ними там уже всё нормально было (битые я заменил вручную). Кривой был /opt/var/opkg-lists/packages - после его удаления всё пошло как по маслу :)
Keenetic Omni II [v2.08(AAUS.4)C2]; Zyxel Keenetic [V1.00(BFW.4.4)D0]

kaztost
Сообщения: 67
Зарегистрирован: 16 июл 2017, 23:29

Сообщение kaztost » 03 янв 2018, 18:26

Dr.Acid писал(а):Источник цитаты вы прошлись по очень старым граблям, называемым wget !

Мда, скольких это затронуло... Меня тоже, в свое время, но удачно, что когда я тупо хотел скачать что-то, а не в процессе установки. А для установки entware, мне кажется, надежней всего установка из локального репозитария. Если в opkg стоит адрес file://, то opkg не использует wget, тупо копирует (не знаю точно, используя cp или копирует сам, но не важно). Вообще, никакой предустановленный busybox не нужен в этом случае. Андроидные установщики, которые я в свое время делал, основаны на этих принципах. Но я туда, много чего лишней кастомизации пихнул, как теперь мне кажется.

Visitor7
Сообщения: 2
Зарегистрирован: 15 янв 2018, 00:09

Сообщение Visitor7 » 15 янв 2018, 01:04

kaztost, Приветствую. Нашел вас по ссылке с 4pda, хочу куда-нить скрипт свой для андроида пристроить, тут вроде место и люди малость подходящие. В лс меня пока не пускает, распишу тут, а вы уж скажите, нужно не нужно и куда. Не нужно, стирайте.
 
Началось все с того, что я поставил entware на андроид и радовался. Но недавно мне понадобился strace aarch64, ентваровский 32-х битный мне netd убивал. Скачал из репозитария дебиана. Потом не нашел нужной утилиты sslscan. Тоже скачал из дебиана. В итоге автоматизировал это дело, получилось подобие пакетного менеджера. Пользуюсь в довесок к ентвари.

Код: Выделить всё

/ # debi
Updating package list...
Connecting to ftp.debian.org (130.89.148.12:80)
.packages.gz.main.pt 100% |****|  9977k  0:00:00 ETA
Connecting to ftp.debian.org (130.89.148.12:80)
.packages.gz.contrib 100% |****| 58520   0:00:00 ETA
Connecting to ftp.debian.org (130.89.148.12:80)
.packages.gz.non-fre 100% |****| 75937   0:00:00 ETA
Updating list done.

Preinstallation...
Downloading libc6...
Connecting to ftp.debian.org (130.89.148.12:80)
libc6_2.26-3_armhf.d 100% |****|  2340k  0:00:00 ETA
Installing libc6 8455KB (libgcc1) GNU C Library: Shared libraries
Downloading libgcc1...
Connecting to ftp.debian.org (130.89.148.12:80)
libgcc1_7.2.0-19_arm 100% |****| 37388   0:00:00 ETA
Installing libgcc1 153KB (gcc-7-base libc6) GCC support library
Downloading gcc-7-base...
Connecting to ftp.debian.org (130.89.148.12:80)
gcc-7-base_7.2.0-19_ 100% |****|   179k  0:00:00 ETA
Installing gcc-7-base 242KB () GCC, the GNU Compiler Collection (base package)
Downloading patchelf...
Connecting to ftp.debian.org (130.89.148.12:80)
patchelf_0.9-1+b1_ar 100% |****| 50474   0:00:00 ETA
Installing patchelf 111KB (libc6 libgcc1 libstdc++6) modify properties of ELF executables
Downloading libstdc++6...
Connecting to ftp.debian.org (130.89.148.12:80)
libstdc++6_7.2.0-19_ 100% |****|   330k  0:00:00 ETA
Installing libstdc++6 1476KB (gcc-7-base libc6 libgcc1) GNU Standard C++ Library v3
Preinstallation done.

debi: argument needed
Debian package manager for android. Only for simple packages that don`t need to be configured. Needs "deb", "undeb" and "debcfg" scripts in PATH written directory. In first run libc library will be preinstalled.
  PKG  - package name
  REGEX  - simple sed regex
  w  - without depends
  n  - names only
  o  - update package list only
  a  - again (redownload or reinstall)
Install package:
  debi [-w] [-a] PKG|REGEX [PKG|REGEX...]
Remove package:
  debi -r [-w] PKG [PKG...]
    without arguments - remove only all unused
    auto-installed dependencies
Search package:
  debi -s [-n] PKG|REGEX [PKG|REGEX...]
View package info:
  debi -i PKG|REGEX [PKG|REGEX...]
View installed package files:
  debi -f PKG [PKG...]
List installed packages:
  debi -l [-n]
Update packages:
  debi -u [-o]
Reinstall all:
  debi -z
Disk usage:
  debi -d
Clean cache:
  debi -c
Change execution method:
  debi -e script|symlink|patch [DirForSymlinks]
    without arguments - view current
Get package (download only):
  debi -g [-a] PKG [PKG...]
Extract package (send to undeb):
  debi -x PKG [undeb_args]
      d  - extract to dir, by default debian root
      c  - control files instead of data files
      v  - verbose
      o  - to stdout
    Extract files:
      debi -x PKG [-c] [-v] [-d DIR|-o]
    Extract specified files:
      debi -x PKG -e [-c] [-v] [-d DIR|-o] FILE [FILE...]
    List files:
      debi -x PKG -t [-c] [-v]
    Show control:
      debi -x PKG -s
         sort form of -x PKG -eco ./control
5|/ #
5|/ # debi -l
libc6 2.26-3 8455KB p (libgcc1)
libgcc1 1:7.2.0-19 153KB a (gcc-7-base libc6)
gcc-7-base 7.2.0-19 242KB a ()
patchelf 0.9-1+b1 111KB p (libc6 libgcc1 libstdc++6)
libstdc++6 7.2.0-19 1476KB a (gcc-7-base libc6 libgcc1)
/ # debi -d
54528   /deb/
5904    /deb/_dist/.cache/
152     /deb/_dist/.controls/
19704   /deb/_dist/.packages.gz
24      /deb/etc/
9256    /deb/lib/
19456   /deb/usr/
/ # debi -s ssl.*
>> ssl-cert 1.0.39 63KB (debconf openssl adduser)
simple debconf wrapper for OpenSSL
>> ssl-cert-check 3.30-1 41KB (openssl)
proactively handling X.509 certificate expiration
>> ssldump 0.9b3-7 72KB (libc6 libpcap0.8 libssl1.1)
SSLv3/TLS network protocol analyzer
>> sslh 1.18-1 131KB (libc6 libcap2 libconfig9 libwrap0 debconf init-system-helpers adduser lsb-base update-inetd)
Applicative protocol multiplexer
>> sslscan 1.11.5-rbsec-1.1 67KB (libc6 libssl1.0.2)
Fast SSL scanner
>> sslsniff 0.8-6 245KB (libboost-filesystem1.62.0 libboost-system1.62.0 libboost-thread1.62.0 libc6 libgcc1 liblog4cpp5v5 libssl1.0.2 libstdc++6)
SSL/TLS man-in-the-middle attack tool
>> sslsplit 0.5.0+dfsg-2+b1 171KB (libc6 libevent-2.1-6 libevent-openssl-2.1-6 libevent-pthreads-2.1-6 libssl1.1)
transparent and scalable SSL/TLS interception
>> sslstrip 0.9-1 140KB (python-twisted-web python)
SSL/TLS man-in-the-middle attack tool
/ # debi sslscan
Downloading sslscan...
Connecting to ftp.debian.org (130.89.148.12:80)
sslscan_1.11.5-rbsec 100% |****| 28374   0:00:00 ETA
Installing sslscan 67KB (libc6 libssl1.0.2) Fast SSL scanner
Downloading libssl1.0.2...
Connecting to ftp.debian.org (130.89.148.12:80)
libssl1.0.2_1.0.2n-1 100% |****|   893k  0:00:00 ETA
Installing libssl1.0.2 1998KB (libc6 debconf) Secure Sockets Layer toolkit - shared libraries
/ # debi -f sslscan
./
./usr/
./usr/bin/
./usr/bin/sslscan
./usr/share/
./usr/share/doc/
./usr/share/doc/sslscan/
./usr/share/doc/sslscan/changelog.Debian.gz
./usr/share/doc/sslscan/changelog.gz
./usr/share/doc/sslscan/copyright
./usr/share/man/
./usr/share/man/man1/
./usr/share/man/man1/sslscan.1.gz
/ # where sslscan
/deb/usr/bin/sslscan  -->  /data/local/debian/usr/bin/sslscan
/ # sslscan mozilla.org
Version: 1.11.5
OpenSSL 1.0.2n  7 Dec 2017

OpenSSL version does not support SSLv2
SSLv2 ciphers will not be detected

OpenSSL version does not support SSLv3
SSLv3 ciphers will not be detected
Testing SSL server mozilla.org on port 443

  TLS renegotiation:
Secure session renegotiation supported

  TLS Compression:
OpenSSL version does not support compression
Rebuild with zlib1g-dev package for zlib support

  Heartbleed:
TLS 1.2 not vulnerable to heartbleed
TLS 1.1 not vulnerable to heartbleed
TLS 1.0 not vulnerable to heartbleed

  Supported Server Cipher(s):
Preferred TLSv1.2  128 bits  AES128-GCM-SHA256       
Accepted  TLSv1.2  128 bits  AES128-SHA256           
Accepted  TLSv1.2  128 bits  ECDHE-RSA-AES128-GCM-SHA256   Curve P-256 DHE 256
Accepted  TLSv1.2  128 bits  DHE-RSA-AES128-GCM-SHA256     DHE 2048 bits
Accepted  TLSv1.2  128 bits  ECDHE-RSA-AES128-SHA256       Curve P-256 DHE 256
Accepted  TLSv1.2  128 bits  DHE-RSA-AES128-SHA256         DHE 2048 bits
Accepted  TLSv1.2  128 bits  AES128-SHA              
Accepted  TLSv1.2  128 bits  ECDHE-RSA-AES128-SHA          Curve P-256 DHE 256
Accepted  TLSv1.2  128 bits  DHE-RSA-AES128-SHA            DHE 2048 bits
Accepted  TLSv1.2  256 bits  AES256-GCM-SHA384       
Accepted  TLSv1.2  256 bits  AES256-SHA256           
Accepted  TLSv1.2  256 bits  ECDHE-RSA-AES256-GCM-SHA384   Curve P-256 DHE 256
Accepted  TLSv1.2  256 bits  DHE-RSA-AES256-GCM-SHA384     DHE 2048 bits
Accepted  TLSv1.2  256 bits  ECDHE-RSA-AES256-SHA384       Curve P-256 DHE 256
Accepted  TLSv1.2  256 bits  DHE-RSA-AES256-SHA256         DHE 2048 bits
Accepted  TLSv1.2  256 bits  AES256-SHA              
Accepted  TLSv1.2  256 bits  ECDHE-RSA-AES256-SHA          Curve P-256 DHE 256
Accepted  TLSv1.2  256 bits  DHE-RSA-AES256-SHA            DHE 2048 bits
Preferred TLSv1.1  128 bits  AES128-SHA              
Accepted  TLSv1.1  128 bits  ECDHE-RSA-AES128-SHA          Curve P-256 DHE 256
Accepted  TLSv1.1  128 bits  DHE-RSA-AES128-SHA            DHE 2048 bits
Accepted  TLSv1.1  256 bits  AES256-SHA              
Accepted  TLSv1.1  256 bits  ECDHE-RSA-AES256-SHA          Curve P-256 DHE 256
Accepted  TLSv1.1  256 bits  DHE-RSA-AES256-SHA            DHE 2048 bits
Preferred TLSv1.0  128 bits  AES128-SHA              
Accepted  TLSv1.0  128 bits  ECDHE-RSA-AES128-SHA          Curve P-256 DHE 256
Accepted  TLSv1.0  128 bits  DHE-RSA-AES128-SHA            DHE 2048 bits
Accepted  TLSv1.0  256 bits  AES256-SHA              
Accepted  TLSv1.0  256 bits  ECDHE-RSA-AES256-SHA          Curve P-256 DHE 256
Accepted  TLSv1.0  256 bits  DHE-RSA-AES256-SHA            DHE 2048 bits

  SSL Certificate:
Signature Algorithm: sha256WithRSAEncryption
RSA Key Strength:    2048

Subject:  mozilla.org
Altnames: DNS:mozilla.org, DNS:www.mozilla.org
Issuer:   DigiCert SHA2 Extended Validation Server CA
Not valid before: Nov  9 00:00:00 2016 GMT
Not valid after:  Nov 14 12:00:00 2018 GMT
/ # 
Скрипт состоит из 4-х файлов, которые нужно расположить под соответствующими именами в любой папке ,записанной в PATH, и задать атрибуты исполнения.
undeb - распаковщик
debcfg - конфиг для deb и debi
deb - запуск непатченных бинарников
debi - менеджер пакетов
Для работы скриптов нужны busybox и архиватор ar (есть в mifik busybox и в entware). В debcfg нужно, как минимум, вписать подходящую архитектуру. В init.d/su.d для постоянной работы нужно добавить создание симлинка на папку установки, изначально /data/local/debian -> /deb. Если пользоваться простым запуском патченных бинарников(exec method patch), то папки debian с бинарниками нужно занести в PATH в /system/etc/mkshrc или /*.rc.

debcfg:

Код: Выделить всё

#!/system/bin/sh

## Configuration file for debi/deb scripts.
# v3.2

# Working root debian directory
root=/deb

# Real root debian directory
realroot=/data/local/debian

# Debian server. See https://www.debian.org/mirror/list
server=http://ftp.debian.org

# Debian distribution. See https://www.debian.org/releases/
dist=unstable

# Architecture, ex. arm64, mips, armel, armhf etc.
# See https://wiki.debian.org/SupportedArchitectures
# Find one of binary-{arch} in http://ftp.debian.org/debian/dists/unstable/main/
arch=armhf

# Subfolder for working data and downloads
distfold="_dist"

# Lib C package for preinstallation
glibc="libc[0-9.]*"

# Other packages for preinstallation
prepkgs="patchelf"

# Method to exec binaries: script, symlink, patch
# script: only using a script, run as "deb COM ARGS"
# symlink: put named symlink on deb to $dirforsym
# patch: patch with patchelf for normal execution, you need to add $path to PATH.
exectype=symlink

# The folder where symlinks are created, if the symlink method is selected
dirforsym=/system/xbin

# Caching parameter: never, normal, always
# never: remove deb archives after installation
# normal: remove deb archives after package removing
# always: don`t remove, always leave deb archives
caching=normal

if [ -f "$root/$distfold/.debarch" ];then

   # Load "ld" (ld.so name), "libarch" (arch specified lib subfolder name) and "lib" (arch specified lib folder name) variables. Generated by debi automaticly based on libc package data.
   . "$root/$distfold/.debarch"

# Reload "exectype" and "dirforsym" variables. Generated by debi automaticly based on user choice.
   [ -f "$root/$distfold/.debexec" ]&&
      . "$root/$distfold/.debexec"

   # Library directory list
   ldpath="$root/$lib/$libarch:$root/usr/$lib/$libarch"

fi

# Binary directory list
path="$root/bin:$root/bin/bb:$root/usr/bin:$root/sbin:$root/usr/sbin"

# Exclude this packages from autoinstall as a depends
pkgpull="debconf debconf-2.0"

# Variable list
debvars="root realroot server dist arch distfold exectype dirforsym ld libarch lib ldpath path pkgpull debvars glibc prepkgs caching"
deb:

Код: Выделить всё

#!/system/bin/sh

## Debian binary launcher.
# v3.2

. debcfg||exit 1

ld="$root/$lib/$libarch/$ld"
args="--inhibit-cache --library-path $ldpath"
name="${0##*/}"

getpath() {
   local PATH="$path"
   com="$(type "$1")"||exit 1
   com="/${com#*/}"
}

if [ "$name" != deb ];then
   getpath "$name"
   set "$ld" $args "$com" "$@"
elif [[ "$1" = [!-/]* ]];then
   getpath "$1"
   shift
   set "$ld" $args "$com" "$@"
elif [[ "$1" = --* && "$2" = [!-/]* ]];then
   key="$1"
   getpath "$2"
   shift 2
   set "$ld" $args "$key" "$com" "$@"
else
   set "$ld" $args "$@"
fi

#PATH=".:$path:$PATH"
#LD_LIBRARY_PATH=".:$LD_LIBRARY_PATH:$ldpath "
#export PATH LD_LIBRARY_PATH

unset $debvars args name com key
unset -f getpath

exec "$@"
undeb:

Код: Выделить всё

#!/system/bin/sh

## Распаковка deb-пакетов.
# v3.2

u=${0##*/};[ ! "$u" -o "$u" = sh -o "$u" != "${u%[!.]sh}" ]&&u=undeb;
unset v o dir list show ext cont err strs

mhelp() {
echo -e "Deb package extractor.
usage: $u [-c] [-v] [-o|-d OUTDIR] PACKAGE [PACKAGE...]
       $u -e [-c] [-v] [-o|-d OUTDIR] PACKAGE FILE [FILE...]
       $u -t [-c] [-v] PACKAGE [PACKAGE...]
       $u -s PACKAGE [PACKAGE...]
o  - extract to stdout
d  - extract to dir, by default \$PWD
e  - extract only specified files
c  - control files instead of data files
v  - verbose
t  - list files
s  - show control 
        short form of -eco PKG ./control
h  - this help";}

[[ "$1" = \-h || "$1" = \-\-help ]]&&{ mhelp;exit; }

err() {
err="$1";local e
case $1 in
1)e="commands needed:\n$2";;
2)e="argument needed for option -- $2";; 
3)e="invalid option -- $2";;
4)e="package not specified";;
5)e="$2: not found";;
6)e="$2: unknown archive";;
esac;
echo "$u: $e" >&2;[ "$4" ]&&mhelp;[ "$3" ]||exit $1;}

et=$(type ar tar|grep ' not found')&&err 1 "$et"

while getopts ":cevtsod:" opt;do
   case "$opt" in
      v)v="-v";;
      o)o="-O";;
      c)cont=1;;
      s)show=1;;
      t)list=1;;
      e)ext=1;;
      d)dir="-C \"$OPTARG\"";;
      :)err 2 "$OPTARG";;
      ?)err 3 "$OPTARG";;
   esac;
done;
shift $(($OPTIND-1))
[ "$1" ]||err 4 '' '' help

args="-x $v $o $dir"
[ "$cont" ]&&
   pac="control.tar"||
      pac="data.tar"

if [ "$list" ];then
   args="-t $v"
elif [ "$ext" ];then
   file="$1";shift
   for str in "$@";do
      strs="$strs \"$str\""
   done
   set "$file"
elif [ "$show" ];then
   args="-xO ./control"
   pac="control.tar"
fi

for file in "$@";do
   [ -f "$file" ]||{ err 5 "$file" noexit;continue; }
   pac="$(ar -t "$file"|grep "$pac")"
   case "${pac##*.}" in
      xz)pk='-J';;
      gz)pk='-z';;
      *)err 6 "$file" noexit;continue;;
   esac
   eval "ar -p \"$file\" \"$pac\"|tar $pk $args $strs"
done

exit $err
debi:

Код: Выделить всё

#!/system/bin/sh

## Установщик пакетов из репозитария debian на андроид. Только для простых и не требующих конфигурирования утилит. Для работы нужны скрипты deb, undeb и debcfg в папке прописанной в path.
# v3.1

u=${0##*/};[ ! "$u" -o "$u" = sh -o "$u" != "${u%[!.]sh}" ]&&u=debi;

cl=$'\e[1;34m';
cr=$'\e[0m';
nl=/dev/null

mhelp() {
echo -e "Debian package manager for android. Only for simple packages that don\`t need to be configured. Needs \"deb\", \"undeb\" and \"debcfg\" scripts in PATH written directory. During the first run libc library will be preinstalled.
  PKG  - package name
  REGEX  - simple sed regex
  w  - without depends
  n  - names only
  o  - update package list only
  a  - again (redownload or reinstall)
Install package:
  $u [-w] [-a] PKG|REGEX [PKG|REGEX...]
Remove package:
  $u -r [-w] PKG [PKG...]
    without arguments - remove only all unused
    auto-installed dependencies
Search package:
  $u -s [-n] PKG|REGEX [PKG|REGEX...]
View package info:
  $u -i PKG|REGEX [PKG|REGEX...]
View installed package files:
  $u -f PKG [PKG...]
List installed packages:
  $u -l [-n]
Update packages:
  $u -u [-o]
Reinstall all:
  $u -z
Disk usage:
  $u -d
Clean cache:
  $u -c
Change execution method:
  $u -e script|symlink|patch [DirForSymlinks]
    without arguments - view current
Get package (download only):
  $u -g [-a] PKG [PKG...]
Extract package (send to undeb):
  $u -x PKG [undeb_args]
      d  - extract to dir, by default debian root
      c  - control files instead of data files
      v  - verbose
      o  - to stdout
    Extract files:
      $u -x PKG [-c] [-v] [-d DIR|-o]
    Extract specified files:
      $u -x PKG -e [-c] [-v] [-d DIR|-o] FILE [FILE...]
    List files:
      $u -x PKG -t [-c] [-v]
    Show control:
      $u -x PKG -s
         short form of -x PKG -eco ./control";}

[[ "$1" = \-h || "$1" = \-\-help ]]&&{ mhelp;exit; }

err() {
err="$1";local e
case $1 in
2)e="commands needed:\n$2";;
3)e="argument needed for option -- $2";; 
4)e="invalid option -- $2";;
5)e="argument needed";;
6)e="$2: package not exist";;
7)e="$2: package file not exist";;
8)e="$2: package file already exist";;
9)e="Connection error";;
10)e="$2: package not installed";;
11)e="Extraction error";;
12)e="$2: binary not symlinked";;
13)e="$2: binary not patched";;
14)e="$2: package already installed";;
15)e="$(echo $2): too many packages";;

esac;
echo "$u: $e" >&2;[ "$4" ]&&mhelp;[ "$3" ]||exit $1;}

. debcfg||exit 1
packagefile="$root/$distfold/.packages.gz"
et=$(type ar tar find zcat gzip gunzip wget du sed deb undeb|grep ' not found')&&err 2 "$et"

com=install
unset nodepends namesonly updateonly again
while getopts ":rifsluzegxdcwnoa" opt;do
   case "$opt" in
      r)com=remove;;
      z)com=reinstall;;
      x)com=extract;;
      g)com=get;;
      e)com=exec;;
      u)com=update;;
      l)com=list;;
      i)com=info;;
      f)com=files;;
      s)com=search;;
      d)com=size;;
      c)com=clear;;
      w)nodepends=1;;
      n)namesonly=1;;
      o)updateonly=1;;
      a)again=1;;
      :)err 3 "$OPTARG";;
      ?)err 4 "$OPTARG";;
   esac
done
shift $(($OPTIND-1))

preinit() {
   [ -d "$realroot" ]||mkdir "$realroot"
   [ -w "$realroot" ]||exit 1
   if [ ! -e "$root" ];then
      mnt="$(grep '^rootfs .* rw,' /proc/mounts)";
      [ "$mnt" ]||mount -o remount,rw /
      ln -s "$realroot" "$root"
      [ "$mnt" ]||mount -o remount,ro /
   fi
   [ -e "$root" ]||exit 1
   [ -d "$root/$distfold" ]||mkdir "$root/$distfold"
   [ -d "$root/$distfold/.controls" ]||
      mkdir "$root/$distfold/.controls"
   [ -d "$root/$distfold/.cache" ]||
      mkdir "$root/$distfold/.cache"
   [ -f "$packagefile" ]||updatelist
   [ -f "$packagefile" -a ! -f "$root/$distfold/.debarch" ]&&preinstall
}

updatelist() {
   local pkg
   echo "Updating package list..."
   [ -f "$packagefile.n" ]&&rm "$packagefile.n"
   for pkg in main contrib non-free;do
      [ -f "$packagefile.$pkg.ptm" ]&&
         rm "$packagefile.$pkg.ptm"
      wget -O "$packagefile.$pkg.ptm" "$server/debian/dists/$dist/$pkg/binary-$arch/Packages.gz"||err 9
   done
   zcat $root/$distfold/.*.gz.*.ptm|gzip -f >"$packagefile.n"||exit 1
   rm $root/$distfold/.*.gz.*.ptm
   [ -f "$packagefile" ]&&rm "$packagefile"
   mv "$packagefile.n" "$packagefile"
   echo "Updating list done.\n"
}

preinstall() {
   local pkg 
   echo "Preinstallation..."
   for pkg in "$glibc" $prepkgs;do
      installpkg pre "$pkg"||exit 1
   done
   getinfo ext "$glibc"
   libarch=$(sed -nr "s/^\.\/lib[0-9]*\/([^\/]*-linux-[^\/]*)\/$/\1/p" "$pkgdir/files")
   lib=$(sed -nr "s/^\.\/(lib[0-9]*)\/[^\/]*-linux-[^\/]*\/$/\1/p" "$pkgdir/files")
   ld=$(sed -nr "s/\.\/lib[0-9]*\/(ld-[^/ ]*\.so[^/ ]*)$/\1/p" "$pkgdir/files")
   echo "libarch=$libarch\nld=$ld\nlib=$lib" >"$root/$distfold/.debarch"
   echo "exectype=$exectype\ndirforsym=$dirforsym" >"$root/$distfold/.debexec"
   . debcfg
   for pkg in $prepkgs;do
      postinstall "$(getdir "$pkg")"
   done
   echo "Preinstallation done.\n"
}

getdir() {
   local pkgdir is
   for pkgdir in $(find "$root/$distfold/.controls" -mindepth 1 -type d -name "*");do
      grep -qE "^Package:[ \t]+$(subst "$1")[ \t]*$" "$pkgdir/control"&&{ is=1;break; }
   done
   [ "$is" ]&&
      echo "$pkgdir"||
         { err 10 "$1" noexit;return 10; }
}

getpkgdeps() {
   echo "$pkginfo"|sed -nr "/^Depends:/{s/\([^(]+\)//g;s/(^|,)([^,|]+)\|[^,]+(,|$)/ \2 /g;s/[ \t,]+/ /g;s/ $//;s/^Depends: (.+)$/\1/p}"
}

getinfo() {
   if [ "$1" = int ];then
      unset pkguri
      pkgdir="$(getdir "$2")"||return
      pkginfo="$(cat "$pkgdir/control")"
      pkgfile="$root/$distfold/.cache/${pkgdir##*/}"
   elif [ "$1" = ext ];then
      pkginfo=$(gunzip -c "$packagefile"|sed -n "/^Package:[ \t]\+$2[ \t]*$/{:l;p;n;s/^[ \t]*$//p;Tl;}")
      pkguri=$(echo "$pkginfo"|sed -nr "s/^Filename:[ \t]+(.+)[ \t]*$/\1/p")
      pkgfile="$root/$distfold/.cache/${pkguri##*/}"
      pkgdir="$root/$distfold/.controls/${pkgfile##*/}"
   fi
   [ "$pkginfo" ]||{ err 6 "$2" noexit;return 6; }
   [ "$3" = nodetails ]&&return
   pkgname=$(echo "$pkginfo"|sed -nr "s/^Package:[ \t]+(.+)[ \t]*$/\1/p")
   echo "$pkgname"|grep -c ".*"|grep -vq "^1$"&&
      { err 15 "$pkgname" noexit;return 15; }
   pkgver=$(echo "$pkginfo"|sed -nr "s/^Version:[ \t]+(.+)[ \t]*$/\1/p")
   pkgsize=$(echo "$pkginfo"|sed -nr "s/^Installed-Size:[ \t]+(.+)[ \t]*$/\1/p")
   pkgstate=$(echo "$pkginfo"|sed -nr "s/^State:[ \t]+([^- ]+)-installed[ \t]*$/\1/p")
   pkgdesc=$(echo "$pkginfo"|sed -nr "/^Description:/{s/^Description:[ \t]+(.+)[ \t]*$/\1/;:l;p;n;s/^[^ :]+: //;Tl;} }")
   pkgdep="$(getpkgdeps)"
}

subst() {
   echo "$1"|sed "s/+/\\\+/g;s/\[/\\\[/g;s/\]/\\\]/g;s/\*/\\\*/g;"
}

isinstalled() {
   echo "$installed"|grep -qE "(^| )$(subst "$1")(:| |$)"
}

isemptyfold () {
   if [ -d "$1" ];then
      ls -a "$1"|grep -vEq "^[ \t.]*$"||
         return 0
   fi
   return 1
}

checkserver() {
   wget -qO- "$server/debian/" >$nl||
      err 9
}

getpkg() {
   getinfo ext "$1"||return
   { [ "$again" -a "$com" = get ]&&
      [ -f "$pkgfile" ]&&checkserver; }&&
         rm "$pkgfile"
   if [ ! -f "$pkgfile" ];then
     echo "Downloading $pkgname..."
     wget -P "$root/$distfold/.cache" "$server/debian/$pkguri"||
        err 9
   else return 8
   fi
}

installpkg() {
   local deps dep err
   if [ ! "$again" ];then
      getinstalled
      isinstalled "$2"&&return 14
   else removepkg "$2"
   fi
   getpkg "$2"
   err="$?"
   [ "$err" = 0 -o "$err" = 8 ]||return "$err"
   pkgpull="$pkgpull $pkgname"
   if [ ! -f "$pkgdir/files" -o "$again" ];then
      echo "Installing $cl$pkgname$cr ${pkgsize}KB ($pkgdep) $pkgdesc"
      undeb -d "$root" "$pkgfile"||err 11 "$pkgfile"
      [ -d "$pkgdir" ]||mkdir "$pkgdir"
      undeb -s "$pkgfile" >"$pkgdir/control"
      [ "$(cat "$pkgdir/control")" ]||
         echo "$pkginfo"  >"$pkgdir/control"
      echo "State: $1-installed" >>"$pkgdir/control"
      undeb -t "$pkgfile" >"$pkgdir/files"
      postinstall "$pkgdir"
      [ "$caching" = never ]&&
         rm "$pkgfile"
   fi
   [ "$nodepends" ]&&return 0
   again=
   for dep in $pkgdep;do
      echo "$pkgpull"|grep -Eq "(^| )$(subst "$dep")( |$)"||
         deps="$deps $dep"
   done
   for dep in $deps;do
      installpkg auto "$dep"
   done
   return 0
}

removepkg() {
   local file pkgdir
   pkgdir="$(getdir "$1")"||return
   echo Removing $1
   preremove "$pkgdir"
   for file in $(grep "[^/]$" "$pkgdir/files");do
      [ -h "$root/${file:2}" -o -e "$root/${file:2}" ]&&
         { rm -f "$root/${file:2}"||exit 1; }
   done
   for file in $(grep "/$" "$pkgdir/files"|sort -r);do
      isemptyfold "$root/${file:2}"&&
         rmdir "$root/${file:2}"
   done
   [ -f "$root/$distfold/.cache/${pkgdir##*/}" -a ! "$again" -a "$caching" != always -a ! "$2" ]&&
      rm "$root/$distfold/.cache/${pkgdir##*/}"
   [ -d "$pkgdir" ]&&rm -rf "$pkgdir"
}

searchpkg() {
   if [ "$namesonly" ];then
      gunzip -c "$packagefile"|
         sed -n "/^Package:[ \t]\+$1[ \t]*$/{
            s/^Package: \(.*\)$/\1/p}"|
               grep ".*"||
                  { err 6 "$1" noexit;return 6; }
      return
   fi
   gunzip -c "$packagefile"|sed -n "
   /^Package:[ \t]\+$1[ \t]*$/{
      s/^Package: \(.*\)$/>> $cl\1$cr/
      h
      :l
      n
      /^Version:/{
         s/^Version: \(.*\)$/\1/
         H
         bl;}
      /^Installed-Size:/{
         s/^Installed-Size: \(.*\)$/\1KB/
         H
         bl;}
      /^Depends:/{
         s/([^(]\+)//g
         s/^Depends: \(.*\)$/\1/
         s/\(^ *\|,\)\([^,|]\+\)|[^,]\+\(,\| *$\)/\1\2\3/g
         s/[ \t,]\+/ /g
         s/ $//
         s/^ //
         s/^\(.*\)$/(\1)/
         H
         bl;}
      /^Description:/{
         s/^Description: \(.*\)$/\1/
         x
         s/\n/ /g;
         p
         x
         p
         b;}
      /^SHA256:/b;
      /^[ \t]*$/b;
      bl;
   }"|grep ".*"||
         { err 6 "$1" noexit;return 6; }
}

preremove() {
   local file IFS deb
   IFS=$'\n'
   if [ "$exectype" = symlink ];then
      deb="$(getdeb)"||return 1
      for file in $(getbinfiles "$1");do
         file="$dirforsym/${file##*/}"
         isfilesym "$file" "$deb"&&rm "$file"
      done
   fi
}

isfilesym() {
   ls -la "$1"|grep -qE "^l.*->[ \t]+($(subst "${2##*/}")|$(subst "$2"))[ \t]*$"
}

postinstall() {
   [ "$ld" ]||return
   local file IFS deb
   IFS=$'\n'
   if [ "$exectype" = patch ];then
      for file in $(getbinfiles "$1");do
         patchbin "$file"
      done
   elif [ "$exectype" = symlink ];then
      deb="$(getdeb)"||return 1
      for file in $(getbinfiles "$1");do
         ln -s "$deb" "$dirforsym/${file##*/}"||
            err 12 "$file" noexit
      done
   fi
}

getbinfiles() {
   local file files IFS
   IFS=$'\n'
   for file in $(cat "$1/files");do
      [ "$file" = "${file%/}" ]||continue
      file="$root/${file#./}"
      echo "$path"|
         grep -Eq "(^|:)$(subst "${file%/*}")(:|$)"&&
            [ -f "$file" ]&&
               files="$files$IFS$file"
   done
   echo "${files:1}"
}

patchbin() {
   local int out bin
   bin="$1"
   int="$root/$lib/$ld"
   deb --verify "$1"||return
   out="$(deb patchelf --print-interpreter --print-rpath "$1")"||return 1
   [ "$out" = "$int"$'\n'"$ldpath" ]&&return
   if [ "${1##*/}" = patchelf ];then
      bin="$1.m.tmp"
      cp "$1" "$bin"
   fi
   deb patchelf --set-interpreter "$int" --force-rpath --set-rpath "$ldpath" "$bin" 2>$nl||
      err 13 "$bin" noexit
   if [ "${1##*/}" = patchelf ];then
      rm "$1"
      mv "$bin" "$1"
   fi
}

cleansyms() {
   local file
   find "$1" -maxdepth 1 -mindepth 1 -type l|
      while read file;do
         isfilesym "$file" "$2"&&
            { rm "$file"||echo $file not unlinked; }
      done
}

getdeb() {
   local deb
   deb="$(type deb)"||return 1
   echo "/${deb#*/}"
}

getinstalled() {
   local dep pkgdir pkgname pkginfo pkgstate pkgdep
   unset installed alldepends
   for pkgdir in $(find "$root/$distfold/.controls" -mindepth 1 -type d -name "*");do
      pkginfo="$(cat "$pkgdir/control")"
      pkgname=$(echo "$pkginfo"|
         sed -nr "s/^Package:[ \t]+(.+)[ \t]*$/\1/p")
      pkgstate=$(echo "$pkginfo"|sed -nr "s/^State:[ \t]+([^- ]+)-installed[ \t]*$/\1/p")
      if [ "$1" = user ];then
         [ "$pkgstate" = user ]&&
            installed="$installed $pkgname"
      elif [ "$1" = auto ];then
         [ "$pkgstate" = auto ]&&
            installed="$installed $pkgname"
         pkgdep="$(getpkgdeps)"
         for dep in $pkgdep;do
            echo "$alldepends"|
               grep -qE "(^| )$(subst "$dep")( |$)"||
                  alldepends="$alldepends $dep"
         done
      else
         installed="$installed $pkgname:$pkgstate"
      fi
   done
}

heavejunk() {
   local pkg wasrm
   wasrm=1
   while [ "$wasrm" ];do
      getinstalled auto
      wasrm=
      for pkg in $installed;do
         if ! echo "$alldepends"|
            grep -qE "(^| )$(subst "$pkg")( |$)";then
               removepkg "$pkg"
               wasrm=1
         fi
      done
   done
}

preinit

if [ "$com" = extract ];then
   { getinfo int "$1"||getinfo ext "$1"; }||exit 6
   shift
   [ -f "$pkgfile" ]||err 7 "$pkgfile"
   unset keys files
   for arg in "$@";do
      [[ "$arg" = -* ]]&&keys="$keys $arg"
      [[ "$arg" = ./* ]]&&files="$files \"$arg\""
   done
   eval "undeb -d \"$root\" $keys \"$pkgfile\" $files"
elif [ "$com" = search ];then
   for pkg in "$@";do
      searchpkg "$pkg"
   done
elif [ "$com" = get ];then
   for pkg in "$@";do
      getpkg "$pkg"
      [ "$?" = 8 ]&&err 8 "$pkg" noexit
   done
elif [ "$com" = info ];then
   getinstalled
   for pkg in "$@";do
      isinstalled "$pkg"&&
         getinfo int "$pkg" nodetails||
            getinfo ext "$pkg" nodetails
      [ "$?" = 0 ]&&echo "$pkginfo\n"
   done
elif [ "$com" = files ];then
   getinstalled
   for pkg in "$@";do
      isinstalled "$pkg"&&
         cat "$(getdir "$pkg")/files"||
            err 10 "$pkg" noexit
   done
elif [ "$com" = list ];then
   for pkgdir in $(find "$root/$distfold/.controls" -mindepth 1 -type d);do
      pkginfo="$(cat "$pkgdir/control")"
      getinfo
      [ "$namesonly" ]&&
         echo "$pkgname"||
            echo "$cl$pkgname$cr $pkgver ${pkgsize}KB ${pkgstate:0:1} ($pkgdep)"
   done
elif [ "$com" = remove ];then
   for pkg in "$@";do
      removepkg "$pkg"||err="$?"
   done
   [ "$nodepends" ]||heavejunk
elif [ "$com" = update ];then
   updatelist
   [ "$updateonly" ]&&exit
   getinstalled
   oldpkgs=
   echo Comparing versions...
   for pkg in $installed;do
      getinfo ext "${pkg%:*}"
      epkgver="$pkgver"
      getinfo int "${pkg%:*}"
      if [ "$epkgver" != "$pkgver" ];then
         echo "${pkg%:*} ver. curr: $pkgver repo: $epkgver"
         oldpkgs="$oldpkgs $pkg"
      fi
   done
   caching_="$caching"
   if [ "$oldpkgs" ];then
      for pkg in $oldpkgs;do
         removepkg "${pkg%:*}" force
         installpkg "${pkg#*:}" "${pkg%:*}"
      done
      heavejunk
      echo Updating done.
   else
      echo Up to date.
   fi
elif [ "$com" = reinstall ];then
   echo Preparing...
   checkserver||exit
   getinstalled user
   pkgreinstall="$installed"
   echo Cleaning syms...
   deb="$(getdeb)"||exit 1
   cleansyms "$dirforsym" "$deb"
   echo Cleaning root...
   for file in $(find -L "$root" -maxdepth 1 -mindepth 1);do
      [ -e "$file" -o -h "$file" ]&&rm -rf "$file"
   done
   ld=
   preinit
   for pkg in $pkgreinstall;do
      installpkg user "$pkg"
   done
   echo "\nReinstallation done."
elif [ "$com" = exec ];then
   [ "$1" = script -o "$1" = symlink -o "$1" = patch ]||
      { echo $exectype $dirforsym;exit; }
   if [ "$2" ];then
      [ -d "$2" -a -w "$2" ]||exit 1
      ndirforsym="$2"
   else
      ndirforsym="$dirforsym"
   fi
   deb="$(getdeb)"||exit 1
   cleansyms "$dirforsym" "$deb"
   echo "exectype=$1\ndirforsym=$ndirforsym" >"$root/$distfold/.debexec"
   [ "$1" = script ]&&exit
   IFS=":"
   for dir in $path;do
      IFS=$'\n'
      find -L "$dir" -maxdepth 1 -mindepth 1 -type f 2>$nl|while read file;do
         if [ "$1" = patch ];then
            patchbin "$file"
         elif [ "$1" = symlink ];then
            ln -s "$deb" "$ndirforsym/${file##*/}"||
               err 12 "$file" noexit
         fi
      done
   done
elif [ "$com" = install ];then
   [ "$1" ]||err 5 '' '' help
   for pkg in "$@";do
      installpkg user "$pkg"
      [ "$?" = 14 ]&&err 14 "$pkg" noexit
   done
elif [ "$com" = size ];then
   for file in "$root/" "$root/$distfold/.cache/" "$root/$distfold/.controls/" "$packagefile" $(find -L $root -maxdepth 1 -mindepth 1 ! -name "$distfold" -type d	-exec echo "{}/" \;);do
      eval du -Ls "$file"
   done
elif [ "$com" = clear ];then
   find -L $root/$distfold/.cache -name "*.deb" -exec rm {} \;
fi

true
exit $err
Скрипт всегда будет эксперементальным, потому что всегда нужно думать, что можно поставить так, а что нет. Для чего может быть окружение нужно подстроить. Скрипт сырой и необкатанный. Развивать я его не собираюсь, он мне всего для пятка утилит и нужен. Но мож кому пригодится.
Свернуть

kaztost
Сообщения: 67
Зарегистрирован: 16 июл 2017, 23:29

Сообщение kaztost » 17 янв 2018, 12:27

Visitor7, добро пожаловать на этот форум!

Наверное, более подходящее место для ваших скриптов - ветка Устанавливаем Debian (chroot среду) по выбору и используем совместно с Entware. И, опять-таки по личным ощущениям, разворачивать deb-пакеты лучше стандартным образом через apt-get в chroot. А пользоваться без chroot, вызывая дебианный линкер с нужными опциями, как в ваших скриптах.

Так что если возражений с вашей стороны не последует - перемещу ваше сообщение в указанную ветку.

Visitor7
Сообщения: 2
Зарегистрирован: 15 янв 2018, 00:09

Сообщение Visitor7 » 17 янв 2018, 23:14

kaztost, Спасибо, я не против той темы, но для работы на роутерах скорее всего понадобится правка. apt-get хорош, но его установить еще надо с толпой зависимостей, а тут маленький, легко изменяемый скрипт. Я пользуюсь в режиме patch, тогда скрипт для запуска не нужен, но в chroot бинарники после patchelf уже не запустятся.

kaztost
Сообщения: 67
Зарегистрирован: 16 июл 2017, 23:29

Сообщение kaztost » Вчера, 00:08

Visitor7, ок, потестируем пока на андроиде. Я про patchelf сразу не увидел. Сейчас посмотрел - знатная штуковина, оказывается. Надо бы patchelf вообще в статично собранном виде иметь.


Вернуться в «Entware на Android»

Кто сейчас на конференции

Всего 0 посетителей :: 0 зарегистрированных, 0 скрытых и 0 гостей (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (121) здесь было 18 май 2016, 18:19

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей