Jump to content

Archived

This topic is now archived and is closed to further replies.

Mephisto

[contourné] création clé USB d'install

Recommended Posts

Bonjour

On me demande de pondre un utilitaire qui pourrait générer à la chaîne des clé USB.

Le principe:

- la clé sera généré sur une Linux (vraisemblablement une Fedora 9)

- la partition bootable comporte notre distro FreeBSD

- on doit également avoir une partition RW sous Windows (fat32, on colle un peu de pr0n lesbien doc dessus)

edit / voilà où j'en suis:

MSize=`ls -l $ISO_FILE | awk '{print $5}'`
while :
do
echo " [ Working on $DEVICE ]"

echo -n "	determining device geometry"
infos=`fdisk -l $DEVICE 2>/dev/null | grep "[0-9]* heads"`
ident=`fdisk -l $DEVICE 2>/dev/null | awk '/Disk identifier/{print $3}'`
csz=`fdisk -l $DEVICE 2>/dev/null | awk '/Units = cylinders /{print $7}'`
eval `echo $infos | awk '{print "hpc=" $1 " sec=" $3 " cyl=" $5}'`
if [ -z "$hpc" -o -z "$sec" -o -z "$cyl" -o -z "$csz" ]; then
	echo "  [ FAIL ]"
	echo "$0: can't get infos for device $DEVICE" >&2
	exit
fi
echo "  [ OK ]"

echo -n "	initializing partition table"
dd if=$MBR of=$DEVICE >/dev/null 2>&1 # MBR=/boot/mbr
round=128
tocyl=`expr $hpc '*' $sec '*' $csz`
ret=`expr $MSize % $tocyl`
MSize=`expr $MSize / $tocyl`
test "$ret" -eq "0" || MSize=`expr $MSize + 1`
s2len=$MSize
s2off=`expr $cyl - $s2len - 1`
s1len=`expr $s2off - 1`
s1off=1
sfdisk -DLqf $DEVICE >/dev/null 2>&1 <<EOF
$s1off $s1len b
$s2off $s2len a5 *
EOF
echo " [ OK ]"

echo -n "	formatting FAT32 partition"
dd if=/dev/zero of=${DEVICE}1 bs=$csz count=1 >/dev/null 2>&1
mkdosfs -i 42424242 -n "Documentation files" -F 32 ${DEVICE}1 >/dev/null 2>&1
mount -t vfat ${DEVICE}1 $TMPDOC || ERR=1
if [ "$ERR" ]; then
	echo "   [ FAIL ]"
	echo "$0: unable to mount ${DEVICE}1 on $TMPDOC"
	exit
fi
echo "   [ OK ]"

echo -n "	copying documentation files"
cp -rp $DOCDIR/* $TMPDOC/ >/dev/null 2>&1 || ERR=2
if [ "$ERR" ]; then
	echo "  [ FAIL ]"
	ERR=
fi
umount ${DEVICE}1
echo "  [ OK ]"

echo -n "	copying system"
dd if=$ISO_FILE of=${DEVICE}2 bs=$csz status=noxfer >/dev/null 2>&1 || ERR=3
if [ "$ERR" ]; then
	echo "			   [ FAIL ]"
	exit
fi
echo "			   [ OK ]"

echo " [ Device ready! ]"
echo -n "<?> Create new USB key ?  [Y/N] : " && read i
test "$i" = "Y" -o "$i" = "y" -o "$i" = "O" -o "$i" = "o" || i=
test -z "$i" && echo " [ leaving ]" && break
echo " Please, remove current USB key, insert new one and press enter"
read i
done

la clé est (semble-t-il) correctement partitionné

on formate la FAT32, la doc est copié.

on copie ensuite directement l'ISO (et ça ne marche pas, mais on pouvait s'en douter...)

donc... des idées sur la marche à suivre ?

Merci :cartonrouge:

Share this post


Link to post
Share on other sites

Bah quand tu installes un linux, les fichiers sont recopiés de l'ISO et mis sur leur nouveau FS.

Il faut que tu fasses une image des fichiers de ton FreeBSD (tar cjpf ...) et que tu décompresses l'archive sur la clé (tar xjpf ...).

Share this post


Link to post
Share on other sites

on ne monte pas sx2, et la partition n'est pas sencé être formaté.

il faudrait recopier l'ISO (ou ce qui en est utilisable), et injecter de quoi la faire booter.

on récupère déjà /boot/mbr qu'on colle en début de clé (avant de partitionner)

apparemment, on pourrait utiliser /boot/boot ou /boot/boot[0-2] à mettre ... en début de deuxième partition si j'ai bien compris, avant de faire suivre l'ISO

Share this post


Link to post
Share on other sites

on doit pouvoir générer plusieurs versions (105 pour être précis)

j'ai pas vraiment la motiv de tout faire à la main :up:

Share this post


Link to post
Share on other sites

grosso-merdo, on a 4 versions de FreeBSD différentes (4.7, 5.4, 6.2 et 7.2).

chacune de ses versions correspond à notre numéro de version majeur (de 2 à 5 en l'occurence).

et on recréé une version régulièrement englobant les dernières mises à jour.

on veut pouvoir ressortir des versions désuettes (pourquoi, c'est pas mon problème... imaginons pour des tests en cas de SAV épique ; j'ai déjà du répondre à quelques cas sociaux, c'est pas des lumières - et nos mises à jour étant comit sur toutes les versions en cours, un client en 4.7 ne vera pas forcément l'intérêt de passer en 7.2)

edit et fermeture:

ça a fini par me casser les couil**s, je suis retourné le faire sous FreeBSD.

et ça fonctionne.

je poste pas le résultat, on a rajouté du dialog et d'autres utilitaires persos, c'est useless si je fournis pas tout.

pour ceux qui auraient ce problème, ou seraient curieux : contactez-moi.

au passage, j'ai relu les propositions de fabien29200, et j'aurai juste un commentaire:

quitte à faire un tar cjpf - . | tar xjpf - /newdir

autant faire un tar cf - . | tar xf - /newdir

le p n'est utile qu'à la décompression (et pas dans mon cas), et le j impliquerait une compression puis une décompression (pour de la copie en locale, on a vu plus efficace)

Share this post


Link to post
Share on other sites

×
×
  • Create New...