Set dynamic hostname for Raspbian image

Set hostname for session based of full MAC address:
sudo hostname rpi$(ifconfig -a eth0 | grep "HWaddr" | sed "s/^.*HWaddr //" | sed "s/://g")
Every Pi MAC address starts with b8:27:eb so lets truncate this off.
To set hostname for session based only on end part of MAC address:
sudo hostname rpi$(ifconfig -a eth0 | grep "HWaddr" | sed "s/^.*HWaddr .........//" | sed "s/://g")
Lets create new service:
cat > /etc/init.d/zdhostname << EOF
#!/bin/sh
case "\$1" in
start)
#newname=rpi\$(ifconfig -a eth0 | grep "HWaddr" | sed "s/^.*HWaddr //" | sed "s/://g") #based on full MAC address
newname=rpi\$(ifconfig -a eth0 | grep "HWaddr" | sed "s/^.*HWaddr .........//" | sed "s/://g") #based on MAC address. truncate b8:27:eb cause it is same for every pi
sed -i "s/^127.0.1.1.*\$/127.0.1.1\\t\$newname/" /etc/hosts
echo \$newname> /etc/hostname
/etc/init.d/hostname.sh
echo "Hostname changed"
;;
*)
echo "Usage: /etc/init.d/zdhostname {start}"
exit 1
;;
esac
EOF
At the end file /etc/init.d/zdhostname look like:
#!/bin/sh
case "$1" in
start)
#newname=rpi$(ifconfig -a eth0 | grep "HWaddr" | sed "s/^.*HWaddr //" | sed "s/://g") #based on full MAC address
newname=rpi$(ifconfig -a eth0 | grep "HWaddr" | sed "s/^.*HWaddr .........//" | sed "s/://g") #based on MAC address. truncate b8:27:eb cause it is same for every pi
sed -i "s/^127.0.1.1.*$/127.0.1.1\t/" /etc/hosts
echo $newname> /etc/hostname
/etc/init.d/hostname.sh
echo "Hostname changed"
;;
*)
echo "Usage: /etc/init.d/zdhostname {start}"
exit 1
;;
esac
Set the file executable:
chmod 755 /etc/init.d/zdhostname
Refresh startup services:
update-rc.d zdhostname defaults
Chenge hostname instantly:
/etc/init.d/zdhostname start

No comments: