diff options
author | madmonkey <madfkingmonkey@gmail.com> | 2017-10-08 15:27:58 +0300 |
---|---|---|
committer | madmonkey <madfkingmonkey@gmail.com> | 2017-10-08 15:27:58 +0300 |
commit | f476e186a1b502d6d72fdf7dab4ab44e5b209230 (patch) | |
tree | a9ffa9521ae2ce8881d02145d8120103e38d2af1 /mods | |
parent | afb1d8a8b5fde2e4d49ad9c42e29d64f65074718 (diff) |
update scripts
Diffstat (limited to 'mods')
33 files changed, 393 insertions, 156 deletions
diff --git a/mods/mod_hakchi/bin/busybox b/mods/mod_hakchi/bin/busybox Binary files differindex e71f5823..e71f5823 100644..100755 --- a/mods/mod_hakchi/bin/busybox +++ b/mods/mod_hakchi/bin/busybox diff --git a/mods/mod_hakchi/bin/rsync b/mods/mod_hakchi/bin/rsync Binary files differindex d37b2b8d..d37b2b8d 100644..100755 --- a/mods/mod_hakchi/bin/rsync +++ b/mods/mod_hakchi/bin/rsync diff --git a/mods/mod_hakchi/hakchi/init b/mods/mod_hakchi/hakchi/init index e885e8e0..cd1ab8d2 100644 --- a/mods/mod_hakchi/hakchi/init +++ b/mods/mod_hakchi/hakchi/init @@ -5,12 +5,15 @@ echo local modname="hakchi" local modpath="/$modname" local mountpoint="/newroot" -local installpath -local firmwarepath -local rootfs -local preinit -local preinitpath -local gamepath +local installpath="" +local firmwarepath="" +local rootfs="" +local squashfs="" +local preinit="" +local preinitpath="" +local sftype="" +local sfregion="" +local gamepath="" local temppath="/tmp" mkdir -p "$temppath" diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/chmenu b/mods/mod_hakchi/hakchi/rootfs/bin/chmenu index 5dff8aa1..8d0a6fdd 100644..100755 --- a/mods/mod_hakchi/hakchi/rootfs/bin/chmenu +++ b/mods/mod_hakchi/hakchi/rootfs/bin/chmenu @@ -2,24 +2,23 @@ source /etc/preinit script_init -state_file=$installpath/menu -flag=/var/startmpc.flag +state_file="$installpath/menu" [ -z "$1" ] && exit 1 -[ -f "$state_file" ] && prev_code=$(cat "$state_file") || prev_code=000 +[ -f "$state_file" ] && prev_code="$(cat "$state_file")" || prev_code="000" [ "$1" == "$prev_code" ] && exit 1 -echo Switching to menu $1 +echo "Switching to menu $1" if [ "$1" == "000" ]; then - targetpath=$rootfs$gamepath + targetpath="$rootfs$gamepath" else - targetpath=$rootfs$gamepath/$1 + targetpath="$rootfs$gamepath/$1" fi [ -d "$targetpath" ] || exit 1 -echo $1 > "$state_file" +echo "$1" > "$state_file" -echo New directory: $targetpath +echo "New directory: $targetpath" if [ "$1" != "000" ]; then if [ -f "$rootfs$gamepath/title.fnt" ] && [ ! -f "$targetpath/title.fnt" ]; then @@ -30,9 +29,7 @@ if [ "$1" != "000" ]; then fi fi -pkill -KILL ReedPlayer-Clover -pkill -KILL clover-mcp - +uistop overmount_games -touch "$flag" +touch "/var/startmpc.flag" diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/clover-canoe-shvc-wr b/mods/mod_hakchi/hakchi/rootfs/bin/clover-canoe-shvc-wr index eaf903db..0c76842f 100644..100755 --- a/mods/mod_hakchi/hakchi/rootfs/bin/clover-canoe-shvc-wr +++ b/mods/mod_hakchi/hakchi/rootfs/bin/clover-canoe-shvc-wr @@ -11,16 +11,16 @@ options="" while [ $# -gt 0 ] ; do case "$1" in -rom) - filename=$2 - filebase=$(basename "$filename") + filename="$(readlink -f "$2")" + filebase="$(basename "$filename")" extension="${filebase##*.}" - tmppath=/tmp/rom + tmppath="$temppath/rom" if [ "$extension" == "7z" ]; then - mkdir -p $tmppath - rm -rf $tmppath/* - cd $tmppath - tiny7zx x $filename - filename=$tmppath/$(ls) + rm -rf "$tmppath" + mkdir -p "$tmppath" + cd "$tmppath" + tiny7zx x "$filename" + filename="$tmppath/$(ls)" fi options="-rom $filename" shift @@ -31,5 +31,4 @@ while [ $# -gt 0 ] ; do done args="$options $cfg_snes_extra_args" - exec /usr/bin/clover-canoe-shvc $args diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/clover-kachikachi-wr b/mods/mod_hakchi/hakchi/rootfs/bin/clover-kachikachi-wr index a3bed783..5160d727 100644..100755 --- a/mods/mod_hakchi/hakchi/rootfs/bin/clover-kachikachi-wr +++ b/mods/mod_hakchi/hakchi/rootfs/bin/clover-kachikachi-wr @@ -7,22 +7,22 @@ source /etc/preinit script_init -filename=$1 -filebase=$(basename "$filename") +filename="$(readlink -f "$1")" +filebase="$(basename "$filename")" extension="${filebase##*.}" -tmppath=/tmp/rom +tmppath="$temppath/rom" if [ "$extension" == "7z" ]; then - mkdir -p $tmppath - rm -rf $tmppath/* - cd $tmppath - tiny7zx x $filename - filename=$tmppath/$(ls) + rm -rf "$tmppath" + mkdir -p "$tmppath" + cd "$tmppath" + tiny7zx x "$filename" + filename="$tmppath/$(ls)" fi if [ "$extension" == "gz" ]; then - mkdir -p $tmppath - rm -rf $tmppath/* - gunzip -c > $tmppath/$filebase - filename=$tmppath/$filebase + rm -rf "$tmppath" + mkdir -p "$tmppath" + gunzip -c > "$tmppath/$filebase" + filename="$tmppath/$filebase" fi shift diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/gameover b/mods/mod_hakchi/hakchi/rootfs/bin/gameover new file mode 100755 index 00000000..4f824211 --- /dev/null +++ b/mods/mod_hakchi/hakchi/rootfs/bin/gameover @@ -0,0 +1,2 @@ +#!/bin/sh +exec hakchi "$(basename "$0")" ${1+"$@"} diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/hakchi b/mods/mod_hakchi/hakchi/rootfs/bin/hakchi new file mode 100755 index 00000000..e3493b82 --- /dev/null +++ b/mods/mod_hakchi/hakchi/rootfs/bin/hakchi @@ -0,0 +1,15 @@ +#!/bin/sh +source /etc/preinit +script_init + +hakchi(){ + [ "$1" == "hakchi" ] && shift + if type "$1" | grep -q '^.* is a shell function$' 2>/dev/null; then + ${1+"$@"} + else + echo "no such function: $@" + return 1 + fi +} + +hakchi "$(basename "$0")" ${1+"$@"} diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/hsqs b/mods/mod_hakchi/hakchi/rootfs/bin/hsqs new file mode 100755 index 00000000..0b1d9d2d --- /dev/null +++ b/mods/mod_hakchi/hakchi/rootfs/bin/hsqs @@ -0,0 +1,22 @@ +#!/bin/sh +source /etc/preinit +script_init + +echo "current firmware: $(currentFirmware)" +printSoftwareInfo + +firmware="$1" +if [ "$firmware" != "_nand_" ]; then + firmware="$(readlink -f "$1")" + checkFirmware "$firmware" || exit 1 +fi + +[ "$cfg_firmware" == "$firmware" ] && exit 0 +cfg_firmware="$firmware" +save_config + +[ "$(currentFirmware)" == "$firmware" ] && exit 0 + +echo "changing firmware to: $firmware" +reboot +exit 0 diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/remote-exec b/mods/mod_hakchi/hakchi/rootfs/bin/remote-exec index 67789578..32977e64 100644..100755 --- a/mods/mod_hakchi/hakchi/rootfs/bin/remote-exec +++ b/mods/mod_hakchi/hakchi/rootfs/bin/remote-exec @@ -1,16 +1,15 @@ #!/bin/sh -mpc_flag=/var/startmpc.flag -exec_flag=/var/exec.flag +mpc_flag="/var/startmpc.flag" +exec_flag="/var/exec.flag" while [ true ]; do - #sleep 1 if [ -f "$mpc_flag" ]; then echo Restart! + rm "$mpc_flag" /etc/init.d/S81clover-mcp start - rm $mpc_flag fi if [ -f "$exec_flag" ]; then - cmd=$(cat "$exec_flag") - rm $exec_flag + cmd="$(cat "$exec_flag")" + rm "$exec_flag" $cmd fi usleep 200000 diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/test-menu b/mods/mod_hakchi/hakchi/rootfs/bin/test-menu new file mode 100755 index 00000000..d22b60b1 --- /dev/null +++ b/mods/mod_hakchi/hakchi/rootfs/bin/test-menu @@ -0,0 +1,4 @@ +#!/bin/sh +uistop 1>/dev/null 2>&1 +/opt/test/bin/test-menu </dev/null +uistart diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/uistart b/mods/mod_hakchi/hakchi/rootfs/bin/uistart new file mode 100755 index 00000000..4f824211 --- /dev/null +++ b/mods/mod_hakchi/hakchi/rootfs/bin/uistart @@ -0,0 +1,2 @@ +#!/bin/sh +exec hakchi "$(basename "$0")" ${1+"$@"} diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/uistop b/mods/mod_hakchi/hakchi/rootfs/bin/uistop new file mode 100755 index 00000000..4f824211 --- /dev/null +++ b/mods/mod_hakchi/hakchi/rootfs/bin/uistop @@ -0,0 +1,2 @@ +#!/bin/sh +exec hakchi "$(basename "$0")" ${1+"$@"} diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/usleep b/mods/mod_hakchi/hakchi/rootfs/bin/usleep Binary files differdeleted file mode 100644 index 5ae85b68..00000000 --- a/mods/mod_hakchi/hakchi/rootfs/bin/usleep +++ /dev/null diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S78clvcon b/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S78clvcon index 9b47abc4..9b47abc4 100644..100755 --- a/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S78clvcon +++ b/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S78clvcon diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S82remote-exec b/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S82remote-exec index 65395aaa..65395aaa 100644..100755 --- a/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S82remote-exec +++ b/mods/mod_hakchi/hakchi/rootfs/etc/init.d/S82remote-exec diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit b/mods/mod_hakchi/hakchi/rootfs/etc/preinit index a0452250..1a4eab63 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit @@ -3,11 +3,11 @@ rand(){ } source_parts(){ - [ -z "$temppath" ] && local temppath=/tmp + [ -z "$temppath" ] && temppath="/tmp" mkdir -p "$temppath" - local script=$temppath/script_$(rand) + local script="$temppath/script_$(rand)" rm -f "$script" - local searchpath=$(dirname "$1") + local searchpath="$(dirname "$1")" [ -d "$searchpath" ] || return 1 for i in $(find "$searchpath" -maxdepth 1 -path "$1" | sort); do cat "$i" >> "$script" diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines index 47c72734..3aeee77c 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines @@ -1,12 +1,15 @@ -set_gamepath(){ +setGamepath(){ + sftype="nes" + sfregion="usa" + [ "$(cat "$mountpoint/etc/clover/boardtype")" == "dp-shvc" ] && sftype="snes" + [ "$(cat "$mountpoint/etc/clover/REGION")" == "JPN" ] && sfregion="jpn" + local feck="$mountpoint/var/lib/clover/profiles/0/home-menu/save/system-save.json" - if [ -f "$mountpoint/etc/clover/version/canoe" ]; then -# echo "SNES gamepath" + if [ "$sftype" == "snes" ]; then gamepath="/usr/share/games" [ -f "$feck" ] && mv -f "$feck" "$feck.nes" [ -d "$feck.snes" ] && rm -rf "$feck" && mv "$feck.snes" "$feck" else -# echo "NES gamepath" gamepath="/usr/share/games/nes/kachikachi" [ -d "$feck" ] && rm -rf "$feck.snes" && mv "$feck" "$feck.snes" [ -f "$feck.nes" ] && mv -f "$feck.nes" "$feck" @@ -19,9 +22,12 @@ modpath="/$modname" installpath="$mountpoint/var/lib/$modname" firmwarepath="$installpath/firmware" rootfs="$installpath/rootfs" +squashfs="$installpath/squashfs" preinit="$rootfs/etc/preinit" preinitpath="$preinit.d" +sftype="" +sfregion="" gamepath="" -set_gamepath temppath="/tmp" +setGamepath diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions index 2689c24e..02febfa3 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions @@ -1,11 +1,30 @@ +squashDevice(){ + echo "$(mount | grep -F squashfs | head -n1 | awk '{print $1;}')" +} + +umountSquash(){ + mountpoint -q "$squashfs" && umount "$squashfs" +} + +mountSquash(){ + [ -d "$(dirname "$squashfs")" ] || return 1 + umountSquash + mkdir -p "$squashfs" + local sdev="$(squashDevice)" + [ -z "$sdev" ] && return 1 + mount -o ro,noatime "$sdev" "$squashfs" +} + mount_base(){ mount -t tmpfs -o mode=0755,nosuid,nodev tmpfs "$mountpoint/var" mkdir -p "$mountpoint/var/lib" mount -o defaults,nosuid,nodev,noatime /dev/nandc "$mountpoint/var/lib" + mountSquash } umount_base(){ sync + umountSquash umount "$mountpoint/var/lib" umount "$mountpoint/var" } @@ -20,7 +39,7 @@ remove_old(){ mod_repair_etc(){ remove_old "$rootfs" rm -f "$modpath/rootfs/etc/preinit.d/p0000_config" - chown -R 0:0 $modpath/ + chown -R 0:0 "$modpath/" local etc="$temppath/etc" rm -rf "$etc" @@ -39,38 +58,63 @@ mod_repair_modules(){ } remount_root(){ - [ -z "$(mount | grep -F loop)" ] || return 1 - - local tmpmount=$modpath/var.tmp + local tmpmount="/var" mkdir -p "$tmpmount" mount --move "$mountpoint/var" "$tmpmount" umount "$mountpoint" - local loopfile=$tmpmount${1##$mountpoint/var} - mount -o loop,ro "$loopfile" "$mountpoint" || shutdown + local loopfile="$tmpmount${1##$mountpoint/var}" + mount -o loop,ro,noatime "$loopfile" "$mountpoint" || shutdown mount --move "$tmpmount" "$mountpoint/var" } +checkFirmware(){ + [ -f "$1" ] || return 1 + [ "$(hexdump -e '1/4 "%u"' -s 0 -n 4 "$1")" == "1936814952" ] || return 1 + return 0 +} + +currentFirmware(){ + local firmware="$(losetup | awk '{print $3'})" + if ! [ -z "$firmware" ]; then + echo "$firmware" + return 0 + fi + if [ -b /dev/mapper/root-crypt ]; then + echo "_nand_" + return 0 + fi + return 1 +} + load_firmware(){ - [ -d "$firmwarepath" ] || return 0 - local firmware=$(find "$firmwarepath" -type f -name "*.hsqs" | sort | head -n 1) - [ -f "$firmware" ] || return 0 + [ -z "$(mount | grep -F loop0)" ] || return 1 + + local firmware="$mountpoint$cfg_firmware" + if ! checkFirmware "$firmware"; then + [ -d "$firmwarepath" ] || return 0 + firmware="$(find "$firmwarepath" -type f -name "*.hsqs" | sort | head -n 1)" + fi + checkFirmware "$firmware" || return 0 + mod_repair_modules - remount_root "$firmware" || return 0 + umountSquash + remount_root "$firmware" cryptsetup close root-crypt - mod_repair_etc - if [ -d "$rootfs/lib/modules/$(uname -r)" ]; then - overmount "/lib/modules" - else - echo "no modules for loaded kernel $(uname -r)" + mountSquash + if [ ! -d "$mountpoint/lib/modules/$(uname -r)" ]; then + if [ -d "$rootfs/lib/modules/$(uname -r)" ]; then + overmount "/lib/modules" + else + echo "no modules for loaded kernel $(uname -r)" + fi fi - set_gamepath } shutdown(){ - echo shutting down... + echo "shutting down..." echo sync umount -a -r 2>/dev/null @@ -78,6 +122,15 @@ shutdown(){ while :;do sleep 1;:;done } +reboot(){ + echo "rebooting..." + echo + sync + umount -a -r 2>/dev/null + /bin/reboot -f + while :;do sleep 1;:;done +} + early_getty(){ cd "$modpath/transfer" getty -ni 115200 ttyS0 -l /bin/sh @@ -86,20 +139,24 @@ early_getty(){ copy(){ # we must create target directory - local dirname=$(dirname "$2") + local dirname="$(dirname "$2")" mkdir -p "$dirname" rsync -ac "$1" "$2" } copy_mask(){ # this function is unsafe, avoid spaces in filenames! - local dirname=$(dirname "$2") + local dirname="$(dirname "$2")" mkdir -p "$dirname" rsync -ac $1 "$2" } restore(){ - copy "$mountpoint$1" "$rootfs$1" + if mountpoint -q "$squashfs" && [ -e "$squashfs$1" ]; then + copy "$squashfs$1" "$rootfs$1" + else + copy "$mountpoint$1" "$rootfs$1" + fi } mount_bind(){ @@ -111,25 +168,60 @@ mount_bind(){ overmount(){ if [ "$#" == "1" ]; then - echo overmounting $1 + echo "overmounting $1" mount_bind "$rootfs$1" "$mountpoint$1" && return 0 fi if [ "$#" == "2" ]; then - echo overmounting $1 on $2 + echo "overmounting $1 on $2" mount_bind "$rootfs$1" "$mountpoint$2" && return 0 fi - echo overmounting failed + echo "overmounting failed" + return 1 +} + +containsGames(){ + [ -d "$1" ] || return 1 + [ -z "$(cd "$1";ls CLV-* 2>/dev/null)" ] && return 1 + return 0 } overmount_games(){ - local menu_code=000 - [ -f "$installpath/menu" ] && menu_code=$(cat "$installpath/menu") - [ -z "$menu_code" ] && menu_code=000 - echo menu code: $menu_code + local menu_code="000" + [ -f "$installpath/menu" ] && menu_code="$(cat "$installpath/menu")" + [ -z "$menu_code" ] && menu_code="000" + echo "menu code: $menu_code" if [ "$menu_code" != "000" ]; then - if [ -d "$rootfs$gamepath/$menu_code" ]; then + if containsGames "$rootfs$gamepath/$menu_code"; then overmount "$gamepath/$menu_code" "$gamepath" && return 0 + else + echo "no romz found at: $rootfs$gamepath/$menu_code" fi fi - overmount "$gamepath" + if containsGames "$rootfs$gamepath"; then + overmount "$gamepath" && return 0 + fi + echo "no romz found at: $rootfs$gamepath" + return 1 +} + +uistop(){ + killall -9 clover-mcp + killall -9 ReedPlayer-Clover + killall kachikachi + killall canoe-shvc + killall retroarch +} + +uistart(){ + uistop 1>/dev/null 2>&1 + /etc/init.d/S81clover-mcp start +} + +gameover(){ + poweroff +} + +printSoftwareInfo(){ + echo "software=$sftype" + echo "region=$sfregion" } diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0020_backup b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0020_backup new file mode 100644 index 00000000..8377e1d7 --- /dev/null +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0020_backup @@ -0,0 +1,60 @@ +backup_one(){ + [ ! -f "$backuppath/$1.gz" ] || return 0 + echo "backup $1" + dd "if=/dev/$1" bs=128K | gzip > "$backuppath/$1.gz" +} + +backup_nandb(){ + [ -b /dev/mapper/root-crypt ] || return 1 + mkdir -p "$backuppath" || return 1 + cd "$mountpoint/etc/clover" || return 1 + local nandb_filename="$(cat boardtype)-$(cat VERSION)-$(cat REGION).hsqs" + nandb_filename="$(echo "$nandb_filename" | tr '[:upper:]' '[:lower:]')" + cd "$backuppath" || return 1 + if [ ! -f "$nandb_filename" ]; then + echo "backup $nandb_filename" + dd if=/dev/mapper/root-crypt bs=4k \ + count=$((($(hexdump -e '1/4 "%u"' -s $((0x28)) -n 4 /dev/mapper/root-crypt)+0xfff)/0x1000)) \ + > "$nandb_filename" && \ + md5sum "$nandb_filename" > "$nandb_filename.md5" + fi +} + +backup_nandc(){ + [ "$cf_backup_nandc" == "y" ] || return 0 + local backuppath="$installpath/backup" + [ ! -f "$backuppath/nandc.gz" ] || return 0 + backuppath="$modpath" + backup_one nandc +} + +backup(){ + local backuppath="$installpath/backup" + if [ -f "$modpath/nandc.gz" ]; then + echo "move nandc" + mkdir -p "$backuppath" + mv "$modpath/nandc.gz" "$backuppath/" + fi + [ "$cf_backup" == "y" ] || return 0 + backup_nandb + cd / + [ "$cf_backup_dummy" == "y" ] || return 0 + backup_one nanda + backup_one nandd + backup_one nande +} + +dumpFirmware(){ + if [ -z "$1" ]; then + echo "specify path" + return 1 + fi + local backuppath="$1" + if backup_nandb; then + cd / + return 0 + fi + echo "whoopsie" + cd / + return 1 +} diff --git a/mods/mod_hakchi/hakchi/script/package b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0030_package index 68396efc..3c3894f3 100644 --- a/mods/mod_hakchi/hakchi/script/package +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0030_package @@ -17,13 +17,15 @@ transfer_default(){ } transfer_path(){ - local transferpath=$1 + local transferpath="$1" chown -R 0:0 "$transferpath/" find "$transferpath/" -maxdepth 1 -type f -iname "readme.*" -delete find "$transferpath/" -maxdepth 1 -type f -iname "*.txt" -delete find "$transferpath/" -maxdepth 1 -type f -iname "*.md" -delete local docopy=y cd "$transferpath" + [ -d "./bin" ] && chmod 755 ./bin/* + [ -d "./etc/init.d" ] && chmod 755 ./etc/init.d/* transfer_file "$transferpath/install" || docopy=n cd "$transferpath" transfer_file "$transferpath/transfer" || docopy=n @@ -31,21 +33,21 @@ transfer_path(){ } pack_upath(){ - echo $installpath/hmod/uninstall-$(basename "$1" .hmod) + echo "$installpath/hmod/uninstall-$(basename "$1" .hmod)" } pack_install(){ - echo installing $(basename "$1" .hmod)... + echo "installing $(basename "$1" .hmod)..." if [ -f "$1" ]; then - local transferpath=$temppath/pack + local transferpath="$temppath/pack" rm -rf "$transferpath" mkdir -p "$transferpath" cd "$transferpath" && tar -xzf "$1" else - local transferpath=$1 + local transferpath="$1" fi transfer_path "$transferpath" - echo creating uninstall for $(basename "$1" .hmod)... + echo "creating uninstall for $(basename "$1" .hmod)..." echo >> "$transferpath/uninstall" echo "# auto-generated" >> "$transferpath/uninstall" cd "$transferpath" @@ -54,7 +56,7 @@ pack_install(){ find . -depth -mindepth 1 -type d -exec echo rmdir \"\$rootfs/{}\" + >> "$transferpath/uninstall" [ $(stat -c%s "$transferpath/uninstall") -gt 8 ] || rm -f "$transferpath/uninstall" cd / - local unfile=$(pack_upath "$1") + local unfile="$(pack_upath "$1")" if [ -f "$transferpath/uninstall" ]; then dos2unix -u "$transferpath/uninstall" sed -i "s#rmdir #rmdir --ignore-fail-on-non-empty #" "$transferpath/uninstall" @@ -63,23 +65,29 @@ pack_install(){ else rm -f "$unfile" fi - echo package $(basename "$1" .hmod) installed + echo "package $(basename "$1" .hmod) installed" +} + +pack_list(){ + if [ -d "$installpath/hmod" ]; then + for i in $(find "$installpath/hmod/" -maxdepth 1 -type f -name "uninstall-*" | sort); do + echo "${i##$installpath/hmod/uninstall-}" + done + fi } pack_uninstall(){ if [ "$1" == "all" ]; then - if [ -d "$installpath/hmod" ]; then - for i in $(find "$installpath/hmod/" -maxdepth 1 -type f -name "uninstall-*" | sort); do - pack_uninstall "$i" - done - fi + for i in $(pack_list); do + pack_uninstall "$i" + done else - local unfile=$(pack_upath "$1") + local unfile="$(pack_upath "$1")" if [ -f "$unfile" ]; then - echo uninstalling $(basename "$1" .hmod)... + echo "uninstalling $(basename "$1" .hmod)..." cd "$rootfs" transfer_file "$unfile" - echo package $(basename "$1" .hmod) uninstalled + echo "package $(basename "$1" .hmod) uninstalled" fi fi cd / diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config index 68e938f6..2130e4ea 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config @@ -1,4 +1,4 @@ -cfg_boot_stock_firmware='n' cfg_boot_stock='n' cfg_disable_armet='y' +cfg_firmware='auto' cfg_nes_extra_args='--ppu-palette 2' diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7000_preinit b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7000_preinit index 6fb17938..18d36b22 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7000_preinit +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7000_preinit @@ -5,5 +5,5 @@ if [ "$cfg_boot_stock" == "y" ]; then umount_base 2>/dev/null return 0 else - echo loading $modname + echo "loading $modname" fi diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware index 43d756fd..28d28566 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware @@ -1 +1,3 @@ -[ "$cfg_boot_stock_firmware" == "y" ] || load_firmware +[ "$cfg_firmware" == "_nand_" ] || load_firmware +mod_repair_etc +setGamepath diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7080_hmods b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7080_hmods new file mode 100644 index 00000000..ca3b93df --- /dev/null +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7080_hmods @@ -0,0 +1,28 @@ +local transferpath="$installpath/transfer" +if [ -d "$transferpath" ]; then + cd "$transferpath" + [ -f "$transferpath/earlybird" ] && source "$transferpath/earlybird" + rm -f "$transferpath/earlybird" + + [ -f "$transferpath/uninstall" ] && packs_uninstall $(cat "$transferpath/uninstall") + rm -f "$transferpath/uninstall" + + [ -f "$transferpath/hmod/uninstall" ] && packs_uninstall $(cat "$transferpath/hmod/uninstall") + rm -f "$transferpath/hmod/uninstall" + + packs_install "$transferpath" + + if [ -d "$transferpath/hmod" ]; then + packs_install "$transferpath/hmod" + rm -rf "$transferpath/hmod" + fi + + echo "transferring data..." + transfer_path "$transferpath" + echo + cd / + rm -rf "$transferpath" + save_config + reboot +fi +unset transferpath diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/pa100_games b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/pa100_games index 73cf7716..d0df2442 100644 --- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/pa100_games +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/pa100_games @@ -1,5 +1 @@ -if [ -z "$(ls $rootfs$gamepath/CLV-* 2>/dev/null)" ]; then - echo "no romz found" -else - overmount_games -fi +overmount_games diff --git a/mods/mod_hakchi/hakchi/script/backup b/mods/mod_hakchi/hakchi/script/backup deleted file mode 100644 index 55f89ef8..00000000 --- a/mods/mod_hakchi/hakchi/script/backup +++ /dev/null @@ -1,36 +0,0 @@ -backup_one(){ - [ ! -f "$backuppath/$1.gz" ] || return 0 - echo backup $1 - dd if=/dev/$1 bs=128K | gzip > "$backuppath/$1.gz" -} - -backup_nandc(){ - [ "$cf_backup_nandc" == "y" ] || return 0 - local backuppath=$installpath/backup - [ ! -f "$backuppath/nandc.gz" ] || return 0 - backuppath=$modpath - backup_one nandc -} - -backup(){ - local backuppath=$installpath/backup - if [ -f "$modpath/nandc.gz" ]; then - echo move nandc - mkdir -p "$backuppath" - mv "$modpath/nandc.gz" "$backuppath/" - fi - [ "$cf_backup" == "y" ] || return 0 - mkdir -p "$backuppath" - local nandb_filename=$(cat $mountpoint/etc/clover/boardtype)-$(cat $mountpoint/etc/clover/VERSION).hsqs - if [ ! -f "$backuppath/$nandb_filename" ]; then - echo backup $nandb_filename - dd if=/dev/mapper/root-crypt bs=4k \ - count=$((($(hexdump -e '1/4 "%u"' -s $((0x28)) -n 4 /dev/mapper/root-crypt)+0xfff)/0x1000)) \ - > "$backuppath/$nandb_filename" - md5sum "$backuppath/$nandb_filename" > "$backuppath/$nandb_filename.md5" - fi - [ "$cf_backup_dummy" == "y" ] || return 0 - backup_one nanda - backup_one nandd - backup_one nande -} diff --git a/mods/mod_hakchi/hakchi/script/install b/mods/mod_hakchi/hakchi/script/install index fdd3df92..9ca6806e 100644 --- a/mods/mod_hakchi/hakchi/script/install +++ b/mods/mod_hakchi/hakchi/script/install @@ -1,24 +1,24 @@ mod_uninstall(){ - echo uninstalling $modname... + echo "uninstalling $modname..." rm -rf "$installpath" - echo done. + echo "done." shutdown } mod_repair(){ mod_repair_etc full - chmod 755 $modpath/rootfs/bin/* - chmod 755 $modpath/rootfs/etc/init.d/* + cd "$modpath/rootfs/bin" && chmod 755 * + cd "$modpath/rootfs/etc/init.d" && chmod 755 * + cd / copy "/bin/" "$rootfs/bin/" copy "/sbin/cryptsetup" "$rootfs/bin/cryptsetup" copy "$modpath/rootfs/" "$rootfs/" } mod_install(){ - echo installing $modname... + echo "installing $modname..." rm -rf "$rootfs" restore "/bin/" restore "/etc/" - restore "$gamepath/" mod_repair } diff --git a/mods/mod_hakchi/hakchi/script/reflash b/mods/mod_hakchi/hakchi/script/reflash new file mode 100644 index 00000000..a7beaefb --- /dev/null +++ b/mods/mod_hakchi/hakchi/script/reflash @@ -0,0 +1,27 @@ +local firmware="$(find -type f -name "*.hsqs" | sort | head -n 1)" +if [ -f "$firmware" ]; then + umount_base + umount "$mountpoint" + + cryptsetup close root-crypt + cryptsetup open /dev/nandb root-crypt --type plain --cipher aes-xts-plain --key-file /key-file + + dd if=/dev/zero of=/dev/mapper/root-crypt bs=512 "seek=$(($(stat -c%s "$firmware")/512))" + dd "if=$firmware" of=/dev/mapper/root-crypt bs=512 + + cryptsetup close root-crypt + cryptsetup open /dev/nandb root-crypt --readonly --type plain --cipher aes-xts-plain --key-file /key-file + + mount -o ro,noatime /dev/mapper/root-crypt "$mountpoint" + + local tmk="$(pwd)/mkfs.txz" + if [ -f "$tmk"]; then + cd / && tar xJf "$tmk" + mount_bind "$mountpoint/lib" "/lib" +# /sbin/mkfs.ext4 -L data -m 0 /dev/nandc + mkfs.ext2 -L data -m 0 /dev/nandc + umount "/lib" + fi + + mount_base +fi diff --git a/mods/mod_hakchi/hakchi/script/transfer b/mods/mod_hakchi/hakchi/script/transfer index 0ec983c7..237d2c42 100644 --- a/mods/mod_hakchi/hakchi/script/transfer +++ b/mods/mod_hakchi/hakchi/script/transfer @@ -1,7 +1,4 @@ -source "$modpath/script/backup" source "$modpath/script/install" -source "$modpath/script/package" -source "$modpath/script/games" backup_nandc mount_base @@ -11,17 +8,26 @@ source_config local transferpath="$modpath/transfer" +cd "$transferpath" + [ -f "$transferpath/earlybird" ] && source "$transferpath/earlybird" rm -f "$transferpath/earlybird" +if [ -d "$transferpath/reflash" ]; then + cd "$transferpath/reflash" + source "$modpath/script/reflash" + cd "$transferpath" + rm -rf "$transferpath/reflash" +fi + # transfer firmware, if any if [ -d "$transferpath/firmware" ]; then - local firmware=$(find "$transferpath/firmware" -type f -name "*.hsqs" | sort | head -n 1) + local firmware="$(find "$transferpath/firmware" -type f -name "*.hsqs" | sort | head -n 1)" if [ -f "$firmware" ]; then mkdir -p "$firmwarepath" - local firmware_name=$(basename "$firmware") + local firmware_name="$(basename "$firmware")" find "$firmwarepath" -type f -not -name "$firmware_name" -delete - echo transferring firmware... + echo "transferring firmware..." copy "$firmware" "$firmwarepath/" fi rm -rf "$transferpath/firmware" @@ -32,7 +38,7 @@ source_parts "$modpath/rootfs/etc/preinit.d/p????_*firmware*" # now we can do install/repair if [ -f "$preinit" ]; then - echo $modname already installed + echo "$modname already installed" mod_repair else mod_install @@ -50,12 +56,15 @@ if [ -d "$transferpath/hmod" ]; then fi if [ -d "$transferpath/games" ]; then + source "$modpath/script/games" transfer_games "$transferpath/games" rm -rf "$transferpath/games" fi -echo transferring data... +echo "transferring data..." transfer_path "$transferpath" +echo save_config [ "$cf_shutdown" != "y" ] || shutdown +echo diff --git a/mods/mod_hakchi/sbin/init b/mods/mod_hakchi/sbin/init index 52cc5fa1..52cc5fa1 100644..100755 --- a/mods/mod_hakchi/sbin/init +++ b/mods/mod_hakchi/sbin/init diff --git a/mods/mod_uninstall/bin/busybox b/mods/mod_uninstall/bin/busybox Binary files differindex e71f5823..e71f5823 100644..100755 --- a/mods/mod_uninstall/bin/busybox +++ b/mods/mod_uninstall/bin/busybox diff --git a/mods/mod_uninstall/sbin/init b/mods/mod_uninstall/sbin/init index 52cc5fa1..52cc5fa1 100644..100755 --- a/mods/mod_uninstall/sbin/init +++ b/mods/mod_uninstall/sbin/init |