Post Registration Questions and Functions
-
I didn’t see anything, so the answer is probably “No,” or I didn’t know how to word my search query, but I’ll ask it anyways.
Is there any way to have the questions that are asked during Full Host Inventory and Registration have any custom questions appended that won’t be overwritten anytime we update the trunk? The same goes for any scripts as well.
My goals behind asking this question are:
- Pass the MAC address through to PacketFence for auto-approval.
- Depending on the answer to the Active Directory question, if yes, then ask what OU the unit should be in.
I’ve the code already written in our .32 version of Fog or about 2 years or so, so I’m not worried about that. It may take some tweaking, but that’s fine. I just don’t want to modify a 64-bit init.xz and a 32-bit init.xz separately, only to have them both “updated” at next “git pull” & “./installsh -y”
-
Just thinking out loud on the first question (btw: I know what packetfence is/does/used it).
You want to create way to call an external url with the mac address of the device to authorize it in your network. Now the request can come from the target computer or the FOG server. You may be able to do this if you wrote a custom plugin and hooked into the registration event. I can say I don’t know how to write plugins, but I bet that is the cleanest route for you do you don’t have to mess with the inits with each release.
As for the proper OU. Is there something unique about the OU that can be calculated at deployment time? For example all computers deployed at IP subnet of 192.168.112.x go to ou “ou=madrid,dc=company,dc=com”. FOG has a way to execute custom bash scripts post image deployment but pre first windows boot. I use something similar to update the unattend.xml file with location specific setting just after partclone lays down the image.
-
@george1421 said in Post Registration Questions and Functions:
a custom plugin and hooked into the registration event.
Very interesting suggestion! I like it and will attempt some research on it!
Is there something unique about the OU that can be calculated at deployment time? For example all computers deployed at IP subnet of 192.168.112.x go to ou “ou=madrid,dc=company,dc=com”. FOG has a way to execute custom bash scripts post image deployment but pre first windows boot.
Unfortunately, no. Most all computers are imaged in a central location, and then taken to their destination. But thank you for the suggestion, though. Also, computers might have already been imaged (via vendor), and just need registration; so post image deployment won’t work in all cases.
-
her-doy…
It just hit me that I can change up the reg questions, save the xz file with a different name, and point FOG_PXE_BOOT_IMAGE[_32] to the new file in the settings. Another thread created for not thinking well…
-
I may think of a mechanism to do a “post-registrationscripts” setup that works similarly to post-download script. However, part of the registration system does not require storage information which is really what’s needed to do this properly.
Your mechanism of updating an init for yourself would work, but it does make keeping up with changes in the init’s a little more difficult, though I don’t imagine much of the changes affecting the way your init would work.
I have a script that allows me to customize init’s on the fly in the case my build system is just taking too long.
#!/bin/bash # Check for webroot if [ -n "$1" -a -e "$1" ]; then webroot="$1"; elif [ -e "/srv/http/fog" ]; then webroot="/srv/http/fog"; elif [ -e "/var/www/html/fog" ]; then webroot="/var/www/html/fog"; elif [ -e "/var/www/fog" ]; then webroot="/var/www/fog"; fi if [ ! -e "$webroot/service" ]; then echo "No service directory to work from" exit 1 fi if [ ! -e "$webroot/service/ipxe" ]; then echo "No ipxe directory to work from" exit 1 fi ipxeroot="$webroot/service/ipxe" currDirectory=`pwd` init64='' init32='' if [ ! -f "$ipxeroot/init.xz" -a ! -f "$ipxeroot/init" ]; then echo "No 64 bit init to process" init64='no' fi if [ ! -f "$ipxeroot/init_32.xz" -a ! -f "$ipxeroot/init_32" ]; then echo "No 32 bit init to process" init32='no' fi if [ -n "$init64" -a -n "$init32" ]; then echo "No init files to process" exit 1 fi if [ ! -e "$ipxeroot/tmp" ]; then mkdir $ipxeroot/tmp >/dev/null 2>&1 fi copyTrunkFiles() { svn up /root/trunk/ >/dev/null 2>&1 cp -r /root/trunk/src/buildroot/package/fog/scripts/bin/* $ipxeroot/tmp/bin/ >/dev/null 2>&1 cp -r /root/trunk/src/buildroot/package/fog/scripts/usr/* $ipxeroot/tmp/usr/ >/dev/null 2>&1 cp -r /root/trunk/src/buildroot/package/fog/scripts/etc/* $ipxeroot/tmp/etc/ >/dev/null 2>&1 cp -r /root/trunk/src/buildroot/system/skeleton/etc/* $ipxeroot/tmp/etc/ >/dev/null 2>&1 errorStat $? } mountTmpFolder() { mount -o loop $ipxeroot/$1 $ipxeroot/tmp >/dev/null 2>&1 if [ -z "$2" ]; then errorStat $? elif [ "$?" != "0" -a -f "$ipxeroot/$1" ]; then unmountTmpFolder "true" mountTmpFolder "$1" fi } unmountTmpFolder() { umount $ipxeroot/tmp >/dev/null 2>&1 if [ -z "$1" ]; then errorStat $? fi } initFSCheck() { fsck.ext2 -a $ipxeroot/$1 >/dev/null 2>&1 errorStat $? } recompressInit() { xz -9 -C crc32 >/dev/null 2>&1 < $ipxeroot/$1 > $ipxeroot/${1}.xz errorStat $? } decompressInit() { xz -d >/dev/null 2>&1 < $ipxeroot/${1}.xz > $ipxeroot/$1 errorStat $? } errorStat() { if [ "$1" != "0" ]; then echo "Failed" exit 1 fi echo "OK" } if [ -z "$init64" ]; then if [ -f "$ipxeroot/init.xz" -a ! -f "$ipxeroot/init" ]; then echo -n " * Decompressing 64 bit init..." decompressInit "init" else echo " * 64 bit init already extracted" fi echo -n " * Mounting 64 bit init..." mountTmpFolder "init" "yes" echo -n " * Copying trunk files..." copyTrunkFiles echo -n " * Unmounting init..." unmountTmpFolder echo -n " * Checking ext2 filesystem..." initFSCheck "init" echo -n " * Recompressing 64 bit Init..." recompressInit "init" fi if [ -z "$init_32" ]; then if [ -f "$ipxeroot/init_32.xz" -a ! -f "$ipxeroot/init_32" ]; then echo -n " * Decompressing 32 bit init..." decompressInit "init_32" else echo " * 32 bit init already extracted" fi echo -n " * Mounting 32 bit init..." mountTmpFolder "init_32" "yes" echo -n " * Copying trunk files..." copyTrunkFiles echo -n " * Unmounting init..." unmountTmpFolder echo -n " * Checking ext2 filesystem..." initFSCheck "init_32" echo -n " * Recompressing 32 bit Init..." recompressInit "init_32" fi
I realize this is probably not customized for your needs, but it should do what you need in a pinch. Of course you’re more than welcome to editing it.