Fórumok
Egy pár órája már próbálkozom a qemu-nak előállítani egy gépet szkriptből. A szkript könyvtárba (chroot) elkészíti amit szeretnék, tovább akartam lépni, hogy egy qcow2-t csináljak neki, de valamit benézek vagy nagyon nem tudok, mert nem tudom bash szkriptből létrehozni a kívánt virtuális lemezt. Ha az üres qcow2-t átadom a qemunak egy live-dvd-vel, akkor tudom partícionálni a működő vm-ben, de nem ez lenne a cél :(
Egy kis segítségre lenne szükségem, mert ilyet még nem csináltam.! Ez volna a szkript idevágó része:
#!/bin/bash
# Elérési útvonalak
IMG_FILE="img.qcow2"
IMG_SIZE="32G"
EFI_PARTITION_SIZE="512M"
BOOT_PARTITION_SIZE="5G"
# QEMU kép létrehozása
qemu-img create -f qcow2 "${IMG_FILE}" "${IMG_SIZE}"
# Loop eszköz létrehozása
losetup -fP "${IMG_FILE}"
LOOP_DEVICE=$(losetup -l | grep "${IMG_FILE}" | awk '{print $1}')
# Partíciók létrehozása és formázása
parted -s "${LOOP_DEVICE}" mklabel gpt
parted -s "${LOOP_DEVICE}" mkpart primary fat32 1MiB "${EFI_PARTITION_SIZE}"
parted -s "${LOOP_DEVICE}" set 1 boot on
parted -s "${LOOP_DEVICE}" mkpart primary ext4 "${EFI_PARTITION_SIZE}" "${BOOT_PARTITION_SIZE}"
parted -s "${LOOP_DEVICE}" mkpart primary btrfs "${BOOT_PARTITION_SIZE}" 100%
mkfs.fat -F32 "${LOOP_DEVICE}p1"
mkfs.btrfs "${LOOP_DEVICE}p2"
mkfs.btrfs "${LOOP_DEVICE}p3"
# Partíciók csatolása
mount "${LOOP_DEVICE}p2" /mnt
mkdir -p /mnt/boot
mount "${LOOP_DEVICE}p1" /mnt/boot
mkdir -p /mnt/boot/efi
mount "${LOOP_DEVICE}p3" /mnt/boot/efi
# rendszer telepítése lenne ha lenne hová
# Visszaállítjuk a loop eszközt
losetup -d "${LOOP_DEVICE}"
A futtatás ereménye:
# ./make.disk
Formatting 'img.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=34359738368 lazy_refcounts=off refcount_bits=16
Error: The location 1MiB is outside of the device /dev/loop0.
Error: Partition doesn't exist.
Error: The location 512M is outside of the device /dev/loop0.
Error: The location 5G is outside of the device /dev/loop0.
Egy elindított livecd-vel tudom partícionálni. Hogyan kell kezelni szkriptből?
Hozzászólások
ha jol tudom a qcow2 nem csak blokk fajl, van rajta qcow2 struktura is.
csinalj inkabb raw-ot, legfeljebb utana konvertald at qcow2-re ha szukseges.
neked aztan fura humorod van...
Ezek között nézelődj: https://wiki.debian.org/SystemBuildTools
Ezek egy kis részét használtam, szerintem a problémára a virt-builder lehet első közelítésben a megoldás.
Szia!
Előszőr "raw" fájt hozz létre, azt formázd/partcionáld - és a legvégén át kell konvertálni qcow2 -be,
qcow2 konténer formátum, több minden van benne, nem csak a "disk" önmagában.
Még arra figyelj ha a sparse-file mountolod, akkor a mountban -o discard=0 legyen beállítva.
Értelem szerűen, ha ezt módosítani akarod, akkor a qcow2 -t raw-ba kell konvertálni majd vissza qcow2-be.
qcow2-t nem losetuppal kell felcsatolni, hanem qemu-nbd-vel vagy hasonloval. Utana tudod blokk eszkozkent kezelni.
Domain, tárhely és webes megoldások: aWh
Köszönöm, ez volt a megoldás! Közben kicsit átszabtam a méretet...
dzsolt
Az alap probléma ugyan megoldódott, de felmerült(ek) további(ak). Azt lenne jó valahogyan kilistázni, hogy melyik nbd melyik img-hez van csatolva. Ez azért lenne fontos, mert kibővítettem az első szabad nbd megkeresésével és arra az esetre ha elfogyna az nbd, kilöki a csatolásokat és újrahúzza a modult az alapértelmezett 16 helyett az aktuális érték+16-al és eszközönként 8 partícióval (ez csak elég lesz tán), ezen a ponton jó lenne elmenteni az aktuális csatolásokat és újra csatolni amikor a modult újratöltötte.
dzsolt
off
Aki awk előtt grep-et futtat, az egyéb aljasságokra is képes. :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
:D Kínomban már mindent írtam ami eszembe jutott, meg amit találtam :D A megoldásban nincsen keverve!
dzsolt
Az igazsághoz az is hozzátartozik, hogy van amikor effektívebb. Mondjuk hibásan írtad a scriptet, mert a filenévben lévő pont karakter az regexben egy karakternyi bármit jelent, szóval grep -F lenne az helyesen. Ha viszont átadod a paramétert az awk-nak, akkor ott előbb a BEGIN szekcióban helyettesítéssel escape-elni kell a '.'-ot egy '\' karakterrel, szóval lehet, hogy a grep -F ronda, de egyszerűbb.
Én azért általában színtisztán awk-ban írom az ilyesmit, de a mai gépteljesítményeknél pont nem érdekes, csak szépészet. :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
...én még csak ugatom a bonyolultabb szkripteket, de minden tippet/oktatást szívesen veszek és kipróbálok!
dzsolt
Szerintem a kódodban nincs vele baj. Épp néztem is, hogy nem olyan rossz kód, igaz egyszerű is, szóval elég nehéz lenne benne annyira valamit elrontani. Max. ha annyira bele kéne kössek, az az, hogy Bash-ra van dependelve, mikor semmi Bash only szintaxist vagy funkciót nem használ, jobb lenne a #!/bin/sh hívása a fejlécben. Persze ez a /bin/sh a legtöbb linuxos rendszeren csak egy symlink, tipikusan a /bin/bash-ra, de néhány rendszeren más lehet a helyzet, pl. BSD-ken lehet csak sh, ksh, csh, zsh, stb. van, vagy Linuxon Dash, zsh, stb.. Ha meg mindenképp Bash-re akarod, akkor mostanában a #!/bin/usr/env bash formát ajánlják.
“A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)
Kérdés, mennyire kell hordozhatónak lennie. Otthonra simán bedrótozom én is a bash-t, bár ki is szoktam használni a bash-only lehetőségeket. A -F viszont hiányzott, mert az "img.qcow2" illeszkedik például a valamiimgqqcow2blabla filenévre is. Illetve ehhez a -F kevés. Inkább:
Ha meg szépen akarjuk, akkor a pontot mindenképpen cserélni kell \.-ra.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
Ezen évekkel ezelőtt törtem a fejem amikor az első rövidebb dolgaimat tettem szkriptbe, de mivel már akkor sem volt önálló az sh, bash maradt. Mi lenne az előnye a #!/bin/usr/env bash formának?
dzsolt
Olyan helyen is működik, ahol a bash pl. /usr/local/bin/bash néven / helyen érhető el.
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?