diff options
Diffstat (limited to 'src/profile')
-rw-r--r-- | src/profile/local.mk | 2 | ||||
-rw-r--r-- | src/profile/proteanos.sh | 258 |
2 files changed, 260 insertions, 0 deletions
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 |