Getting started with ACF development: Difference between revisions
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
For the impatient, download http://dev.alpinelinux.org/~ncopa/setup-acf-dev and execute as root. | For the impatient, download http://dev.alpinelinux.org/~ncopa/setup-acf-dev and execute as root. | ||
'' | The script will: | ||
* Set up a small alpine chroot environment | |||
* Set up a user in the environment with sudo access | |||
* Install needed applications like subversion, http server and vim | |||
* Configure the http server | |||
* Check out ACF modules from svn repository and install them in the environemt | |||
* Create a simple .vimrc with useful key binding | |||
* Create a simple script to enter the chroot | |||
<pre> | |||
#!/bin/sh | |||
# bootstrap an alpine installation and set up ACF development | |||
# version 1.2 | |||
usage() { | |||
cat << EOF | |||
usage: $(basename $0) TARGETDIR | |||
The following environment variables are used:" | |||
WGET path to wget program ($WGET) | |||
TAR path to tar program ($TAR) | |||
MIRROR alpine mirror ($MIRROR) | |||
BASE name of alpine base package ($BASE) | |||
ACFUSER non-root username to use in chroot (\$SUDO_USER) | |||
ACFSVN svn repository base ($ACFSVN) | |||
MODULES svn modules to checkout ($MODULES) | |||
CHROOT chroot program. I.E 'linux32 chroot' ($CHROOT) | |||
PORT port for mini_httpd ($PORT) | |||
http_proxy proxy server ($http_proxy) | |||
EOF | |||
exit 3 | |||
} | |||
die () { | |||
echo "$@" >&2 | |||
exit 3 | |||
} | |||
# read args | |||
# set up vars | |||
: ${WGET:="/usr/bin/wget"} | |||
: ${TAR:="/usr/bin/tar"} | |||
: ${MIRROR:="http://dev.alpinelinux.org/alpine/v1.7"} | |||
: ${ACFSVN:="svn://svn.alpinelinux.org/acf"} | |||
: ${MODULES:="core alpine-baselayout"} | |||
: ${BASE:="base.tar.bz2"} | |||
: ${ACFUSER:="$SUDO_USER"} | |||
: ${CHROOT:="chroot"} | |||
: ${PORT:="80"} | |||
target=$1 | |||
CHD="$CHROOT $target" | |||
[ -n "$http_proxy" ] && PROXY="http_proxy=$http_proxy" | |||
APPS="haserl make mini_httpd subversion sudo vim luafilesystem" | |||
# main | |||
[ -z "$target" ] && usage | |||
[ "$target" = "/" ] && die "Bootstrapping Alpine to '/' is probably not a good idea. Aborting..." | |||
[ `whoami` != root ] && die "This script needs to be run as root." | |||
while ! getent passwd "$ACFUSER" >/dev/null 2>&1 && [ "$ACFUSER" != root ] ; do | |||
echo -n "Enter non-root username: " | |||
read ACFUSER | |||
done | |||
mkdir -p "$target" | |||
echo ">>> Fetching $MIRROR/$BASE..." | |||
sh -c "$PROXY $WGET -q -O - $MIRROR/$BASE | tar -C \"$target\" -jxv" \ | |||
|| die "Failed to fetch or unpack $BASE" | |||
echo ">>> Creating missing dirs..." | |||
for dir in proc sys dev home; do | |||
mkdir -p "$target/$dir" | |||
done | |||
echo ">>> Installing busybox links..." | |||
# create fake /proc/self/exe | |||
mkdir -p "$target/proc/self" | |||
ln -s /bin/busybox "$target/proc/self/exe" | |||
$CHD /bin/busybox --install -s | |||
rm -r "$target/proc/self" | |||
if [ -f /etc/resolv.conf ]; then | |||
echo ">>> Copying /etc/resolv.conf..." | |||
cp /etc/resolv.conf "$target/etc/" | |||
fi | |||
echo ">>> Setting up APK_PATH..." | |||
mkdir -p "$target/etc/apk" | |||
echo "APK_PATH=$MIRROR/apks" >> "$target/etc/apk/apk.conf" | |||
if [ -n "$http_proxy" ]; then | |||
echo ">>> Setting up http_proxy..." | |||
sed -i -e '/^http_proxy=/d' "$target/etc/profile" | |||
echo "http_proxy=$http_proxy" >> "$target/etc/profile" | |||
fi | |||
echo ">>> Settig up user $ACFUSER..." | |||
$CHD adduser -D $ACFUSER | |||
echo ">>> Installing applications..." | |||
$CHD /bin/sh -c "$PROXY apk_add $APPS" | |||
echo ">>> Setting up $ACFUSER as passwordless sudo user..." | |||
sed -i -e "/^$ACFUSER /d" "$target/etc/sudoers" | |||
echo "$ACFUSER ALL=(ALL) NOPASSWD: ALL" >> "$target/etc/sudoers" | |||
echo ">>> Setting up mini_httpd..." | |||
sed -i -e "/^MINI_HTTPD.*/d" "$target/etc/conf.d/mini_httpd" | |||
echo 'MINI_HTTPD_OPTS="-C /etc/mini_httpd.conf" | |||
MINI_HTTPD_DOCROOT=/var/www/localhost/htdocs' \ | |||
>> "$target/etc/conf.d/mini_httpd" | |||
cat << EOF > "$target/etc/mini_httpd.conf" | |||
nochroot | |||
dir=/var/www/localhost/htdocs | |||
user=nobody | |||
logfile=/var/log/mini_httpd.log | |||
cgipat=cgi-bin** | |||
port=$PORT | |||
EOF | |||
$CHD mkdir -p /var/www/localhost | |||
$CHD ln -sf /usr/share/acf/www /var/www/localhost/htdocs | |||
for svnmod in $MODULES ; do | |||
echo ">>> Checking out ACF module $svnmod" | |||
$CHD su $ACFUSER -c "svn co $ACFSVN/$svnmod/trunk ~/$svnmod" | |||
echo ">>> Installing ACF module $svnmod" | |||
$CHD su $ACFUSER -c "cd ~/$svnmod && sudo make install" | |||
done | |||
echo ">>> Creating .vimrc..." | |||
cat <<EOF > "$target/home/$ACFUSER/.vimrc" | |||
noremap <F9> <C-C>:w<CR> :! sudo make install<CR> | |||
inoremap <F9> <C-C>:w<CR> :! sudo make install<CR> | |||
EOF | |||
echo ">>> Creating enter-chroot script..." | |||
cat <<EOF > "$target/enter-chroot" | |||
dir=\$(dirname \$0) | |||
mount --bind /proc \$dir/proc | |||
echo "Entering ACF develmopment chroot. Type 'exit' or press ctrl-d to leave." | |||
$CHROOT \$(dirname \$0) /bin/sh -c 'su -l $ACFUSER' | |||
echo "Left ACF development chroot." | |||
umount \$dir/proc | |||
EOF | |||
chmod +x "$target/enter-chroot" | |||
cat <<EOF | |||
>>> | |||
>>> Setup Completed. Enter the chroot environement with (as root): | |||
>>> | |||
>>> $target/enter-chroot | |||
>>> | |||
>>> Once inside the chroot the privileges will drop to '$ACFUSER'. | |||
>>> You can start and stop mini_httpd within chroot by executing: | |||
>>> | |||
>>> sudo /etc/init.d/mini_httpd start | |||
>>> sudo /etc/init.d/mini_httpd stop | |||
>>> | |||
>>> You can specify the port in /etc/mini_httpd.conf | |||
>>> | |||
>>> Remember to install the acf module to activate changes: | |||
>>> | |||
>>> sudo make install | |||
>>> | |||
EOF | |||
</pre> | |||
Revision as of 14:26, 25 October 2007
For the impatient, download http://dev.alpinelinux.org/~ncopa/setup-acf-dev and execute as root.
The script will:
- Set up a small alpine chroot environment
- Set up a user in the environment with sudo access
- Install needed applications like subversion, http server and vim
- Configure the http server
- Check out ACF modules from svn repository and install them in the environemt
- Create a simple .vimrc with useful key binding
- Create a simple script to enter the chroot
#!/bin/sh
# bootstrap an alpine installation and set up ACF development
# version 1.2
usage() {
cat << EOF
usage: $(basename $0) TARGETDIR
The following environment variables are used:"
WGET path to wget program ($WGET)
TAR path to tar program ($TAR)
MIRROR alpine mirror ($MIRROR)
BASE name of alpine base package ($BASE)
ACFUSER non-root username to use in chroot (\$SUDO_USER)
ACFSVN svn repository base ($ACFSVN)
MODULES svn modules to checkout ($MODULES)
CHROOT chroot program. I.E 'linux32 chroot' ($CHROOT)
PORT port for mini_httpd ($PORT)
http_proxy proxy server ($http_proxy)
EOF
exit 3
}
die () {
echo "$@" >&2
exit 3
}
# read args
# set up vars
: ${WGET:="/usr/bin/wget"}
: ${TAR:="/usr/bin/tar"}
: ${MIRROR:="http://dev.alpinelinux.org/alpine/v1.7"}
: ${ACFSVN:="svn://svn.alpinelinux.org/acf"}
: ${MODULES:="core alpine-baselayout"}
: ${BASE:="base.tar.bz2"}
: ${ACFUSER:="$SUDO_USER"}
: ${CHROOT:="chroot"}
: ${PORT:="80"}
target=$1
CHD="$CHROOT $target"
[ -n "$http_proxy" ] && PROXY="http_proxy=$http_proxy"
APPS="haserl make mini_httpd subversion sudo vim luafilesystem"
# main
[ -z "$target" ] && usage
[ "$target" = "/" ] && die "Bootstrapping Alpine to '/' is probably not a good idea. Aborting..."
[ `whoami` != root ] && die "This script needs to be run as root."
while ! getent passwd "$ACFUSER" >/dev/null 2>&1 && [ "$ACFUSER" != root ] ; do
echo -n "Enter non-root username: "
read ACFUSER
done
mkdir -p "$target"
echo ">>> Fetching $MIRROR/$BASE..."
sh -c "$PROXY $WGET -q -O - $MIRROR/$BASE | tar -C \"$target\" -jxv" \
|| die "Failed to fetch or unpack $BASE"
echo ">>> Creating missing dirs..."
for dir in proc sys dev home; do
mkdir -p "$target/$dir"
done
echo ">>> Installing busybox links..."
# create fake /proc/self/exe
mkdir -p "$target/proc/self"
ln -s /bin/busybox "$target/proc/self/exe"
$CHD /bin/busybox --install -s
rm -r "$target/proc/self"
if [ -f /etc/resolv.conf ]; then
echo ">>> Copying /etc/resolv.conf..."
cp /etc/resolv.conf "$target/etc/"
fi
echo ">>> Setting up APK_PATH..."
mkdir -p "$target/etc/apk"
echo "APK_PATH=$MIRROR/apks" >> "$target/etc/apk/apk.conf"
if [ -n "$http_proxy" ]; then
echo ">>> Setting up http_proxy..."
sed -i -e '/^http_proxy=/d' "$target/etc/profile"
echo "http_proxy=$http_proxy" >> "$target/etc/profile"
fi
echo ">>> Settig up user $ACFUSER..."
$CHD adduser -D $ACFUSER
echo ">>> Installing applications..."
$CHD /bin/sh -c "$PROXY apk_add $APPS"
echo ">>> Setting up $ACFUSER as passwordless sudo user..."
sed -i -e "/^$ACFUSER /d" "$target/etc/sudoers"
echo "$ACFUSER ALL=(ALL) NOPASSWD: ALL" >> "$target/etc/sudoers"
echo ">>> Setting up mini_httpd..."
sed -i -e "/^MINI_HTTPD.*/d" "$target/etc/conf.d/mini_httpd"
echo 'MINI_HTTPD_OPTS="-C /etc/mini_httpd.conf"
MINI_HTTPD_DOCROOT=/var/www/localhost/htdocs' \
>> "$target/etc/conf.d/mini_httpd"
cat << EOF > "$target/etc/mini_httpd.conf"
nochroot
dir=/var/www/localhost/htdocs
user=nobody
logfile=/var/log/mini_httpd.log
cgipat=cgi-bin**
port=$PORT
EOF
$CHD mkdir -p /var/www/localhost
$CHD ln -sf /usr/share/acf/www /var/www/localhost/htdocs
for svnmod in $MODULES ; do
echo ">>> Checking out ACF module $svnmod"
$CHD su $ACFUSER -c "svn co $ACFSVN/$svnmod/trunk ~/$svnmod"
echo ">>> Installing ACF module $svnmod"
$CHD su $ACFUSER -c "cd ~/$svnmod && sudo make install"
done
echo ">>> Creating .vimrc..."
cat <<EOF > "$target/home/$ACFUSER/.vimrc"
noremap <F9> <C-C>:w<CR> :! sudo make install<CR>
inoremap <F9> <C-C>:w<CR> :! sudo make install<CR>
EOF
echo ">>> Creating enter-chroot script..."
cat <<EOF > "$target/enter-chroot"
dir=\$(dirname \$0)
mount --bind /proc \$dir/proc
echo "Entering ACF develmopment chroot. Type 'exit' or press ctrl-d to leave."
$CHROOT \$(dirname \$0) /bin/sh -c 'su -l $ACFUSER'
echo "Left ACF development chroot."
umount \$dir/proc
EOF
chmod +x "$target/enter-chroot"
cat <<EOF
>>>
>>> Setup Completed. Enter the chroot environement with (as root):
>>>
>>> $target/enter-chroot
>>>
>>> Once inside the chroot the privileges will drop to '$ACFUSER'.
>>> You can start and stop mini_httpd within chroot by executing:
>>>
>>> sudo /etc/init.d/mini_httpd start
>>> sudo /etc/init.d/mini_httpd stop
>>>
>>> You can specify the port in /etc/mini_httpd.conf
>>>
>>> Remember to install the acf module to activate changes:
>>>
>>> sudo make install
>>>
EOF