#!/bin/bash set -e for i in $(seq 1 100); do #Creating interface for the zone dladm create-vnic -l e1000g1 hnet$i #Creating initial config TEMPFILE=$(mktemp /tmp/XXXXXXXXXXXXXXXXXX) cat > $TEMPFILE <<EOF create -b set zonepath=/zones/h$i set autoboot=true set ip-type=exclusive add net set physical=hnet$i end add capped-memory set physical=2G end add rctl set name=zone.max-swap add value (priv=privileged,limit=2147483648,action=deny) end add rctl set name=zone.max-locked-memory add value (priv=privileged,limit=536870912,action=deny) end EOF zonecfg -z h$i -f $TEMPFILE zfs send -R data/zones/h0@initial | zfs recv -F data/zones/h$i # Zone tools should know that zone is in installed state, not configured # Also during installation zoneadm assigns uuid to zone (last field). We do this manually. uuid=$(uuidgen) gsed -i -e "/^h${i}:/ s/\$/${uuid}/" -e "/^h${i}:/ s/configured/installed/" /etc/zones/index zoneadm -z h$i mount # We known that golden image ip address ends in 254 and change it addr=$((1+$i)) sed -i -e "s:hnet0:hnet$i:g" -e "s:\.254:.$addr:g" /zones/h$i/root/etc/ipadm/ipadm.conf zoneadm -z h$i unmount zfs destroy data/zones/h$i@initial rm $TEMPFILE zoneadm -z h$i boot done
Показаны сообщения с ярлыком Shell. Показать все сообщения
Показаны сообщения с ярлыком Shell. Показать все сообщения
четверг, 30 августа 2018 г.
Quest: creating one hundred zones
Well, I need to create about one hundred zones once again.
You could probably use ansible for this, but an old-fashioned man will do everything in shell.
So: we have one "golden image" and have to create 100 zones like it.
We could clone it, but with clones you receive wonderful issue - beadm activate fails in zone.
So we create zones and do send/receive manually.
This looks like this:
пятница, 13 октября 2017 г.
Does ip belong to network?
It's so easy to check if IP belong to network... Until you start doing this in shell. I've tried and finally got this. This version works in bash, dash and ksh...
Good enough for me, but perhaps it could be optimized a bit to avoid cut usage.
Our function gets two parameters - ip address and network in address/netmask format. In fact we compare IPaddress & netmask and IPnetwork & netmask.
#!/bin/sh belongs_network () { addr=$1 network=$2 netaddr=`echo $network | cut -d / -f 1` netcdr=`echo $network | cut -d / -f 2` a1=$(echo "$addr" | cut -d . -f 1) a2=$(echo "$addr" | cut -d . -f 2) a3=$(echo "$addr" | cut -d . -f 3) a4=$(echo "$addr" | cut -d . -f 4) n1=$(echo "$netaddr" | cut -d . -f 1) n2=$(echo "$netaddr" | cut -d . -f 2) n3=$(echo "$netaddr" | cut -d . -f 3) n4=$(echo "$netaddr" | cut -d . -f 4) ares=$((($a1*256*256*256+$a2*256*256+$a3*256+$a4)>>(32-$netcdr))) nres=$((($n1*256*256*256+$n2*256*256+$n3*256+$n4)>>(32-$netcdr))) if [ $ares -eq $nres ] ; then return 0 else return 1 fi } if belongs_network 10.208.103.255 10.208.128.0/17; then echo "belongs" else echo "does not belong" fi
четверг, 23 мая 2013 г.
elfdump -a in Solaris
Solaris userland is rather specific... A lot of utilities misses convenient options from GNU/BSD analogs. E.g., we don't have "elfdump -a" here... As always, a bit of scripting solves this problem:
elfdump -c /bin/ls |grep Header |awk ' { print $4; }' |xargs -n 1 -I '{}' elfdump -N '{}' /bin/ls
понедельник, 14 марта 2011 г.
POSIX rules, bashism sux, and shell is a great tool...
Just one link. Here I found a lot of useful advices and tricks concerning writing scripts in POSIX shell. As I'm really fond of shell, I'd like to share this link...
Подписаться на:
Сообщения (Atom)