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/mod_hakchi/hakchi/rootfs/etc/preinit.d | |
parent | afb1d8a8b5fde2e4d49ad9c42e29d64f65074718 (diff) |
update scripts
Diffstat (limited to 'mods/mod_hakchi/hakchi/rootfs/etc/preinit.d')
9 files changed, 335 insertions, 42 deletions
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/rootfs/etc/preinit.d/b0030_package b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0030_package new file mode 100644 index 00000000..3c3894f3 --- /dev/null +++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0030_package @@ -0,0 +1,109 @@ +transfer_file(){ + [ -f "$1" ] || return 0 + dos2unix -u "$1" + source "$1" + local res=$? + rm -f "$1" + return $res +} + +transfer_default(){ + rsync -ac \ + --exclude "/install" \ + --exclude "/transfer" \ + --exclude "/uninstall" \ + --exclude "*.hmod" \ + "$transferpath/" "$rootfs/" +} + +transfer_path(){ + 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 + [ "$docopy" == "y" ] && transfer_default +} + +pack_upath(){ + echo "$installpath/hmod/uninstall-$(basename "$1" .hmod)" +} + +pack_install(){ + echo "installing $(basename "$1" .hmod)..." + if [ -f "$1" ]; then + local transferpath="$temppath/pack" + rm -rf "$transferpath" + mkdir -p "$transferpath" + cd "$transferpath" && tar -xzf "$1" + else + local transferpath="$1" + fi + transfer_path "$transferpath" + echo "creating uninstall for $(basename "$1" .hmod)..." + echo >> "$transferpath/uninstall" + echo "# auto-generated" >> "$transferpath/uninstall" + cd "$transferpath" + find . -type l -exec echo rm -f \"\$rootfs/{}\" + >> "$transferpath/uninstall" + find . -type f -exec echo rm -f \"\$rootfs/{}\" + >> "$transferpath/uninstall" + 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")" + if [ -f "$transferpath/uninstall" ]; then + dos2unix -u "$transferpath/uninstall" + sed -i "s#rmdir #rmdir --ignore-fail-on-non-empty #" "$transferpath/uninstall" + mkdir -p "$installpath/hmod" + copy "$transferpath/uninstall" "$unfile" + else + rm -f "$unfile" + fi + 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 + for i in $(pack_list); do + pack_uninstall "$i" + done + else + local unfile="$(pack_upath "$1")" + if [ -f "$unfile" ]; then + echo "uninstalling $(basename "$1" .hmod)..." + cd "$rootfs" + transfer_file "$unfile" + echo "package $(basename "$1" .hmod) uninstalled" + fi + fi + cd / + rmdir --ignore-fail-on-non-empty "$installpath/hmod" +} + +packs_install(){ + [ -d "$1" ] || return 1 + for i in $(find "$1" -maxdepth 1 -name "*.hmod" | sort); do + pack_install "$i" + rm -rf "$i" + done +} + +packs_uninstall(){ + for i in $@; do + pack_uninstall "$i" + done +} 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 |