-- Do not flash this if you do not need it.
-- If this BusyBox provides you with the needs that you seek for but your current BusyBox does not provide them to you then uninstall your current BusyBox and flash this zip.
( BusyBox Distro for Android ARM/MIPS/x86 )
-- BusyBox is copyrighted by many authors between 1998-2013.
-- Licensed under GPLv2. See source distribution for detailed
copyright notices.
Click to expand...
Click to collapse
This isn't my work.
Usage: busybox [function [arguments]...]
or: busybox --list[-full]
or: busybox --install [-s] [DIR]
or: function [arguments]...
Click to expand...
Click to collapse
BusyBox is a multi-call binary that combines many common Unix utilities into a single executable. Most people will create a link to busybox for each function they wish to use and BusyBox will act like whatever it was invoked as.
After seeing so much lacking from busybox in my own personal use and experience I grew tired and spent hours searching for a more fully loaded compiled BusyBox which in turn would be stable.
Here is a list of all the current applets available for this version of BusyBox from A-Z:
A:
Code:
acpid
add-shell
addgroup
adduser
adjtimex
ar
arp
arping
ash
awk
B:
Code:
base64
basename
bbconfig
beep
blkid
blockdev
bootchartd
brctl
bunzip2
bzcat
bzip2
C:
Code:
cal
cat
catv
chat
chattr
chgrp
chmod
chown
chpasswd
chpst
chroot
chrt
chvt
cksum
clear
cmp
comm
conspy
cp
cpio
crond
crontab
cryptpw
cttyhack
cut
D:
Code:
date
dc
dd
deallocvt
delgroup
deluser
depmod
devmem
df
dhcprelay
diff
dirname
dmesg
dnsd
dnsdomainname
dos2unix
dpkg
dpkg-deb
du
dumpkmap
dumpleases
E:
Code:
echo
ed
egrep
eject
env
envdir
envuidgid
ether-wake
expand
expr
F:
Code:
fakeidentd
false
fbset
fbsplash
fdflush
fdformat
fdisk
fgconsole
fgrep
find
findfs
flash_eraseall
flash_lock
flash_unlock
flashcp
flock
fold
free
freeramdisk
fsck
fsck.minix
fsync
ftpd
ftpget
ftpput
fuser
G:
Code:
getopt
getty
grep
groups
gunzip
gzip
H:
Code:
halt
hd
hdparm
head
hexdump
hostid
hostname
httpd
hush
hwclock
I:
Code:
id
ifconfig
ifdown
ifenslave
ifplugd
ifup
inetd
init
inotifyd
insmod
install
ionice
iostat
ip
ipaddr
ipcalc
ipcrm
ipcs
iplink
iproute
iprule
iptunnel
K:
Code:
kbd_mode
kill
killall
killall5
klogd
L:
Code:
less
linux32
linux64
linuxrc
ln
loadfont
loadkmap
logger
login
logname
logread
losetup
lpd
lpq
lpr
ls
lsattr
lsmod
lsof
lspci
lsusb
lzcat
lzma
lzop
lzopcat
M:
Code:
makedevs
makemime
man
md5sum
mdev
mesg
microcom
mkdir
mkdosfs
mke2fs
mkfifo
mkfs.ext2
mkfs.minix
mkfs.reiser
mkfs.vfat
mknod
mkpasswd
mkswap
mktemp
modinfo
modprobe
more
mount
mountpoint
mpstat
mt
mv
N:
Code:
nameif
nanddump
nandwrite
nbd-client
nc
netstat
nice
nmeter
nohup
nslookup
ntpd
O:
Code:
od
openvt
P:
Code:
passwd
patch
pgrep
pidof
ping
ping6
pipe_progress
pivot_root
pkill
pmap
popmaildir
poweroff
powertop
printenv
printf
ps
pscan
pstree
pwd
pwdx
R:
Code:
raidautorun
rdate
rdev
readlink
readprofile
realpath
reboot
reformime
remove-shell
renice
reset
resize
rev
rfkill
rm
rmdir
rmmod
route
rpm
rpm2cpio
rtcwake
run-parts
runsv
runsvdir
rx
S:
Code:
script
scriptreplay
sed
sendmail
seq
setarch
setconsole
setfont
setkeycodes
setlogcons
setserial
setsid
setuidgid
sha1sum
sha256sum
sha3sum
sha512sum
showkey
slattach
sleep
smemcap
softlimit
sort
split
start-stop-daemon
stat
strings
stty
su
sulogin
sum
sv
svlogd
swapoff
swapon
switch_root
sync
sysctl
syslogd
T:
Code:
tac
tail
tar
taskset
tcpsvd
tee
telnet
telnetd
test
tftp
tftpd
time
timeout
top
touch
tr
traceroute
traceroute6
true
tty
ttysize
tunctl
tune2fs
U:
Code:
ubiattach
ubidetach
ubimkvol
ubirmvol
ubirsvol
ubiupdatevol
udhcpc
udhcpc6
udhcpd
udpsvd
umount
uname
uncompress
unexpand
uniq
unix2dos
unlzma
unlzop
unxz
unzip
uptime
usleep
uudecode
uuencode
V:
Code:
vconfig
vi
vlock
volname
W:
Code:
watch
watchdog
wc
wget
which
whoami
whois
X:
Code:
xargs
xz
xzcat
Y:
Code:
yes
Z:
Code:
zcat
zcip
--- Happy Hunting!
Sent from my K2_CL using Tapatalk
As you all can see, this version is freakin loaded with possibilities. The other ones I used don't even come close to comparing to this version.
Sent from my K2_CL using Tapatalk
By the way, it comes with VI
Don't play with it unless you know how - could cause some serious damage lol.
Sent from my K2_CL using Tapatalk
Play Store Busybox Installer
Hi,
We could possible install following app from play store and perform busybox installation with ease.
Goto google play store and search for "Busybox X", author Robert Nediyakalaparambil [root].
I have tried myself and it works, found sendmail command which missing from previous installer.
Cheers! :victory:
donchai said:
Hi,
We could possible install following app from play store and perform busybox installation with ease.
Goto google play store and search for "Busybox X", author Robert Nediyakalaparambil [root].
I have tried myself and it works, found sendmail command which missing from previous installer.
Cheers! :victory:
Click to expand...
Click to collapse
Or we could just install this busybox, and a quick note:
For me, after flashing this busybox, su binary botched, Supersu couldn't reinstall it.
So I rigged up a flashable zip so that won't happen anymore, also bash is no longer symlinked to sh
https://db.tt/CvZQjsSC
Sent from above using Xparent Tapatalk
Bump this badass busybox
Sent from above using Xparent Tapatalk Blue
Deleted
Modding.MyMind said:
By the way, it comes with VI
Don't play with it unless you know how - could cause some serious damage lol.
Sent from my K2_CL using Tapatalk
Click to expand...
Click to collapse
I prefer nano so it doesn't really matter to me.
Related
I've been messing around with my Dev Magic and found a site for the G1 with some stuff to try:
http://gettinthru.blogspot.com/2009/04/mods-for-tmobile-g1-at-your-own-risk.html
In there, some of the things suggested use the linux command "cp" to copy files from/to the SD card. Problem is, I can't see it listed. Here is the listing of commands in /system/bin:
system_server
mediaserver
app_process
surfaceflinger
dalvikvm
dexopt
rild
wlan_loader
sdutil
service
netcfg
dumpsys
hcid
dd
cmp
df
date
cat
bugreport
chmod
chown
wpa_supplicant
wpa_cli
wipe
watchprops
vmstat
umount
top
vold
sync
stop
start
smd
sleep
setprop
setconsole
sendevent
schedtop
set_grp_id
route
rmmod
rmdir
renice
rm
reboot
radiooptions
ps
qemud
printenv
notify
netstat
mv
mount
mkdosfs
lsmod
mkdir
ls
log
ln
ioctl
kill
installd
iftop
insmod
ifconfig
id
hd
htclogkernel
getevent
getprop
flash_image
dvz
dmesg
dumpcrash
dhcpcd
debug_tool
toolbox
dumpstate
servicemanager
hciattach
logcat
sdptool
dbus-daemon
gzip
showlease
sh
schedtest
ping
logwrapper
iptables
linker
debuggerd
dosfsck
gdbserver
pm
svc
input
am
ime
monkey
akmd
As you can see, no cp. Any suggestions like a .apk of the command to push over to it?
Cheers
you can use dd to copy files aslong as you dont have busybox ( on the dream "all" the rooted images come with busybox )...
However you can use busybox from a non-rooted device by copying it to the folder "sqlite_stmt_journals" as it has both exec/write rights...
Seem to be sorted now...
I found that I can install Busybox like the G1 owners have as standard:
http://www.androidfanatic.com/cms/community-forums.html?func=view&id=228&catid=9
Folowed the guide and have cp and loads of stuff to play with now.
Cheers for your responses.
No problem... Wont take long before custom images are put together that include busybox as the magic now can also be rooted like the dream.
the "rootme" rom i provide in my rooting procedure has busybox installed, as well as apps2sd
the easiest way to replace the "cp" command is using "cat"
cat "sourcefile" > "targetfile"
if you need to copy more files, create a small script with a "for" loop.
Tom
If you're interested in running more complete Unix/Linux environment on your Android device, you might have heard about Optware for Android, here is thread for example.
Well, that project had few issues, like: shipping binaries of unknown origin and running them on user's device as root; coded and advertised as applying to one particular device; making too much changes on the device in one turn (like alter rootfs image).
That's why I decided to create another Optware install script to address those points. It is explicitly envisioned to support Android as an OS/Platform, i.e. all devices, not one particular model. Well, that may be not exactly easy, but that's at least good aim to pursue. It also doesn't come with any random binaries, but instead downloads them from a trusted source during the installation process (sources being Optware itself for bootstrap packages and CodeSourcery toolchain package for libc on which Optware depends).
Due to the last point, the installation script runs on a Linux host, so ADB connection to the device is required. Device also should have working "su" command (i.e. be rooted).
The source code is on github: https://github.com/pfalcon/optware-android
Just a bit of DISCLAIMER: you should run this script only if you understand what Optware is, and how to use it. Some experience with Unix/Linux command line and shell scripts is required, in particular you should skim thru the install script before running it.
Otherwise, it works quite well on my Nook Tablet, and I'd be happy to receive suggestions, success/bug reports, patches, etc.
Great work.
I took the liberty of using your script as a base to install OpenSSH. Should work on any device. I can't post links so I attached an archive with the script and the necessary files.
CyanogenMod on my Touchpad has some sort of sysinit '/etc/init.d', so I initialize Optware and Optware init scripts from there. I don't know how other mods handle this, probably different. SSH authentication is key-based, since passwords are not set. Have a look at the script to figure out how to deal with that.
Glad it was useful for you. Issue how to automatically start up daemons on Android indeed exists. The native Android way is /init.rc config file (of adhoc format). The problem is that this file is located on rootfs, which is ramdisk, i.e. any changes are lost and not available during boot. And initial content of that ramdisk comes from initramfs/initrd, but it has many ways to be implemented - compiled into kernel or on separate partition, checksumed against any changes, etc. So, in general case it's not possible to update, and even if it is, a mistake can lead to bricked device.
So, I for now skipped that issue altogether in my installer, but hope to get to it eventually (have some ideas).
So, if you have CyanogenMod, then using /etc/init.d is for sure a good solution.
One suggestion/question... is it possible to alter the script to run directly off of the device's command line? That would eliminate the Linux (and optionally would eliminate the ADB requirement).
I'm sure there's a static wget binary for ARM already compiled somewhere, and the rest can be done through busybox.
That would really make it universal. I'm a Windows user, and haven't had the time to parse out your script and figure out what the end result is supposed to look like on the device
merwin said:
One suggestion/question... is it possible to alter the script to run directly off of the device's command line?
Click to expand...
Click to collapse
There's now FAQ at http://sf.net/p/optware-android which discusses why this isn't possible on pristine Android system (lack of basic POSIX utilities and wget). It also has a suggestion for Windows users ;-).
That would eliminate the Linux (and optionally would eliminate the ADB requirement).
I'm sure there's a static wget binary for ARM already compiled somewhere, and the rest can be done through busybox.
Click to expand...
Click to collapse
The question is not if it's available, but whether you can trust such binary. The responsible user's answer is "No". Nook Color's optware installer does exactly that - ships binaries of unknown origin, and dissatisfaction with such approach is what prompted be to develop alternative installer.
The only way you can trust it if [easily buildable] source is provided, then it's up to the user to either compile it themselves or on their own risk to use provided binary. I don't have such source at my hands, and not interested to make it zillion's time just for this adhoc purpose - instead, there should be well-established community project to provide such build framework for all other projects to reuse. I hope, we'll tackle that under auspices of f-droid.org project.
That would really make it universal. I'm a Windows user, and haven't had the time to parse out your script and figure out what the end result is supposed to look like on the device
Click to expand...
Click to collapse
Other possible approach is to just skip "shell script" (and need for busybox) thing at all, and write installer in Java, to be run as normal Android app. That's certainly neat idea which will make users' life easier, and I have that on my (very long) TODO list ;-).
awesome! great work!
i have one small issue though: /etc/hosts doesnt seem to have any effect. a lot of stuff won't work because localhost cant be resolved. any suggestions?
2 onemandivision: Confirmed this issue, looking into it.
Ok, it turns out that GLibc's nsswitch default is weird in favoring DNS over /etc/hosts, and with Google DNS it didn't even look in the latter. Fixed by installing explicit nsswitch.conf:
# ping localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.274 ms
Let's dub this 1.0 then (tagged).
pfalcon said:
There's now FAQ at http://sf.net/p/optware-android which discusses why this isn't possible on pristine Android system (lack of basic POSIX utilities and wget). It also has a suggestion for Windows users .
The question is not if it's available, but whether you can trust such binary. The responsible user's answer is "No". Nook Color's optware installer does exactly that - ships binaries of unknown origin, and dissatisfaction with such approach is what prompted be to develop alternative installer.
The only way you can trust it if [easily buildable] source is provided, then it's up to the user to either compile it themselves or on their own risk to use provided binary. I don't have such source at my hands, and not interested to make it zillion's time just for this adhoc purpose - instead, there should be well-established community project to provide such build framework for all other projects to reuse. I hope, we'll tackle that under auspices of f-droid.org project.
Other possible approach is to just skip "shell script" (and need for busybox) thing at all, and write installer in Java, to be run as normal Android app. That's certainly neat idea which will make users' life easier, and I have that on my (very long) TODO list .
Click to expand...
Click to collapse
Most phones that are rooted have a fairly recent version of busybox on it, which includes wget. Also, standard practice on kernels these days (non stock ones) is to have all scripts that exist in /etc/init.d execute. That would solve any service startup issue.
I don't see any problems with requiring root and busybox
Solves all of the issues.
Hello
I tried the script and i was able to install ipkg on my Samsung Galaxy II
the only problem is... if i try to install any package... i get a segmentation fault error
Code:
[email protected]:/ # [B]cd /data/opt[/B]
[email protected]:/data/opt # [B]./start.sh[/B]
[B]BusyBox v1.10.3 (2012-02-14 09:43:47 UTC) built-in shell (ash)
Enter 'help' for a list of built-in commands.[/B]
$(precmd)[email protected]$HOSTNAME:${PWD:-?} #
$(precmd)[email protected]$HOSTNAME:${PWD:-?} # [B]ipkg install rsync[/B]
[B]Installing rsync (3.0.9-1) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/stable/rsync_3.0.9-1_arm.ipk
Segmentation fault[/B]
$(precmd)[email protected]$HOSTNAME:${PWD:-?} #
any advice? :'(
If you already have shell access to your device and don't want to connect via ADB, I modified the script to have the ability to run directly on your device (your device will need at least a functional wget executable already, which I had from SSHDroid):
Code:
# OPTWARE_DIR is where to install optware, it should be on a partition with
# normal Unix filesystem (permissions, etc.)
OPTWARE_DIR=/data/opt
# Particular field to install from, stable by default
FEED=http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/stable
# DO NOT edit anything below this line unless you know what you are doing
start_script=start.sh
cs08q1_url=https://sourcery.mentor.com/sgpp/lite/arm/portal/package2549/public/arm-none-linux-gnueabi/arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
cs08q1_fname=$(basename $cs08q1_url)
libc_path=arm-2008q1/arm-none-linux-gnueabi/libc
libc_libs="lib/ld-2.5.so ld-linux.so.3 \
lib/libc-2.5.so libc.so.6 \
lib/libm-2.5.so libm.so.6 \
lib/librt-2.5.so librt.so.1 \
lib/libpthread-2.5.so libpthread.so.0 \
lib/libresolv-2.5.so libresolv.so.2 \
lib/libdl-2.5.so libdl.so.2 \
lib/libnss_dns-2.5.so libnss_dns.so.2 \
lib/libutil-2.5.so libutil.so.1 \
lib/libgcc_s.so.1 libgcc_s.so \
lib/libnsl-2.5.so libnsl.so.1 \
lib/libcrypt-2.5.so libcrypt.so.1 \
lib/libBrokenLocale-2.5.so libBrokenLocale.so.1 \
lib/libanl-2.5.so libanl.so.1 \
lib/libcidn-2.5.so libcidn.so.1 \
lib/libnss_compat-2.5.so libnss_compat.so.2 \
lib/libnss_files-2.5.so libnss_files.so.2 \
lib/libnss_hesiod-2.5.so libnss_hesiod.so.2 \
lib/libnss_nis-2.5.so libnss_nis.so.2 \
lib/libnss_nisplus-2.5.so libnss_nisplus.so.2 \
lib/libthread_db-1.0.so libthread_db.so.1 \
"
#
# On-target (device) commands
#
t_cp () {
# copy file on a device
cat $1 >$2
}
t_cd_ln () {
local dir=$1
shift
cd $dir; ln $*
}
t_ln () {
ln $*
}
t_chmod () {
chmod $*
}
t_mkdir_p () {
# This doesn't complain if dir exists, but can't create intermediate dirs
ls $1 >/dev/null 2>&1 || mkdir $1
}
t_rm_f () {
# Doesn't complain if file not there
ls $1 >/dev/null 2>&1 && rm $1
}
t_rm_rf () {
# Doesn't complain if dir not there
ls $1 >/dev/null 2>&1 && rm -r $1
}
t_remount_rw () {
mount -o rw,remount $1 $1
}
t_remount_ro () {
mount -o ro,remount $1 $1
}
extract_libc () {
if [ ! -d $(echo $libc_path | sed -e 's%/.*%%') ]; then
echo Extracting $cs08q1_fname
tar xjf $cs08q1_fname $list
fi
}
install_system_lib () {
local f=$(basename $1)
echo "Installing system lib: $f"
t_cp $libc_path/$1 /lib/$f
t_chmod 0755 /lib/$f
t_ln -s $f /lib/$2
}
install_system_bin () {
local f=$(basename $1)
echo "Installing system bin: $1"
t_cp $libc_path/$1 /bin/$f
t_chmod 0755 /bin/$f
}
install_libc () {
while [ -n "$1" ]; do
local lib=$1
shift
local symlink=$1
shift
install_system_lib $lib $symlink
done
}
install_bin () {
echo "Installing /opt/bin/$1"
t_cp opt/bin/$1 /opt/bin/$1
t_chmod 755 /opt/bin/$1
}
install_ipkg () {
t_mkdir_p /opt/bin
t_mkdir_p /opt/lib
install_bin ipkg
t_cp opt/lib/libipkg.so.0.0.0 /opt/lib/libipkg.so.0.0.0
t_ln -s libipkg.so.0.0.0 /opt/lib/libipkg.so.0
t_ln -s libipkg.so.0.0.0 /opt/lib/libipkg.so
}
fetch_package_index () {
if [ ! -f Packages ]; then
echo "Downloading Optware package index"
wget -q $FEED/Packages
else
echo "Using cached Optware package index"
fi
}
get_package_fname () {
awk "/^Filename: ${1}_/ {print \$2}" Packages
}
fetch_package () {
if [ -z "$1" ]; then
echo "Unexpected error: package '$1' not found in index"
exit 1
fi
if [ ! -f "$1" ]; then
echo "Downloading Optware package $1"
wget -q $FEED/$1
else
echo "Using cached package $1"
fi
}
fetch_toolchain () {
if [ ! -f $cs08q1_fname ]; then
echo "You need CodeSourcery ARM-Linux toolchain release 2008q1: $cs08q1_fname"
echo "if you have this file on your system already, press Ctrl-C now and copy"
echo "it into the current directory. Otherwise, press Enter to download it (65MB)."
read
wget $cs08q1_url
fi
}
optware_uninstall () {
t_remount_rw /
t_remount_rw /system
rm -r $OPTWARE_DIR
rm /lib
rm /bin
rm /opt
rm /tmp
t_remount_ro /
rm /etc/resolv.conf
rm /etc/mtab
rm /etc/passwd
rm /etc/group
t_remount_ro /system
echo "Optware sucessfully uninstalled"
}
#
# Main code
#
if [ "$1" == "" ]; then
echo "This script installs NSLU Optware on an Android device connected using ADB"
echo "Usage: $0 install|uninstall"
exit 1
fi
if [ "$1" == "uninstall" ]; then
optware_uninstall
exit
fi
fetch_toolchain
fetch_package_index
ipkg_fname=$(get_package_fname ipkg-opt)
wget_fname=$(get_package_fname wget)
busybox_fname=$(get_package_fname busybox-base)
fetch_package $ipkg_fname
fetch_package $wget_fname
fetch_package $busybox_fname
t_remount_rw /
t_remount_rw /system
# Start from scratch
echo "== Initializing optware environment =="
t_mkdir_p $OPTWARE_DIR
t_ln -s $OPTWARE_DIR /opt
t_mkdir_p $OPTWARE_DIR/rootbin
t_ln -s $OPTWARE_DIR/rootbin /bin
t_mkdir_p $OPTWARE_DIR/rootlib
t_ln -s $OPTWARE_DIR/rootlib /lib
t_mkdir_p $OPTWARE_DIR/tmp
t_ln -s $OPTWARE_DIR/tmp /tmp
t_mkdir_p $OPTWARE_DIR/home
t_mkdir_p $OPTWARE_DIR/home/root
t_mkdir_p $OPTWARE_DIR/home/user
echo "== Installing libc =="
extract_libc
install_libc $libc_libs
install_system_bin usr/bin/ldd
echo "== Installing bootstrap ipkg =="
rm -rf opt
tar -xOzf $ipkg_fname ./data.tar.gz | tar -xzf -
install_ipkg
echo "== Installing bootstrap wget =="
rm -rf opt
tar -xOzf $wget_fname ./data.tar.gz | tar -xzf -
install_bin wget
echo "== Installing bootstrap busybox =="
rm -rf opt
tar -xOzf $busybox_fname ./data.tar.gz | tar -xzf -
install_bin busybox
echo "== Initializing bootstrap /bin =="
# We need sane shell as /bin/sh
t_ln -s /opt/bin/busybox /bin/sh
# We need minimal set of sane shell commands to run update-alternatives
# script to properly (re)install busybox itself
t_ln -s /opt/bin/busybox /bin/echo
t_ln -s /opt/bin/busybox /bin/rm
t_ln -s /opt/bin/busybox /bin/rmdir
t_ln -s /opt/bin/busybox /bin/sed
t_ln -s /opt/bin/busybox /bin/mkdir
t_ln -s /opt/bin/busybox /bin/head
t_ln -s /opt/bin/busybox /bin/sort
t_ln -s /opt/bin/busybox /bin/dirname
t_ln -s /opt/bin/busybox /bin/ln
t_ln -s /opt/bin/busybox /bin/mv
t_ln -s /opt/bin/busybox /bin/cat
t_ln -s /opt/bin/busybox /bin/chown
t_ln -s /opt/bin/busybox /bin/chmod
# gzip and tar should be part of Android, but there were reports
# that some implementations may be broken
t_ln -s /opt/bin/busybox /bin/tar
t_ln -s /opt/bin/busybox /bin/gzip
echo "== Configuring package feed =="
t_mkdir_p /opt/etc
t_mkdir_p /opt/etc/ipkg
echo src cross $FEED >/opt/etc/ipkg/feeds.conf
echo "== Configuring domain name resolution =="
echo nameserver 8.8.8.8 >/opt/etc/resolv.conf
# On a normal Android system, /etc is symlink to /system/etc, but just in case...
t_mkdir_p /etc
# but for normal system, we need to remount /system
t_rm_f /etc/resolv.conf
t_ln -s /opt/etc/resolv.conf /etc/resolv.conf
echo "== Configuring GLIBC Namespace Switch =="
t_cp nsswitch.conf /etc/nsswitch.conf
t_chmod 0644 /etc/nsswitch.conf
echo "== Configuring /etc/mtab =="
t_ln -s /proc/mounts /etc/mtab
echo "== Configuring users =="
echo root:x:0:0:root:/opt/home/root:/bin/sh >/opt/etc/passwd
echo shell:x:2000:2000:shell:/opt/home/user:/bin/sh >>/opt/etc/passwd
t_ln -s /opt/etc/passwd /etc/passwd
echo "== Configuring groups =="
echo root:x:0:root >/opt/etc/group
echo shell:x:2000:shell >>/opt/etc/group
t_ln -s /opt/etc/group /etc/group
echo "== Creating optware init script =="
echo '#!/system/bin/sh' >/opt/optware-init.sh
echo 'ls /opt >/dev/null 2>&1 && exit' >>/opt/optware-init.sh
echo echo Reinitializing optware rootfs links >>/opt/optware-init.sh
echo mount -o rw,remount rootfs / >>/opt/optware-init.sh
echo ln -s $OPTWARE_DIR /opt >>/opt/optware-init.sh
echo ln -s $OPTWARE_DIR/rootlib /lib >>/opt/optware-init.sh
echo ln -s $OPTWARE_DIR/rootbin /bin >>/opt/optware-init.sh
echo ln -s $OPTWARE_DIR/tmp /tmp >>/opt/optware-init.sh
echo mount -o ro,remount rootfs / >>/opt/optware-init.sh
t_chmod 0755 /opt/optware-init.sh
echo "== Creating optware startup script =="
echo '#!/system/bin/sh' >/opt/$start_script
echo 'ls /opt >/dev/null 2>&1 ||' su -c $OPTWARE_DIR/optware-init.sh >>/opt/$start_script
echo '# You may want to add /opt/local/bin to PATH below' >>/opt/$start_script
echo export PATH=/opt/sbin:/opt/bin:/bin:/system/bin >>/opt/$start_script
echo 'if busybox test $(busybox id -u) = 0; then HOME=/opt/home/root; else HOME=/opt/home/user; fi' >>/opt/$start_script
echo export HOME>>/opt/$start_script
echo export TMPDIR=/tmp >>/opt/$start_script
echo umask 022 >>/opt/$start_script
echo /bin/sh >>/opt/$start_script
t_chmod 0755 /opt/$start_script
# Create "s" symlink to ease typing on touchscreen devices
t_ln -s $start_script /opt/s
t_remount_ro /
echo "== Reinstalling bootstrap packages =="
echo "Make sure that your device is woken up and connected to the Internet"
echo "Press Enter to continue"
read
#
# Now that we have all dependencies to run ipkg bootstraped on device,
# we need to use ipkg to reinstall itself and all those dependencies,
# to make sure they're installed and configured properly.
#
PATH=/opt/bin:/bin /opt/bin/ipkg update
PATH=/opt/bin:/bin /opt/bin/ipkg install ipkg-opt
PATH=/opt/bin:/bin /opt/bin/ipkg install wget
PATH=/opt/bin:/bin /opt/bin/ipkg install busybox
echo "== Cleaning local directory =="
rm -rf opt arm-2008q1
t_remount_ro /system
echo "Optware for Android installation complete."
echo "To start optware session, execute $OPTWARE_DIR/$start_script (aka $OPTWARE_DIR/s) on the device"
echo "Also, make sure you have mounted whichever partition contains Optware as rw when you execute an update"
pfalcon, let me know if you want me to add any license headers to this.
These are a downstream distribution of the "suckless" binaries found at http://git.2f30.org/
They can be used as improved shell or in your application, root or otherwise.
A more reliable way to run native functionality than through Busybox.
For more information, access to source code and binaries, I suggest you head to http://fusion.github.io/sbase-for-android/
Here is a list of binaries currently available, source code included -- MIT license:
basename cal cat chgrp chmod chown chroot cksum cmp col cols comm cp cron
cut date dirname du echo env expand expr false find fold grep head kill
link ln logname ls md5sum mkdir mkfifo mktemp mv nice nl nohup paste
printenv printf pwd readlink renice rm rmdir sed seq setsid sha1sum
sha256sum sha512sum sleep sort split sponge strings sync tail tar tee
test time touch tr true tty uname unexpand uniq unlink uudecode uuencode
wc xargs yes
clear df dmesg halt id
lsusb mknod mkswap pagesize pidof respawn stat
sysctl truncate watch
Click to expand...
Click to collapse
pivotce.com informs that instructions have been published on gaining root access to a webOS TV. This is much harder than on the old phones and tablets. When this was done on legacy webOS, there was a wave of enhancements and tweaks made available to phone users from webOS Internals and other developers.
The instructions can be found on the Russian webOS forums here: webos-forums.ru/topic4650.html (English Translation via Google).
As the thread itself notes, this creates the possibility of fiddling with your TV in a way that may turn it into a large, thin brick and will almost certainly invalidate your warranty. The general user should stay well clear of this.
pivotCE published this for information only and recommend leaving investigations to those who know what they are doing or who can afford to wreck expensive television sets. We will watch to see if anything interesting emerges from this development.
+
Detailed analysis of the root access method described above:
forums.webosnation.com/lg-webos-tv/331754-pivotce-seems-webos-tv-has-been-rooted.html#post3450911
Hello!
I'm from webos-forums.ru. I've root on TV for a while and can help you with translation or testing on LG webOS 1.4.
rooting
I could use your help rooting my lg 65uf6450-ua if you would. Thank you
Root webOS
Hodizzal said:
I could use your help rooting my lg 65uf6450-ua if you would. Thank you
Click to expand...
Click to collapse
1. You need to install Developer Mode App and export private ssh-key with CLI (webostv.developer.lge.com/develop/app-test)
2. Convert private ssh-key with puttygen [import key <your private ssh-key>, then save private key]
3. Download exploit (zalil.su/6937580), then connect with TV User: prisoner, [<ip-tv>:9922] + private-key with WinSCP (or other SCP-client), upload to /media/developer on TV and rename it to root.
on linux
Code:
ssh -i <your private ssh-key> [email protected]<ip-tv> -p 9922 "/bin/sh -i"
4.
Code:
chmod +x root
Code:
./root
5. After try install any app from market go to LG App Store and try to install any app.
6. if third stage ok. the insert password 1111 as said.
7.
Code:
busybox chroot /proc/1/root
Code:
[email protected]tTV:/# id
Code:
uid=0(root) gid=0(root)........
I personally use Linux Subsystem on Windows 10 for all of this.
To install .ipk app:
Code:
ApplicationInstallerUtility -c install -p /tmp/<any-name>.ipk -u 0 -l /media/developer -d
Info about your linux kernel and TV firmware:
Code:
luna-send -n 1 -f luna://com.palm.systemservice/osInfo/query '{ "subscribe": false }'
Launch app:
Code:
luna-send -n 1 -f luna://com.webos.applicationManager/launch '{"id": "netflix"}'
All apps ID you can find with
Code:
luna-send -n 1 "palm://com.palm.applicationManager/listLaunchPoints" "{}"
or at a folder /media/cryptofs/apps/usr/palm/applications/<App ID>/appinfo.json
For permanent root access through telnet:
1)
Code:
[email protected]:/# mkdir -p /media/cryptofs/root/etc
2)
Code:
[email protected]:/# cp -r /etc/* /media/cryptofs/root/etc
3)
Code:
[email protected]:/# mount -o bind /media/cryptofs/root/etc /etc
4)
Code:
[email protected]:/# passwd root
Enter any new root password
5)
Code:
cp /media/cryptofs/apps/usr/palm/services/com.palmdts.devmode.service/start-devmode.sh /tmp/start-devmode.sh
6) Download with WinSCP start-devmode.sh and edit it locally.
You need to add at the beginning
Code:
mount -o bind /media/cryptofs/root/etc /etc
telnetd -l /sbin/sulogin &
Plus you can add the line to launch any App at start, e.g:
Code:
luna-send -n 1 -f luna://com.webos.applicationManager/launch '{"id": "netflix", "params":{}}'
And comment Dev Mode online check.
Here it's mine start-devmode.sh. It's for webOS 1.4. It can be different for other webOS versions:
Code:
#!/bin/sh
mount -o bind /media/cryptofs/root/etc /etc
telnetd -l /sbin/sulogin &
#luna-send -n 1 -f luna://com.webos.applicationManager/launch '{"id": "netflix", "params":{}}'
# FIXME: disable this to turn off script echo
set -x
# FIXME: disable this to stop script from bailing on error
# set -e
# TODO: Check upstart daemon/process tracking (do we need to change /etc/init/devmode.conf? start sshd as daemon?)
# set devmode ssh port here
SSH_PORT="9922"
# set arch:
ARCH="armv71"
grep -qs "qemux86" /etc/hostname && ARCH="i686"
# set directories
OPT_DEVMODE="/opt/devmode"
OPT_SSH="/opt/openssh"
DEVELOPER_HOME="/media/developer"
DEVMODE_SERVICE_DIR="/media/cryptofs/apps/usr/palm/services/com.palmdts.devmode.service"
CRYPTO_SSH="$DEVMODE_SERVICE_DIR/binaries-${ARCH}/opt/openssh"
CRYPTO_OPT="$DEVMODE_SERVICE_DIR/binaries-${ARCH}/opt"
if [ -s ${DEVMODE_SERVICE_DIR}/jail_app.conf ] ; then
mv ${DEVMODE_SERVICE_DIR}/jail_app.conf ${DEVELOPER_HOME}
mv ${DEVMODE_SERVICE_DIR}/jail_app.conf.sig ${DEVELOPER_HOME}
fi
if [ -r ${DEVMODE_SERVICE_DIR}/sessionToken ] ; then
mv -f ${DEVMODE_SERVICE_DIR}/sessionToken /var/luna/preferences/devmode_enabled
fi
# Make sure the ssh binaries are executable (in service directory)
if [ ! -x "${CRYPTO_SSH}/sbin/sshd" ] ; then
chmod ugo+x ${CRYPTO_SSH}/sbin/sshd ${CRYPTO_SSH}/bin/ssh* ${CRYPTO_SSH}/bin/scp* || true
chmod ugo+x ${CRYPTO_SSH}/bin/sftp ${CRYPTO_SSH}/lib/openssh/* || true
chmod ugo+x ${CRYPTO_OPT}/devmode/usr/bin/* || true
fi
# TODO: (later) Look for "re-init" flag to re-generate ssh key if requested by app (via devkey service)
# com.palm.service.devmode could have "resetKey" method to erase /var/lib/devmode/ssh/webos_rsa
# Kind of dangerous though, since new key will need to be fetched on the desktop (after reboot)...
# We could just require a hard-reset of the TV which should blow away /var/lib/devmode/ssh/...
# Initialize the developer (client) SSH key pair, if it doesn't already exist
if [ ! -e /var/lib/devmode/ssh/webos_rsa ] ; then
mkdir -p /var/lib/devmode/ssh
chmod 0700 /var/lib/devmode/ssh
# get FIRST six (UPPER-CASE, hex) characters of 40-char nduid from nyx-cmd
# NOTE: This MUST match passphrase as displayed in devmode app (main.js)!
# PASSPHRASE="`/usr/bin/nyx-cmd DeviceInfo query nduid | head -c 6 | tr 'a-z' 'A-Z'`"
# PASSPHRASE="`/usr/bin/nyx-cmd DeviceInfo query nduid | tail -n1 | head -c 6 | tr 'a-z' 'A-Z'`"
PASSPHRASE="`tail /var/lib/secretagent/nduid -c 40 | head -c 6 | tr 'a-z' 'A-Z'`"
${CRYPTO_SSH}/bin/ssh-keygen -t rsa -C "[email protected]" -N "${PASSPHRASE}" -f /var/lib/devmode/ssh/webos_rsa
# copy ssh key to /var/luna/preferences so the devmode service's KeyServer can read it and serve to ares-webos-cli tools
cp -f /var/lib/devmode/ssh/webos_rsa /var/luna/preferences/webos_rsa
chmod 0644 /var/luna/preferences/webos_rsa
# if we generated a new ssh key, make sure we re-create the authorized_keys file
rm -f ${DEVELOPER_HOME}/.ssh/authorized_keys
fi
# Make sure the /media/developer (and log) directories exists (as sam.conf erases it when devmode is off):
mkdir -p ${DEVELOPER_HOME}/log
chmod 777 ${DEVELOPER_HOME} ${DEVELOPER_HOME}/log
# Install the SSH key into the authorized_keys file (if it doesn't already exist)
if [ ! -e ${DEVELOPER_HOME}/.ssh/authorized_keys ] ; then
mkdir -p ${DEVELOPER_HOME}/.ssh
cp -f /var/lib/devmode/ssh/webos_rsa.pub ${DEVELOPER_HOME}/.ssh/authorized_keys || true
# NOTE: authorized_keys MUST be world-readable else sshd can't read it inside the devmode jail
# To keep sshd from complaining about that, we launch sshd with -o "StrictModes no" (below).
chmod 755 ${DEVELOPER_HOME}/.ssh
chmod 644 ${DEVELOPER_HOME}/.ssh/authorized_keys
chown -R developer:developer ${DEVELOPER_HOME}/.ssh
fi
# FIXME: Can we move this to /var/run/devmode/sshd ?
# Create PrivSep dir
mkdir -p /var/run/sshd
chmod 0755 /var/run/sshd
# Create directory for host keys (rather than /opt/openssh/etc/ssh/)
HOST_KEY_DIR="/var/lib/devmode/sshd"
if [ ! -d "${HOST_KEY_DIR}" ] ; then
mkdir -p ${HOST_KEY_DIR}
chmod 0700 ${HOST_KEY_DIR}
fi
# Create initial keys if necessary
if [ ! -f ${HOST_KEY_DIR}/ssh_host_rsa_key ]; then
echo " generating ssh RSA key..."
${CRYPTO_SSH}/bin/ssh-keygen -q -f ${HOST_KEY_DIR}/ssh_host_rsa_key -N '' -t rsa
fi
if [ ! -f ${HOST_KEY_DIR}/ssh_host_ecdsa_key ]; then
echo " generating ssh ECDSA key..."
${CRYPTO_SSH}/bin/ssh-keygen -q -f ${HOST_KEY_DIR}/ssh_host_ecdsa_key -N '' -t ecdsa
fi
if [ ! -f ${HOST_KEY_DIR}/ssh_host_dsa_key ]; then
echo " generating ssh DSA key..."
${CRYPTO_SSH}/bin/ssh-keygen -q -f ${HOST_KEY_DIR}/ssh_host_dsa_key -N '' -t dsa
fi
# Check config
# NOTE: This should only be enabled for testing
#${CRYPTO_SSH}/sbin/sshd -f ${CRYPTO_SSH}/etc/ssh/sshd_config -h ${HOST_KEY_DIR}/ssh_host_rsa_key -t
# Set jailer command
DEVMODE_JAIL="/usr/bin/jailer -t native_devmode -i com.palm.devmode.openssh -p ${DEVELOPER_HOME}/ -s /bin/sh"
#DEVMODE_JAIL="echo"
# Add for debugging, but this will cause sshd to exit after the first ssh login:
# -ddd -e
# Make environment file for openssh
DEVMODE_JAIL_CONF="/etc/jail_native_devmode.conf"
DEVMODE_OPENSSH_ENV="${DEVELOPER_HOME}/.ssh/environment"
if [ -f ${DEVMODE_JAIL_CONF} ]; then
echo " generating environment file from jail_native_devmode.conf..."
find ${DEVMODE_JAIL_CONF} | xargs awk '/setenv/{printf "%s=%sn", $2,$3}' > ${DEVMODE_OPENSSH_ENV}
${DEVMODE_JAIL} /usr/bin/env >> ${DEVMODE_OPENSSH_ENV}
fi
# Set path for devmode
if [ -f ${DEVMODE_OPENSSH_ENV} ]; then
echo "PATH=${PATH}:${OPT_DEVMODE}/usr/bin" >> ${DEVMODE_OPENSSH_ENV}
fi
sleep 5;
for interface in $(ls /sys/class/net/ | grep -v -e lo -e sit);
do
if [ -r /sys/class/net/$interface/carrier ] ; then
if [[ $(cat /sys/class/net/$interface/carrier) == 1 ]]; then OnLine=1; fi
fi
done
#if [ $OnLine ]; then
# sessionToken=$(cat /var/luna/preferences/devmode_enabled);
# checkSession=$(curl --max-time 3 -s https://developer.lge.com/secure/CheckDevModeSession.dev?sessionToken=$sessionToken);
# if [ "$checkSession" != "" ] ; then
# result=$(node -pe 'JSON.parse(process.argv[1]).result' "$checkSession");
# if [ "$result" == "success" ] ; then
rm -rf /var/luna/preferences/dc*;
# # create devSessionTime file to remain session time in devmode app
# remainTime=$(node -pe 'JSON.parse(process.argv[1]).errorMsg' "$checkSession");
# resultValidTimeCheck=$(echo "${remainTime}" | egrep "^([0-9]{1,4}(:[0-5][0-9]){2})$");
# if [ "$resultValidTimeCheck" != "" ] ; then
echo '900:00:00' > ${DEVMODE_SERVICE_DIR}/devSessionTime;
chgrp 5000 ${DEVMODE_SERVICE_DIR}/devSessionTime;
chmod 664 ${DEVMODE_SERVICE_DIR}/devSessionTime;
# fi
# elif [ "$result" == "fail" ] ; then
# rm -rf /var/luna/preferences/devmode_enabled;
# rm -rf /var/luna/preferences/dc*;
# if [ -e ${DEVMODE_SERVICE_DIR}/devSessionTime ] ; then
# rm ${DEVMODE_SERVICE_DIR}/devSessionTime;
# fi
# fi
# fi
#fi
# Cache clear function added (except Local storage)
if [ -e ${DEVMODE_SERVICE_DIR}/devCacheClear ] ; then
rm -rf `ls | find /var/lib/webappmanager*/* -name "Local Storage" -o -name "localstorage" -prune -o -print`;
rm ${DEVMODE_SERVICE_DIR}/devCacheClear;
fi
# Launch sshd
${DEVMODE_JAIL} ${OPT_SSH}/sbin/sshd
-o StrictModes=no
-f ${OPT_SSH}/etc/ssh/sshd_config
-h ${HOST_KEY_DIR}/ssh_host_rsa_key
-o PasswordAuthentication=no -o PermitRootLogin=no -o PermitUserEnvironment=yes
-D -p ${SSH_PORT}
7) Upload new start-devmode.sh and rewrite the old one
Code:
cp /tmp/start-devmode.sh /media/cryptofs/apps/usr/palm/services/com.palmdts.devmode.service/start-devmode.sh
8) Restart TV.
Connect with telnet and type previously entered password.
Code:
telnet <ip-tv>
Trying <ip-tv>...
Connected to <ip-tv>].
Escape character is '^]'.
webOS TV 1.4.0 LGSmartTV
Give root password for system maintenance
(or type Control-D for normal startup):
Entering System Maintenance Mode
[email protected]:/#
Does it work on WebOS 3.5 devices?
medi01 said:
Does it work on WebOS 3.5 devices?
Click to expand...
Click to collapse
Positive.
is it possible to install webOS 3.0 on an 65EF9500 that currently has WebOS 2.0 via the USB upgrade method?
enkrypt3d said:
is it possible to install webOS 3.0 on an 65EF9500 that currently has WebOS 2.0 via the USB upgrade method?
Click to expand...
Click to collapse
No
Is there any method to get 3.0 installed over 1.4 I have a 49ub8500-ua
syconu said:
Is there any method to get 3.0 installed over 1.4 I have a 49ub8500-ua
Click to expand...
Click to collapse
No
Is there anything hack related that I can do with this to and can is support a new air mouse with a dongle
Ok, so I get run the root app and first ,second , and third stage all are good. then it says try get root password is 1111. But the terminal keeps freezing after that happens. A couple times my tv rebooted too. I cant figure out what i could have messed up. ANyone with any experience using this method have any legit information?
steven817817 said:
Ok, so I get run the root app and first ,second , and third stage all are good. then it says try get root password is 1111. But the terminal keeps freezing after that happens. A couple times my tv rebooted too. I cant figure out what i could have messed up. ANyone with any experience using this method have any legit information?
Click to expand...
Click to collapse
Try to delete all 'cache' files from exploit at /media/developer. It doesn't wotk twice as far as I concerned
Is there anyway I can root my 1.4.0 and if so what r the benefits of the root? Can I install Android or kodi? What's the point
teffd said:
Try to delete all 'cache' files from exploit at /media/developer. It doesn't wotk twice as far as I concerned
Click to expand...
Click to collapse
I tried it stil seems to finish step 3 then says enter 1111. But this is where it freezes up and does not get any further.
Is this still working on 3.6? I'm stuck at try to install any app from market.
Mazda77 said:
Positive.
Click to expand...
Click to collapse
Which TV and firmware version?
Is this possible with UJ63 serie?
Hi, would the root access allow somehow to connect other bluetooth devices different than LG? Thanks!
You can do pretty much anything to the system with root, even include support for unsupported devices in form of additional kernel modules.
For example, I've added Samba support so I can mount use my NAS (see my blog at ddscentral dot org for details).
Hey guys is it possible to install android apps into WebOS? I just bought an Lg oled LG 55EG9A7V i want to use Perfect Player IPTV but i cant install it right now...Other then that i dont need anything else..
Can anyone help me?
i can't root Samsung galaxy a02 -- SM-A022F/DS Build No: A022FXXU2BUI3 , android 11 , i dont know what to do for rooting and i dont have firmware file (bootloader unlocked)
To get the superuser access ( AKA root ) to be able to control various aspects of Android OS means you need to perform a certain modification that will root your phone's Android. An unlocked bootloader isn't needed to root Android.
Here is what you have to do to root your device's Android:
Replace Android's Toybox binary - what is a restricted version by default - by unrestricted Toybox v0.8.5.
This e.g. can get achieved by means of a Windows command script making use of ADB coomands.
jwoegerbauer said:
To get the superuser access ( AKA root ) to be able to control various aspects of Android OS means you need to perform a certain modification that will root your phone's Android. An unlocked bootloader isn't needed to root Android.
Here is what you have to do to root your device's Android:
Replace Android's Toybox binary - what is a restricted version by default - by unrestricted Toybox v0.8.5.
This e.g. can get achieved by means of a Windows command script making use of ADB coomands.
Click to expand...
Click to collapse
hi , i dont know what is toybox or i dont know really what to do can you tell me step by step please? i have ADB already
dleaderp said:
hi , i dont know what is toybox or i dont know really what to do
Click to expand...
Click to collapse
Typically people do a Google search like "Android Toybox" ...
To save you this search: Toybox is a suite of Linux commands ported to Android.
The commands supported are
Code:
acpi arch ascii base64 basename blkid blockdev bunzip2 bzcat cal cat
catv chattr chgrp chmod chown chroot chrt chvt cksum clear cmp comm
count cp cpio crc32 cut date devmem df dirname dmesg dnsdomainname
dos2unix du echo egrep eject env expand factor fallocate false fgrep
file find flock fmt free freeramdisk fsfreeze fstype fsync ftpget
ftpput getconf grep groups gunzip halt head help hexedit hostname
hwclock i2cdetect i2cdump i2cget i2cset iconv id ifconfig inotifyd
insmod install ionice iorenice iotop kill killall killall5 link ln
logger login logname losetup ls lsattr lsmod lspci lsusb makedevs
mcookie md5sum microcom mix mkdir mkfifo mknod mkpasswd mkswap mktemp
modinfo mount mountpoint mv nbd-client nc netcat netstat nice nl nohup
nproc nsenter od oneit partprobe passwd paste patch pgrep pidof ping
ping6 pivot_root pkill pmap poweroff printenv printf prlimit ps pwd
pwdx readahead readlink realpath reboot renice reset rev rfkill rm
rmdir rmmod sed seq setfattr setsid sha1sum shred sleep sntp sort
split stat strings su swapoff swapon switch_root sync sysctl tac tail
tar taskset tee test time timeout top touch true truncate tty tunctl
ulimit umount uname uniq unix2dos unlink unshare uptime usleep uudecode
uuencode uuidgen vconfig vmstat w watch wc which who whoami xargs
xxd yes zcat
As you might see su is the ROOT functionality.
dleaderp said:
can you tell me step by step please? i have ADB already
Click to expand...
Click to collapse
Actually I'm working on a Windows command script that makes use of ADB what does the job. I'll publish it here when finished:
[TOOL][ADB]][Windows] A 100% Safe Non-systemless Root Tool - No Soft-bricked Adroid Guaranteed
Grant Root Privileges to Regular Users Using Devices With Android 6 and up by Simply Upgrading Android's Multi-command Applet Toybox.
forum.xda-developers.com
jwoegerbauer said:
Actually I'm working on a Windows command script that makes use of ADB what does the job. I'll publish it here when finished:
Click to expand...
Click to collapse
happy to hear that xd
i got a last question, i think my phone's storage is shrunked after i used firmware is it possible ? if yes how can i fix it. it was 32 gb now its 8gb
i fixed i used another firmware i'll be wait for your ADB