Installation personnalisée

Bonjour,
Etant débutant, j’aimerais avoir un petit coup de pouce de votre part, je souhaite créer une installation personnalisée de Debian avec seulement les paquets dont j’ai besoin et le tout sans connexion réseau.
Je ne parviens pas à installer les paquets que j’ai ajouter sur le cd.

Exemple :
J’ai ajouteé les paquets .deb d’apache dans le répertoire /pool/main/a/apache2

[quote]apache2_2.2.16-6+squeeze6_amd64.deb
apache2.2-common_2.2.16-6+squeeze6_amd64.deb
apache2-mpm-worker_2.2.16-6+squeeze6_amd64.deb[/quote]

Dans mon fichier preseed.cfg j’ai ajouter la ligne

L’installation se déroule bien mais apache2 ne parvient pas à être installer.
Si quelqu’un pourrait m’aiguiller vers le bon chemin ^^

Bonjour,

apache2 est un métapaquet, quelle est la version de debian que tu cherches à installer ?Dépend: apache2-mpm-worker (= 2.2.22-2) | apache2-mpm-prefork (= 2.2.22-2) | apache2-mpm-event (= 2.2.22-2) | apache2-mpm-itk (= 2.2.22-2), apache2.2-common (= 2.2.22-2) Fourni par : apache2-mpm-event, apache2-mpm-itk, apache2-mpm-prefork, apache2-mpm-worker Description : Métapaquet pour le serveur HTTP Apache Cet exemple n’est cetainement pas valable pour toi…Mais le truc qui cloche (HAMA) c’est pourquoi un serveur web sans connection au net ?

Je souhaite réaliser ce cd d’installation pour un projet d’école, de manière à installer un serveur LAMP depuis un cd fourni avec les paquets nécessaire (Apache, Mysql, Php…). :smiley:

Oui le metapaquet je les ai pris ici packages.debian.org/squeeze/apache2

Essaye avec ce lien, packages.debian.org/source/squeeze/apache2 regarde s’il y a une différence, mais pour monter ton image, il te faut cetainement plus que ça, tu dois aussi avoir le système de base + les services dont tu as besoin

Edit : j’ai retrouvé le manuel debian live live.debian.net/manual/html/examples.fr.html

Franchement plutôt que de faire un CD avec des packages qui vont finir par être périmé, tu devrais étudier le script ci-dessous. C’est ce qui permet de créer des VMs de base dans LXC.

C’est assez génial, car il télécharge les packages de base et l’image est donc toujours à jour !

[code]#!/bin/bash

lxc: linux Container library

Authors:

Daniel Lezcano daniel.lezcano@free.fr

This library is free software; you can redistribute it and/or

modify it under the terms of the GNU Lesser General Public

License as published by the Free Software Foundation; either

version 2.1 of the License, or (at your option) any later version.

This library 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

Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public

License along with this library; if not, write to the Free Software

Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

configure_debian()
{
rootfs=$1
hostname=$2

# configure the inittab
cat <<EOF > $rootfs/etc/inittab

id:3:initdefault:
si::sysinit:/etc/init.d/rcS
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6

Normally not reached, but fallthrough in case of emergency.

#z6:6:respawn:/sbin/sulogin
1:2345:respawn:/sbin/getty 38400 console
c1:12345:respawn:/sbin/getty 38400 tty1 linux
c2:12345:respawn:/sbin/getty 38400 tty2 linux
c3:12345:respawn:/sbin/getty 38400 tty3 linux
c4:12345:respawn:/sbin/getty 38400 tty4 linux
EOF

# disable selinux in debian
mkdir -p $rootfs/selinux
echo 0 > $rootfs/selinux/enforce

# configure the network using the dhcp
cat <<EOF > $rootfs/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
EOF

# set the hostname
cat <<EOF > $rootfs/etc/hostname

$hostname
EOF

# disable selinux in debian
mkdir -p $rootfs/selinux
echo 0 > $rootfs/selinux/enforce

# configure the network using the dhcp
cat <<EOF > $rootfs/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
EOF

# set the hostname
cat <<EOF > $rootfs/etc/hostname

$hostname
EOF

# reconfigure some services
if [ -z "$LANG" ]; then
    echo "en_US.UTF-8 UTF-8" > $rootfs/etc/locale.gen
    chroot $rootfs locale-gen en_US.UTF-8
    chroot $rootfs update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
else
    echo "$LANG UTF-8" > $rootfs/etc/locale.gen
    chroot $rootfs locale-gen $LANG
    chroot $rootfs update-locale LANG=$LANG LC_ALL=$LANG
fi

# remove pointless services in a container
chroot $rootfs /usr/sbin/update-rc.d -f umountfs remove
chroot $rootfs /usr/sbin/update-rc.d -f hwclock.sh remove
chroot $rootfs /usr/sbin/update-rc.d -f hwclockfirst.sh remove

# do some adjustment for the final image
mknod -m 666 $rootfs/dev/tty1 c 4 1
mknod -m 666 $rootfs/dev/tty2 c 4 2
mknod -m 666 $rootfs/dev/tty3 c 4 3
mknod -m 666 $rootfs/dev/tty4 c 4 4

echo "root:root" | chroot $rootfs chpasswd
echo "Root password is 'root', please change !"

return 0

}

download_debian()
{
packages=
ifupdown,
locales,
libui-dialog-perl,
dialog,
isc-dhcp-client,
netbase,
net-tools,
vim,
iproute,
openssh-server

cache=$1
arch=$2

# check the mini debian was not already downloaded
mkdir -p "$cache/partial-$arch"
if [ $? -ne 0 ]; then
    echo "Failed to create '$cache/partial-$arch' directory"
    return 1
fi

# download a mini debian into a cache
echo "Downloading debian minimal ..."
debootstrap --verbose --variant=minbase --arch=$arch \
    --include $packages \
    squeeze $cache/partial-$arch http://ftp.fr.debian.org/debian
if [ $? -ne 0 ]; then
    echo "Failed to download the rootfs, aborting."
    return 1
fi

mv "$1/partial-$arch" "$1/rootfs-$arch"
echo "Download complete."

return 0

}

copy_debian()
{
cache=$1
arch=$2
rootfs=$3

# make a local copy of the minidebian
echo -n "Copying rootfs to $rootfs..."
cp -a $cache/rootfs-$arch $rootfs || return 1
return 0

}

install_debian()
{
cache="/var/cache/lxc/debian-squeeze"
rootfs=$1
mkdir -p /var/lock/subsys/
(
flock -n -x 200
if [ $? -ne 0 ]; then
echo "Cache repository is busy."
return 1
fi

    arch=$(arch)
    if [ "$arch" == "x86_64" ]; then
        arch=amd64
    fi

    if [ "$arch" == "i686" ]; then
        arch=i386
    fi

    echo "Checking cache download in $cache/rootfs-$arch ... "
    if [ ! -e "$cache/rootfs-$arch" ]; then
        download_debian $cache $arch
        if [ $? -ne 0 ]; then
            echo "Failed to download 'debian base'"
            return 1
        fi
    fi

    copy_debian $cache $arch $rootfs
    if [ $? -ne 0 ]; then
        echo "Failed to copy rootfs"
        return 1
    fi

    return 0

    ) 200>/var/lock/subsys/lxc

return $?

}

copy_configuration()
{
path=$1
rootfs=$2
name=$3

rndbit=""
while [[ $rndbit != "2" && $rndbit != "6" && $rndbit != "A" && $rndbit != "E" ]]; do
    rndbit="$(hexdump -n 1 -v -e '/1 "%02X"' /dev/urandom |sed 's,^.,,g' |tr -d '\n')"
done
macaddr=$(echo -n "0${rndbit}"; hexdump -n 5 -v -e '/1 ":%02X"' /dev/urandom)

cat <<EOF >> $path/config

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.ipv4 = 0.0.0.0
lxc.network.hwaddr = $macaddr

lxc.tty = 4
lxc.pts = 1024
lxc.rootfs = $rootfs
lxc.cgroup.devices.deny = a

/dev/null and zero

lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm

consoles

lxc.cgroup.devices.allow = c 5:1 rwm
lxc.cgroup.devices.allow = c 5:0 rwm
lxc.cgroup.devices.allow = c 4:0 rwm
lxc.cgroup.devices.allow = c 4:1 rwm

/dev/{,u}random

lxc.cgroup.devices.allow = c 1:9 rwm
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 136:* rwm
lxc.cgroup.devices.allow = c 5:2 rwm

rtc

lxc.cgroup.devices.allow = c 254:0 rwm

mounts point

lxc.mount.entry=proc $rootfs/proc proc nodev,noexec,nosuid 0 0
lxc.mount.entry=devpts $rootfs/dev/pts devpts defaults 0 0
lxc.mount.entry=sysfs $rootfs/sys sysfs defaults 0 0
EOF

if [ $? -ne 0 ]; then
    echo "Failed to add configuration"
    return 1
fi

return 0

}

clean()
{
cache="/var/cache/lxc/debian-squeeze"

if [ ! -e $cache ]; then
    exit 0
fi

# lock, so we won't purge while someone is creating a repository
(
    flock -n -x 200
    if [ $? != 0 ]; then
        echo "Cache repository is busy."
        exit 1
    fi

    echo -n "Purging the download cache..."
    rm --preserve-root --one-file-system -rf $cache && echo "Done." || exit 1
    exit 0

) 200>/var/lock/subsys/lxc

}

usage()
{
cat <<EOF
$1 -h|–help -p|–path= -n|–name= --clean
EOF
return 0
}

options=$(getopt -o hp:n:c -l help,path:,name:,clean – “$@”)
if [ $? -ne 0 ]; then
usage $(basename $0)
exit 1
fi
eval set – “$options”

while true
do
case “$1” in
-h|–help) usage $0 && exit 0;;
-p|–path) path=$2; shift 2;;
-n|–name) name=$2; shift 2;;
-c|–clean) clean=$2; shift 2;;
–) shift 1; break ;;
*) break ;;
esac
done

if [ -z $name ]; then
echo "No name given"
usage $0
exit 1
fi

if [ ! -z “$clean” -a -z “$path” ]; then
clean || exit 1
exit 0
fi

type debootstrap
if [ $? -ne 0 ]; then
echo "‘debootstrap’ command is missing"
exit 1
fi

if [ -z “$path” ]; then
echo "‘path’ parameter is required"
exit 1
fi

if [ “$(id -u)” != “0” ]; then
echo "This script should be run as ‘root’"
exit 1
fi

rootfs=$path/rootfs

install_debian $rootfs
if [ $? -ne 0 ]; then
echo "failed to install debian"
exit 1
fi

configure_debian $rootfs $name
if [ $? -ne 0 ]; then
echo "failed to configure debian for a container"
exit 1
fi

copy_configuration $path $rootfs
if [ $? -ne 0 ]; then
echo "failed write configuration file"
exit 1
fi

if [ ! -z $clean ]; then
clean || exit 1
exit 0
fi
[/code]