/usr/sbin/pb-udhcpc is in petitboot 13.05.29.14.00-g4dc604b-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | #!/bin/sh
#
# Petitboot udhcpc user script. Should be run by udhcpc when
# there is a change in the dhcp configuration. For more info
# see the udhcpc man page and the Linux kernel source file
# Documentation/filesystems/nfsroot.txt.
#
PBOOT_USER_EVENT_SOCKET="/tmp/petitboot.ev"
log="/var/log/petitboot/pb-udhcpc.log"
resolve_url() {
file="$1"
# URL? use as-is.
tmp=${file#://*}
if [ "$tmp" != "$file" ]
then
echo "$file"
fi
# Otherwise, TFTP using an appropriate host. Start with the
# DHCP 'tftp' option:
host=${tftp}
# next, try the DHCP next-server-address
[ -z "$host" ] && host=${siaddr}
# finally, use the DHCP server we got this lease from:
[ -z "$host" ] && host=${serverid}
echo "tftp://$host/$file"
}
do_pxe() {
basedir=$1
params="conf@/net/${interface} method=dhcp"
# first, try by MAC
mac=$(cat /sys/class/net/$interface/address)
pb-event $params url=$basedir/$mac
# try decreasing fragments of IP lease
ip_hex=$(printf '%02X%02X%02X%02X' $(echo $ip | tr '.' ' '))
for i in $(seq 8 -1 1)
do
frag=${hex_ip:0:$i}
pb-event $params url=$basedir/$frag
done
# last, use default
pb-event $params url=$basedir/default
}
pb_add () {
# Look for an explicit config file location in the DHCP config-file
# parameter
if [ -n ${conffile} ]
then
url=$(resolve_url ${conffile})
pb-event conf@/net/${interface} url=$url method=dhcp
return
fi
# Otherwise, we'll need the boot-file parameter. Looks like udhcpc
# will give us different names, depending if the parameter was in
# the header, or specified by options
[ -n "$bootfile" ] && bootfile=${boot_file}
if [ -z "$bootfile" ]
then
return
fi
# PXE behaviour is to download the config file based on a file
# structure relative to the pxelinux binary
file=${bootfile}
[ -z "$file" ] && file=${boot_file}
if [ -n "$file" ]
then
basedir=${file%%/*}
do_pxe $basedir
fi
# Finally, add an option for the boot_file parameter
k_server_ip=${rootpath%%:*}
k_root_dir=${rootpath#*:}
args=
if [ -n $rootpath ]
then
[ ${k_server_ip} != ${rootpath} ] || k_server_ip=${serverid}
args="root=/dev/nfs ip=any nfsroot=${k_server_ip}:${k_root_dir}"
fi
pb-event add@/net/${interface} \
name=netboot \
image=tftp://${siaddr}/${boot_file} \
args="$args"
}
pb_remove () {
pb-event remove@/net/${interface} name=netboot
}
case "$1" in
bound | renew)
pb_add
;;
deconfig)
pb_remove
;;
*)
;;
esac
printf "--- $1 ---\n" >> ${log}
set >> ${log}
printf "---------------\n" >> ${log}
|