# 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 # . use opkg # TODO: This should be replaced with a prof_proteanos_validate_archplat() # function that gets valid architectures and platforms from the package archive # (which pro-archman needs to list in the distribution). prof_proteanos_archplats=' amd64-linux-glibc dev i686-linux-glibc dev i686-linux-glibc ao751h i686-linux-glibc dimension2400 i686-linux-glibc x60 ' 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 rand= local mirror= rand=$(date '+%S') rand=$(($rand % 3)) case ${rand} in 0) mirror='http://us.mirror.gnu.dk/pub/proteanos' ;; 1) mirror='http://eu.mirror.gnu.dk/pub/proteanos' ;; 2) mirror='http://mirror.oss.maxcdn.com/proteanos' ;; esac printf '%s\n' "${mirror}" } 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 proteanos_%s_%s_%s_%s_%s ' \ "${suite%/*}" "${suite#*/}" \ "${a}" "${p}" "${s}" printf '%s/feeds/%s/%s/%s/%s/Packages\n' \ "${mirror}" "${suite}" \ "${a}" "${p}" "${s}" done done done for s in 'base'; do printf 'src proteanos_%s_%s_%s_%s_%s ' \ "${suite%/*}" "${suite#*/}" \ 'src' 'all' "${s}" printf '%s/feeds/%s/%s/%s/%s/Packages\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}" printf 'disabled\n' >"${root}/etc/rc.policy" opkg_install_all "${root}" printf 'enabled\n' >"${root}/etc/rc.policy" [ -r /etc/resolv.conf ] && cp /etc/resolv.conf "${root}/etc" [ -r /etc/hostname ] && cp /etc/hostname "${root}/etc" [ -e "${root}/etc/passwd" ] || printf \ 'root::0:0:root:/root:/bin/sh\n' >"${root}/etc/passwd" } prof_proteanos_configure_system_foreign() { local root="${1}" 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" }