Problem with python on FreeBSD 12 RC1
When cloudbaseinit run, python crash with this log stack.
Starting local daemons:2018-11-22 00:02:29.890 673 CRITICAL cloudbaseinit [-] AttributeError: Undefined symbol "ERR_load_crypto_strings"
2018-11-22 00:02:29.890 673 TRACE cloudbaseinit Traceback (most recent call last):
2018-11-22 00:02:29.890 673 TRACE cloudbaseinit File "/root/bsd-cloudinit/run.py", line 3, in
Confirming the same issue also with 12 released two days ago.
#!/bin/csh #bsd-cloudinit workaround
#usage #echo /root/bsd-cloudinit >> /etc/rc.local #chmod u+x /root/bsd-cloudinit
set PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin export $PATH
#disk_resize gpart recover vtbd0 gpart resize -i 2 vtbd0 growfs -y vtbd0p2
#set passwordless sudo echo 'freebsd ALL=(ALL) NOPASSWD: ALL' > /usr/local/etc/sudoers.d/10-cloudinit
#set_key fetch http://169.254.169.254/openstack/latest/meta_data.json -q -o - | jq -r '.keys[] |.data' > /home/freebsd/.ssh/authorized_keys
#set_hostname
set fqdn=fetch http://169.254.169.254/openstack/latest/meta_data.json -q -o - | jq '.hostname' | sed 's/.novalocal//g'
sed -i "" "s/hostname.*/hostname=$fqdn/g" /etc/rc.conf
hostname echo $fqdn | tr -d '"'
#set root passwd pw mod user root -w random > /dev/null
#run userdata fetch http://169.254.169.254/latest/user-data -q -o - | sh
#make clean set history = 0 ssh-keygen -A
#do Cheshire Cat sed -i "" "s/.*bsd-cloudinit//g" /etc/rc.local rm -f /root/bsd-cloudinit
This is almost certainly due to FreeBSD 12 using OpenSSL 1.1.1. ERR_load_crypto_strings is deprecated:
https://www.openssl.org/docs/man1.1.1/man3/SSL_load_error_strings.html
I'm not clued up enough on OpenSSL to propose a fix though. But I do note the same issue exists in the original cloudbase-init, so maybe it'll get fixed there at some point:
https://github.com/openstack/cloudbase-init/blob/master/cloudbaseinit/utils/crypt.py
After install bsd-cloudinit:
- Install OpenSSL1.0.2 on /usr/ports/security/openssl port
- Edit this file: /root/bsd-cloudinit/cloudbaseinit/utils/crypt.py
Replace
openssl_lib_path = ctypes.util.find_library("ssl")byopenssl_lib_path = "/usr/local/lib/libssl.so"Finish
Maybe this fix for cloudbase-init will help?
https://github.com/cloudbase/cloudbase-init/commit/a2434e40e0938f120b8c26fee084143c7896dc10
@tdb I tried it, but could not create the freebsd user and could not expand the hard disk capacity when start instance
@h5t4 Thank you very much this one helped!
I added a few improvements:
#!/bin/csh
#bsd-cloudinit workaround
#usage
#echo /root/bsd-cloudinit >> /etc/rc.local
#chmod u+x /root/bsd-cloudinit
set PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin
export $PATH
#disk_resize
gpart recover vtbd0
gpart resize -i 2 vtbd0
growfs -y vtbd0p2
#install needed packages
export ASSUME_ALWAYS_YES=yes
pkg install sudo jq
#create freebsd user
pw useradd -n freebsd || true
#create home directory and .ssh
mkdir -p /home/freebsd/.ssh/
chown -R freebsd:freebsd /home/freebsd
#set passwordless sudo
echo 'freebsd ALL=(ALL) NOPASSWD: ALL' > /usr/local/etc/sudoers.d/10-cloudinit
#set_key
fetch http://169.254.169.254/openstack/latest/meta_data.json -q -o - | jq -r '.keys[] |.data' > /home/freebsd/.ssh/authorized_keys
#set_hostname
set fqdn=`fetch http://169.254.169.254/openstack/latest/meta_data.json -q -o - | jq '.hostname' | sed 's/.novalocal//g'`
sed -i "" "s/hostname.*/hostname=$fqdn/g" /etc/rc.conf
hostname `echo $fqdn | tr -d '"'`
#set root passwd
pw mod user root -w random > /dev/null
#run userdata
fetch http://169.254.169.254/latest/user-data -q -o - | sh
#make clean
set history = 0
ssh-keygen -A
#do Cheshire Cat
sed -i "" "s/.*bsd-cloudinit//g" /etc/rc.local
rm -f /root/bsd-cloudinit
Hi, @br-olf How should I use this script? where should I put it if I want to make a cloud template image for OpenStack?
root@hack:/ # head -n 3 /root/bsd-cloudinit #!/bin/csh #bsd-cloudinit workaround
@EhsanSaZ copy the script to the file /root/bsd-cloudinit and look at line 4-6 in the script ;-)