#!/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)