Testing eudev

This commit is contained in:
Fabio Belavenuto 2022-07-13 21:17:17 -03:00
parent 917075511a
commit e619af4735
41 changed files with 77 additions and 263 deletions

View File

@ -19,7 +19,7 @@ dd if="/dev/zero" of="${IMAGE_FILE}" bs=1M count=300 conv=sync 2>/dev/null
# Copy grub stage1 to image # Copy grub stage1 to image
dd if="${BOARD_PATH}/grub.bin" of="${IMAGE_FILE}" conv=notrunc,sync 2>/dev/null dd if="${BOARD_PATH}/grub.bin" of="${IMAGE_FILE}" conv=notrunc,sync 2>/dev/null
# Create partitions on image # Create partitions on image
echo -e "n\np\n\n\n+100M\nt\n\n0b\nn\np\n\n\n+100M\nn\np\n\n\n\nw" | fdisk "${IMAGE_FILE}" >/dev/null echo -e "n\np\n\n\n+150M\nt\n\n0b\nn\np\n\n\n+50M\nn\np\n\n\n\nw" | fdisk "${IMAGE_FILE}" >/dev/null
# Force umount, ignore errors # Force umount, ignore errors
sudo umount "${BINARIES_DIR}/p1" 2>/dev/null || true sudo umount "${BINARIES_DIR}/p1" 2>/dev/null || true

View File

@ -14,17 +14,6 @@ fi
# Get actual IP # Get actual IP
IP=`ip route get 1.1.1.1 2>/dev/null | awk '{print$7}'` IP=`ip route get 1.1.1.1 2>/dev/null | awk '{print$7}'`
# Define classes for hw detection
declare -A CLASSES
CLASSES["0100"]="SCSI"
CLASSES["0106"]="SATA"
CLASSES["0101"]="IDE"
CLASSES["0107"]="SAS"
CLASSES["0200"]="Ethernet"
CLASSES["0300"]="VGA"
CLASSES["0c03"]="USB Controller"
CLASSES["0c04"]="Fiber Channel"
# Dirty flag # Dirty flag
DIRTY=0 DIRTY=0
@ -164,63 +153,6 @@ function serialMenu() {
writeConfigKey "sn" "${SN}" "${USER_CONFIG_FILE}" writeConfigKey "sn" "${SN}" "${USER_CONFIG_FILE}"
} }
###############################################################################
# Detect hardware
function detectHw() {
PLATFORM="`readModelKey "${MODEL}" "platform"`"
KVER="`readModelKey "${MODEL}" "builds.${BUILD}.kver"`"
# Get modules not needed
unset NOTNEEDED
declare -A NOTNEEDED
while read M; do
NOTNEEDED[${M}]="1"
done < <(readModelArray "${MODEL}" "builds.${BUILD}.modules-notneeded")
unset DEVC DEVN
declare -A DEVC
declare -A DEVN
while read L; do
F=` sed -E 's/^([0-9a-z]{2}:[0-9a-z]{2}.[0-9a-z]{1})[^\[]*\[([0-9a-z]{4})\]: (.*)/\1|\2|\3/' <<<"${L}"`
PCI="`cut -d'|' -f1 <<<"${F}"`"
CLASS="`cut -d'|' -f2 <<<"${F}"`"
NAME="`cut -d'|' -f3 <<<"${F}"`"
MODULE="`lspci -ks "${PCI}" | awk '/Kernel driver in use/{print$5}'`"
[ -z "${MODULE}" ] && continue
# If is a virtio module, change id
if grep -q "virtio" <<<"$MODULE"; then
MODULE="virtio"
fi
CLASS=${CLASSES[${CLASS}]} # Get class name of module
[ -z "${CLASS}" ] && continue # If no class, skip
arrayExistItem "${MODULE}" "${!ADDONS[@]}" && continue # Check if module already added
[ -n "${NOTNEEDED[${MODULE}]}" ] && continue # Check if module is not necessary
# Add module to list
DEVC[${MODULE}]="${CLASS}"
DEVN[${MODULE}]="${NAME}"
done < <(lspci -nn)
if [ ${#DEVC[@]} -eq 0 ]; then
dialog --backtitle "`backtitle`" --aspect 18 \
--msgbox "No device detected or already added!" 0 0
return
fi
for MODULE in ${!DEVC[@]}; do
CLASS="${DEVC[${MODULE}]}"
NAME="${DEVN[${MODULE}]}"
TEXT="Found a ${NAME}\nClass ${CLASS}\nModule ${MODULE}\nAccept?"
checkAddonExist "${MODULE}" "${PLATFORM}" "${KVER}" || TEXT+="\n\n\Z1PS: Addon for this module not found\Zn"
dialog --backtitle "`backtitle`" --title "Found Hardware" \
--colors --yesno "${TEXT}" 12 70
[ $? -ne 0 ] && continue
dialog --backtitle "`backtitle`" --title "params" \
--inputbox "Type a opcional params to module" 0 0 \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
VALUE="`<${TMP_PATH}/resp`"
ADDONS["${MODULE}"]="${VALUE}"
writeConfigKey "addons.${MODULE}" "${VALUE}" "${USER_CONFIG_FILE}"
DIRTY=1
done
}
############################################################################### ###############################################################################
# Manage addons/drivers # Manage addons/drivers
function addonMenu() { function addonMenu() {
@ -233,25 +165,19 @@ function addonMenu() {
while IFS="=" read KEY VALUE; do while IFS="=" read KEY VALUE; do
[ -n "${KEY}" ] && ADDONS["${KEY}"]="${VALUE}" [ -n "${KEY}" ] && ADDONS["${KEY}"]="${VALUE}"
done < <(readConfigMap "addons" "${USER_CONFIG_FILE}") done < <(readConfigMap "addons" "${USER_CONFIG_FILE}")
NEXT="h" NEXT="a"
# Loop menu # Loop menu
while true; do while true; do
dialog --backtitle "`backtitle`" --default-item ${NEXT} \ dialog --backtitle "`backtitle`" --default-item ${NEXT} \
--menu "Choose a option" 0 0 0 \ --menu "Choose a option" 0 0 0 \
h "Detect hardware" \
a "Add an addon" \ a "Add an addon" \
d "Delete addon(s)" \ d "Delete addon(s)" \
s "Show user addons" \ s "Show user addons" \
m "Show all available addons" \ m "Show all available addons" \
o "Download an addon" \
e "Exit" \ e "Exit" \
2>${TMP_PATH}/resp 2>${TMP_PATH}/resp
[ $? -ne 0 ] && return [ $? -ne 0 ] && return
case "`<${TMP_PATH}/resp`" in case "`<${TMP_PATH}/resp`" in
h)
detectHw
NEXT='e'
;;
a) NEXT='a' a) NEXT='a'
rm "${TMP_PATH}/menu" rm "${TMP_PATH}/menu"
while read ADDON DESC; do while read ADDON DESC; do
@ -317,32 +243,6 @@ function addonMenu() {
dialog --backtitle "`backtitle`" --title "Available addons" \ dialog --backtitle "`backtitle`" --title "Available addons" \
--colors --msgbox "${MSG}" 0 0 --colors --msgbox "${MSG}" 0 0
;; ;;
o)
TEXT="please enter the complete URL to download.\n"
TEXT+="\Zb(Official addons location: https://github.com/fbelavenuto/arpl-addons/releases)\Zn\n"
TEXT+="Ex: https://github.com/fbelavenuto/arpl-addons/releases/download/v0.2/9p.addon"
dialog --backtitle "`backtitle`" --aspect 18 --colors --inputbox "${TEXT}" 0 0 \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
URL="`<"${TMP_PATH}/resp"`"
[ -z "${URL}" ] && continue
clear
echo "Downloading ${URL}"
curl --insecure -L "${URL}" -o "${TMP_PATH}/addon.tgz" --progress-bar
if [ $? -ne 0 ]; then
dialog --backtitle "`backtitle`" --title "Error downloading" --aspect 18 \
--msgbox "Check internet or cache disk space" 0 0
return 1
fi
ADDON="`untarAddon "${TMP_PATH}/addon.tgz"`"
if [ -n "${ADDON}" ]; then
dialog --backtitle "`backtitle`" --title "Success" --aspect 18 \
--msgbox "Addon '${ADDON}' added to loader" 0 0
else
dialog --backtitle "`backtitle`" --title "Invalid addon" --aspect 18 \
--msgbox "File format not recognized!" 0 0
fi
;;
e) return ;; e) return ;;
esac esac
done done

View File

@ -1,18 +1,4 @@
id: "DS1621+" id: "DS1621+"
modules-notneeded: &modules-notneeded
- ahci
- ata_piix
- amd_xgbe
- marvell10g
- i40e
- r8168
- r8169
- ixgbe
- etxhci_hcd
- xhci_hcd
- ehci-pci
- uhci_hcd
- mv14xx
synoinfo: &synoinfo synoinfo: &synoinfo
support_disk_compatibility: "no" support_disk_compatibility: "no"
support_memory_compatibility: "no" support_memory_compatibility: "no"
@ -50,7 +36,6 @@ builds:
kver: "4.4.180" kver: "4.4.180"
rd-compressed: false rd-compressed: false
efi-bug: no efi-bug: no
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:
@ -70,7 +55,6 @@ builds:
kver: "4.4.180" kver: "4.4.180"
rd-compressed: false rd-compressed: false
efi-bug: no efi-bug: no
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:

View File

@ -1,17 +1,4 @@
id: "DS2422+" id: "DS2422+"
modules-notneeded: &modules-notneeded
- ahci
- ata_piix
- amd_xgbe
- marvell10g
- i40e
- r8168
- ixgbe
- etxhci_hcd
- xhci_hcd
- ehci-pci
- uhci_hcd
- mv14xx
synoinfo: &synoinfo synoinfo: &synoinfo
support_disk_compatibility: "no" support_disk_compatibility: "no"
support_memory_compatibility: "no" support_memory_compatibility: "no"
@ -47,7 +34,6 @@ builds:
kver: "4.4.180" kver: "4.4.180"
rd-compressed: false rd-compressed: false
efi-bug: no efi-bug: no
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:

View File

@ -1,16 +1,4 @@
id: "DS3615xs" id: "DS3615xs"
modules-notneeded: &modules-notneeded
- ahci
- ata_piix
- i40e
- ixgbe
- igb
- e1000e
- dca
- etxhci_hcd
- xhci_hcd
- ehci-pci
- uhci_hcd
synoinfo: &synoinfo synoinfo: &synoinfo
esataportcfg: "0x0" esataportcfg: "0x0"
usbportcfg: "0x8700" usbportcfg: "0x8700"
@ -42,7 +30,6 @@ builds:
kver: "3.10.108" kver: "3.10.108"
rd-compressed: false rd-compressed: false
efi-bug: yes efi-bug: yes
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:
@ -63,7 +50,6 @@ builds:
kver: "3.10.108" kver: "3.10.108"
rd-compressed: false rd-compressed: false
efi-bug: yes efi-bug: yes
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:

View File

@ -1,16 +1,4 @@
id: "DS3617xs" id: "DS3617xs"
modules-notneeded: &modules-notneeded
- ahci
- ata_piix
- i40e
- ixgbe
- igb
- e1000e
- dca
- xhci_pci
- xhci_hcd
- uhci_hcd
- mv14xx
synoinfo: &synoinfo synoinfo: &synoinfo
esataportcfg: "0x00" esataportcfg: "0x00"
usbportcfg: "0x8700" usbportcfg: "0x8700"
@ -46,7 +34,6 @@ builds:
kver: "4.4.180" kver: "4.4.180"
rd-compressed: false rd-compressed: false
efi-bug: no efi-bug: no
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:
@ -67,7 +54,6 @@ builds:
kver: "4.4.180" kver: "4.4.180"
rd-compressed: false rd-compressed: false
efi-bug: no efi-bug: no
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:

View File

@ -1,19 +1,4 @@
id: "DS3622xs+" id: "DS3622xs+"
modules-notneeded: &modules-notneeded
- ahci
- ata_piix
- i40e
- r8168
- r8169
- ixgbe
- igb
- e1000e
- dca
- etxhci_hcd
- xhci_hcd
- ehci-pci
- uhci_hcd
- mv14xx
synoinfo: &synoinfo synoinfo: &synoinfo
esataportcfg: "0x00" esataportcfg: "0x00"
support_bde_internal_10g: "no" support_bde_internal_10g: "no"
@ -53,7 +38,6 @@ builds:
kver: "4.4.180" kver: "4.4.180"
rd-compressed: false rd-compressed: false
efi-bug: no efi-bug: no
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:
@ -74,7 +58,6 @@ builds:
kver: "4.4.180" kver: "4.4.180"
rd-compressed: false rd-compressed: false
efi-bug: no efi-bug: no
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:

View File

@ -1,14 +1,4 @@
id: "DS918+" id: "DS918+"
modules-notneeded: &modules-notneeded
- ahci
- ata_piix
- r8168
- r8169
- igb
- e1000e
- etxhci_hcd
- xhci_hcd
- uhci_hcd
synoinfo: &synoinfo synoinfo: &synoinfo
esataportcfg: "0x00" esataportcfg: "0x00"
support_led_brightness_adjustment: "" support_led_brightness_adjustment: ""
@ -48,7 +38,6 @@ builds:
kver: "4.4.180" kver: "4.4.180"
rd-compressed: false rd-compressed: false
efi-bug: no efi-bug: no
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:
@ -69,7 +58,6 @@ builds:
kver: "4.4.180" kver: "4.4.180"
rd-compressed: false rd-compressed: false
efi-bug: no efi-bug: no
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:

View File

@ -1,12 +1,4 @@
id: "DS920+" id: "DS920+"
modules-notneeded: &modules-notneeded
- ahci
- ata_piix
- r8168
- r8169
- etxhci_hcd
- xhci_hcd
- uhci_hcd
synoinfo: &synoinfo synoinfo: &synoinfo
rss_server: "http://example.com/null.xml" rss_server: "http://example.com/null.xml"
rss_server_ssl: "https://example.com/null.xml" rss_server_ssl: "https://example.com/null.xml"
@ -42,7 +34,6 @@ builds:
kver: "4.4.180" kver: "4.4.180"
rd-compressed: false rd-compressed: false
efi-bug: no efi-bug: no
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:
@ -62,7 +53,6 @@ builds:
kver: "4.4.180" kver: "4.4.180"
rd-compressed: false rd-compressed: false
efi-bug: no efi-bug: no
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:

View File

@ -1,19 +1,4 @@
id: "DVA1622" id: "DVA1622"
modules-notneeded: &modules-notneeded
- ahci
- ata_piix
- r8168
- r8169
- etxhci_hcd
- xhci_hcd
- uhci_hcd
- i915
- drm
- fb
- fbdev
- video
- backlight
- button
synoinfo: &synoinfo synoinfo: &synoinfo
buzzeroffen: "0xffff" buzzeroffen: "0xffff"
rss_server: "http://example.com/null.xml" rss_server: "http://example.com/null.xml"
@ -51,7 +36,6 @@ builds:
kver: "4.4.180" kver: "4.4.180"
rd-compressed: false rd-compressed: false
efi-bug: no efi-bug: no
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:

View File

@ -1,15 +1,4 @@
id: "DVA3221" id: "DVA3221"
modules-notneeded: &modules-notneeded
- ahci
- ata_piix
- i40e
- ixgbe
- igb
- e1000e
- etxhci_hcd
- xhci_hcd
- ehci-pci
- uhci_hcd
synoinfo: &synoinfo synoinfo: &synoinfo
esataportcfg: "0x00" esataportcfg: "0x00"
support_bde_internal_10g: "no" support_bde_internal_10g: "no"
@ -48,7 +37,6 @@ builds:
kver: "4.4.180" kver: "4.4.180"
rd-compressed: false rd-compressed: false
efi-bug: no efi-bug: no
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:
@ -69,7 +57,6 @@ builds:
kver: "4.4.180" kver: "4.4.180"
rd-compressed: false rd-compressed: false
efi-bug: no efi-bug: no
modules-notneeded: *modules-notneeded
cmdline: cmdline:
<<: *cmdline <<: *cmdline
synoinfo: synoinfo:

View File

@ -0,0 +1,17 @@
#!/usr/bin/sh
# This script is saved to /sbin/modprobe which is a so called UMH (user-mode-helper) for kmod (kernel/kmod.c)
# The kmod subsystem in the kernel is used to load modules from kernel. We exploit it a bit to load RP as soon as
# possible (which turns out to be via init/main.c => load_default_modules => load_default_elevator_module
# When the kernel is booted with "elevator=elevator" it will attempt to load a module "elevator-iosched"... and the rest
# should be obvious from the code below. DO NOT print anything here (kernel doesn't attach STDOUT)
for arg in "$@"
do
if [ "$arg" = "elevator-iosched" ]; then
insmod /usr/lib/modules/rp.ko
rm /usr/lib/modules/rp.ko
rm /usr/sbin/modprobe
ln -s /usr/bin/kmod /usr/sbin/modprobe
exit 0
fi
done
exit 1

View File

@ -1,6 +1,14 @@
--- a/linuxrc.syno.impl --- a/linuxrc.syno.impl 2022-07-13 19:11:36.166689682 -0300
+++ b/linuxrc.syno.impl +++ b/linuxrc.syno.impl 2022-07-13 19:18:39.842656201 -0300
@@ -155,6 +155,8 @@ fi @@ -59,6 +59,7 @@
fi
UmountRoot
+ /addons/addons.sh jrExit
exit $1
}
@@ -155,6 +156,8 @@
# insert basic USB modules for detect f401/FDT # insert basic USB modules for detect f401/FDT
echo "Insert basic USB modules..." echo "Insert basic USB modules..."
SYNOLoadModules $USB_MODULES SYNOLoadModules $USB_MODULES

View File

@ -81,11 +81,7 @@ done
sed -e "/@@@CONFIG-GENERATED@@@/ {" -e "r ${TMP_PATH}/rp.txt" -e 'd' -e '}' -i "${RAMDISK_PATH}/sbin/init.post" sed -e "/@@@CONFIG-GENERATED@@@/ {" -e "r ${TMP_PATH}/rp.txt" -e 'd' -e '}' -i "${RAMDISK_PATH}/sbin/init.post"
rm "${TMP_PATH}/rp.txt" rm "${TMP_PATH}/rp.txt"
# Copying modified kmod
echo -n "." echo -n "."
cp /opt/arpl/kmod "${RAMDISK_PATH}/usr/sbin"
ln -sf kmod "${RAMDISK_PATH}/usr/sbin/modprobe"
# Extract modules to ramdisk # Extract modules to ramdisk
rm -rf "${TMP_PATH}/modules" rm -rf "${TMP_PATH}/modules"
mkdir -p "${TMP_PATH}/modules" mkdir -p "${TMP_PATH}/modules"
@ -98,12 +94,15 @@ done
# Clean # Clean
rm -rf "${TMP_PATH}/modules" rm -rf "${TMP_PATH}/modules"
echo -n "."
# Copying LKM to /usr/lib/modules
cp "${LKM_PATH}/rp-${PLATFORM}-${KVER}-${LKM}.ko" "${RAMDISK_PATH}/usr/lib/modules/elevator-iosched.ko"
# Build modules dependencies # Build modules dependencies
/opt/arpl/depmod -a -b ${RAMDISK_PATH} 2>/dev/null /opt/arpl/depmod -a -b ${RAMDISK_PATH} 2>/dev/null
echo -n "."
# Copying fake modprobe
cp "${PATCH_PATH}/iosched-trampoline.sh" "${RAMDISK_PATH}/usr/sbin/modprobe"
# Copying LKM to /usr/lib/modules
cp "${LKM_PATH}/rp-${PLATFORM}-${KVER}-${LKM}.ko" "${RAMDISK_PATH}/usr/lib/modules/rp.ko"
# Addons # Addons
# Check if model needs Device-tree dynamic patch # Check if model needs Device-tree dynamic patch
DT="`readModelKey "${MODEL}" "dt"`" DT="`readModelKey "${MODEL}" "dt"`"
@ -111,6 +110,7 @@ DT="`readModelKey "${MODEL}" "dt"`"
[ "${DT}" = "true" ] && ADDONS['dtbpatch']="" || ADDONS['maxdisks']="" [ "${DT}" = "true" ] && ADDONS['dtbpatch']="" || ADDONS['maxdisks']=""
ADDONS['misc']="" # Add system addon "misc" ADDONS['misc']="" # Add system addon "misc"
ADDONS['acpid']="" # Add system addon "acpid" ADDONS['acpid']="" # Add system addon "acpid"
ADDONS['eudev']=""
mkdir -p "${RAMDISK_PATH}/addons" mkdir -p "${RAMDISK_PATH}/addons"
echo -n "." echo -n "."

View File

@ -6,28 +6,21 @@ available-for:
bromolow-3.10.108: bromolow-3.10.108:
install-script: "install.sh" install-script: "install.sh"
copy: "all" copy: "all"
modules: true
apollolake-4.4.180: apollolake-4.4.180:
install-script: "install.sh" install-script: "install.sh"
copy: "all" copy: "all"
modules: true
broadwell-4.4.180: broadwell-4.4.180:
install-script: "install.sh" install-script: "install.sh"
copy: "all" copy: "all"
modules: true
broadwellnk-4.4.180: broadwellnk-4.4.180:
install-script: "install.sh" install-script: "install.sh"
copy: "all" copy: "all"
modules: true
denverton-4.4.180: denverton-4.4.180:
install-script: "install.sh" install-script: "install.sh"
copy: "all" copy: "all"
modules: true
geminilake-4.4.180: geminilake-4.4.180:
install-script: "install.sh" install-script: "install.sh"
copy: "all" copy: "all"
modules: true
v1000-4.4.180: v1000-4.4.180:
install-script: "install.sh" install-script: "install.sh"
copy: "all" copy: "all"
modules: true

View File

@ -0,0 +1,13 @@
version: 1
name: ehci-pci
description: "Driver for USB 2.0 Host Controller"
available-for:
broadwell-4.4.180:
install-script: &script "install.sh"
modules: true
geminilake-4.4.180:
install-script: *script
modules: true
apollolake-4.4.180:
install-script: *script
modules: true

Binary file not shown.

View File

@ -0,0 +1,8 @@
version: 1
name: eudev
system: true
description: "eudev project + kmod modified"
compile-script: compile.sh
all:
install-script: "install.sh"
copy: "all"

View File

@ -20,24 +20,25 @@ rm -rf files/board/arpl/p3/lkms/*
unzip /tmp/rp-lkms.zip -d files/board/arpl/p3/lkms unzip /tmp/rp-lkms.zip -d files/board/arpl/p3/lkms
# Get latest addons and install its # Get latest addons and install its
# echo "Getting latest Addons" echo "Getting latest Addons"
# mkdir -p /tmp/addons rm -Rf /tmp/addons
# if [ -d ../arpl-addons ]; then mkdir -p /tmp/addons
# cp ../arpl-addons/*.addon /tmp/addons/ if [ -d ../arpl-addons ]; then
# else cp ../arpl-addons/*.addon /tmp/addons/
# TAG=`curl -s https://api.github.com/repos/fbelavenuto/arpl-addons/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'` else
# curl -L "https://github.com/fbelavenuto/arpl-addons/releases/download/${TAG}/addons.zip" -o /tmp/addons.zip TAG=`curl -s https://api.github.com/repos/fbelavenuto/arpl-addons/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'`
# rm -rf /tmp/addons curl -L "https://github.com/fbelavenuto/arpl-addons/releases/download/${TAG}/addons.zip" -o /tmp/addons.zip
# unzip /tmp/addons.zip -d /tmp/addons rm -rf /tmp/addons
# fi unzip /tmp/addons.zip -d /tmp/addons
# DEST_PATH="files/board/arpl/p3/addons" fi
# echo "Installing addons to ${DEST_PATH}" DEST_PATH="files/board/arpl/p3/addons"
# for PKG in `ls /tmp/addons/*.addon`; do echo "Installing addons to ${DEST_PATH}"
# ADDON=`basename ${PKG} | sed 's|.addon||'` for PKG in `ls /tmp/addons/*.addon`; do
# mkdir -p "${DEST_PATH}/${ADDON}" ADDON=`basename ${PKG} | sed 's|.addon||'`
# echo "Extracting ${PKG} to ${DEST_PATH}/${ADDON}" mkdir -p "${DEST_PATH}/${ADDON}"
# tar xaf "${PKG}" -C "${DEST_PATH}/${ADDON}" echo "Extracting ${PKG} to ${DEST_PATH}/${ADDON}"
# done tar xaf "${PKG}" -C "${DEST_PATH}/${ADDON}"
done
# Copy files # Copy files
echo "Copying files" echo "Copying files"