summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/local.mk1
-rw-r--r--src/profile/local.mk2
-rw-r--r--src/profile/proteanos.sh258
3 files changed, 261 insertions, 0 deletions
diff --git a/src/local.mk b/src/local.mk
index 0ef65e3..8a8c077 100644
--- a/src/local.mk
+++ b/src/local.mk
@@ -23,3 +23,4 @@ prokit_SOURCES += \
src/install.sh
include $(top_srcdir)/src/cmd/local.mk
+include $(top_srcdir)/src/profile/local.mk
diff --git a/src/profile/local.mk b/src/profile/local.mk
new file mode 100644
index 0000000..c303390
--- /dev/null
+++ b/src/profile/local.mk
@@ -0,0 +1,2 @@
+prokit_SOURCES += \
+ src/profile/proteanos.sh
diff --git a/src/profile/proteanos.sh b/src/profile/proteanos.sh
new file mode 100644
index 0000000..0e146ee
--- /dev/null
+++ b/src/profile/proteanos.sh
@@ -0,0 +1,258 @@
+# ProteanOS architecture detection and feeds lists.
+#
+# Copyright (C) 2013, 2014 Patrick "P. J." McDermott
+#
+# This file is part of the ProteanOS Development Kit.
+#
+# The ProteanOS Development Kit is free software: you can redistribute
+# it and/or modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# The ProteanOS Development Kit is distributed in the hope that it
+# will be useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with the ProteanOS Development Kit. If not, see
+# <http://www.gnu.org/licenses/>.
+
+prof_proteanos_fstab_linux="\
+proc /proc proc defaults
+sys /sys sysfs defaults
+/dev /dev none bind
+devpts /dev/pts devpts noexec,nosuid,gid=5,mode=0620
+"
+prof_proteanos_install_service=\
+'#!/bin/sh /etc/rc.common
+
+start()
+{
+ log "Configuring packages"
+ printf "disabled\n" >/etc/rc.policy
+ opkg install $(opkg list-installed | cut -d " " -f 1)
+ printf "enabled\n" >/etc/rc.policy
+ rm "${SCRIPT}"
+}
+'
+
+prof_proteanos_normalize_suite()
+{
+ local suite="${1}"
+
+ case "${suite}" in
+ */*) printf '%s\n' "${suite}";;
+ *) printf 'dev/%s\n' "${suite}";;
+ esac
+
+ return 0
+}
+
+prof_proteanos_detect_arch()
+{
+ local uname_m=
+ local uname_s=
+ local arch=
+
+ uname_m="$( (uname -m) 2>/dev/null)" || uname_m='unknown'
+ uname_s="$( (uname -s) 2>/dev/null)" || uname_s='unknown'
+
+ case "${uname_m}:${uname_s}" in
+ 'x86_64:Linux')
+ arch='amd64-linux-glibc'
+ ;;
+ 'i686:Linux')
+ arch='i686-linux-glibc'
+ ;;
+ *)
+ arch=''
+ esac
+
+ printf '%s\n' "${arch}"
+}
+
+prof_proteanos_default_plat()
+{
+ printf 'dev\n'
+}
+
+prof_proteanos_select_mirror()
+{
+ local mirrors=
+ local mirrors_count=
+ local mirror_num=
+
+ mirrors="$(wget -q -O - \
+ 'http://files.proteanos.com/pub/proteanos-mirrors-http')"
+ mirrors_count=$(printf '%s\n' "${mirrors}" | wc -l)
+ rand
+ mirror_num=$(($rand_x % $mirrors_count + 1))
+
+ printf '%s\n' "${mirrors}" | sed -n "${mirror_num}p"
+}
+
+prof_proteanos_validate_archplat()
+{
+ local mirror="${1}"
+ local arch="${2}"
+ local plat="${3}"
+ local suite="${4}"
+
+ while read -r archplat; do
+ case "${archplat}" in
+ "${arch}/${plat}")
+ return 0
+ ;;
+ esac
+ done <<-EOF
+ $(wget -q -O - "${mirror}/feeds/${suite}/Manifest" | sed \
+ 's|/[^/]*$||; /^all\//d; /\/all$/d;')
+ EOF
+
+ return 1
+}
+
+prof_proteanos_feeds()
+{
+ local mirror="${1}"
+ local arch="${2}"
+ local plat="${3}"
+ local suite="${4}"
+ local a=
+ local p=
+ local s=
+
+ for a in "${arch}" 'all'; do
+ for p in "${plat}" 'all'; do
+ for s in 'base'; do
+ printf 'src/gz proteanos_%s_%s_%s_%s_%s ' \
+ "${suite%/*}" "${suite#*/}" \
+ "${a}" "${p}" "${s}"
+ printf '%s/feeds/%s/%s/%s/%s/Packages.gz\n' \
+ "${mirror}" "${suite}" \
+ "${a}" "${p}" "${s}"
+ done
+ done
+ done
+
+ for s in 'base'; do
+ printf 'src/gz proteanos_%s_%s_%s_%s_%s ' \
+ "${suite%/*}" "${suite#*/}" \
+ 'src' 'all' "${s}"
+ printf '%s/feeds/%s/%s/%s/%s/Packages.gz\n' \
+ "${mirror}" "${suite}" \
+ 'src' 'all' "${s}"
+ done
+}
+
+prof_proteanos_dep_fields()
+{
+ printf 'Depends Pre-Depends'
+}
+
+prof_proteanos_include_pkg()
+{
+ local name="${1}"
+ local value="${2}"
+
+ if [ "x${name}" = 'xessential' ]; then
+ if [ "x${value}" = 'xyes' ]; then
+ return 0
+ fi
+ fi
+
+ return 1
+}
+
+prof_proteanos_get_fstab()
+{
+ local arch="${1}"
+ local plat="${2}"
+
+ case "${arch}" in
+ *-linux-*)
+ printf '%s\n' "${prof_proteanos_fstab_linux}"
+ ;;
+ esac
+}
+
+prof_proteanos_file_systems_mounted()
+{
+ local root="${1}"
+ local arch="${2}"
+ local plat="${3}"
+
+ [ -e "${root}/dev/null" ]
+}
+
+prof_proteanos_bind_mount()
+{
+ local arch="${1}"
+ local plat="${2}"
+ local olddir="${3}"
+ local newdir="${4}"
+
+ case "${arch}" in
+ *-linux-*)
+ mount -o bind "${olddir}" "${newdir}"
+ ;;
+ esac
+}
+
+prof_proteanos_bind_umount()
+{
+ local arch="${1}"
+ local plat="${2}"
+ local olddir="${3}"
+ local newdir="${4}"
+
+ case "${arch}" in
+ *-linux-*)
+ umount "${newdir}"
+ ;;
+ esac
+}
+
+prof_proteanos_configure_system_native()
+{
+ local root="${1}"
+ local arch="${2}"
+ local plat="${3}"
+
+ printf 'disabled\n' >"${root}/etc/rc.policy"
+ opkg_install_all "${root}"
+ if [ "x${plat}" = 'xdev' ]; then
+ [ -r /etc/resolv.conf ] && cp /etc/resolv.conf "${root}/etc"
+ [ -r /etc/hostname ] && cp /etc/hostname "${root}/etc"
+ else
+ printf 'enabled\n' >"${root}/etc/rc.policy"
+ printf 'proteanos\n' >"${root}/etc/hostname"
+ fi
+ [ -e "${root}/etc/passwd" ] || printf \
+ 'root::0:0:root:/root:/bin/sh\n' >"${root}/etc/passwd"
+ [ -e "${root}/etc/group" ] || printf \
+ 'root:x:0:\n' >"${root}/etc/group"
+}
+
+prof_proteanos_configure_system_foreign()
+{
+ local root="${1}"
+ local arch="${2}"
+ local plat="${3}"
+
+ printf '%s' "${prof_proteanos_install_service}" \
+ >"${root}/etc/rc.d/S10install"
+ chmod 0755 "${root}/etc/rc.d/S10install"
+ printf 'proteanos\n' >"${root}/etc/hostname"
+ [ -e "${root}/etc/passwd" ] || printf \
+ 'root::0:0:root:/root:/bin/sh\n' >"${root}/etc/passwd"
+ [ -e "${root}/etc/group" ] || printf \
+ 'root:x:0:\n' >"${root}/etc/group"
+}
+
+prof_proteanos_register()
+{
+ register_profile 'proteanos'
+}
+__init prof_proteanos_register