SlideShare a Scribd company logo
UCL all of the things 
A universal config 
language for (almost) 
everything in FreeBSD 
Allan Jude -- ScaleEngine Inc. 
allanjude@freebsd.org twitter: @allanjude
Introduction 
Allan Jude 
● 12 Years as FreeBSD Server Admin 
● FreeBSD docs committer (focus: ZFS, bhyve, iscsi) 
● Architect of the ScaleEngine CDN (HTTP and Video) 
● Host of BSDNow.tv & TechSNAP.tv Podcasts 
● Extensive work with Puppet to manage our 100+ 
servers in 33 data centers in 12 countries 
● Lots of work with ZFS to manage large collections of 
videos as well as extremely large website caches (15+ 
million objects in ff*ff directories)
Impetus 
At EuroBSDCon 2014 in Sofia, Jordan Hubbard 
(jkh@freebsd.org) gave the opening keynote 
Among the recommendations for how FreeBSD 
could be improved and made easier to manage 
was to move away from the ‘one config file 
format per utility’ 
I really don’t want the one format to be XML :p
What is UCL 
● UCL -- universal configuration language 
● Inspired by the nginx (or bind) style 
configuration file 
● Fully compatible with JSON, but more liberal 
in what it accepts, so users do not have to 
write JSON 
● Can output the configuration as 
‘configuration’ (nginx style), JSON (compact 
or pretty), or YAML 
● Supports handy suffixes like k, kb, min, d
What does UCL look like? 
logical_name: { 
“somekey”: “somevalue”, 
port: 80, 
enabled: true, 
} 
something_else { 
key = value; 
interval = 5min; 
}
Why UCL is better than JSON 
● UCL can input and output JSON 
● However, UCL is less strict 
● Quoting is not required 
● Commas can be added after every element 
(smaller diffs) 
● Braces are not necessary 
● Can use = instead of : 
● Automatic array creation 
● In general, just less strict about syntax, 
writing JSON by hand is hard
Why use UCL? 
● Very flexible, so can replace many types of 
config files 
● Can express complex, structured data, 
including nesting. Also supports includes 
● Terse. Doesn’t contain a lot of excess 
formatting or syntax (like XML) 
● Human readable, and importantly, writable 
● Not whitespace sensitive like YAML 
● Already in the base system, used by pkg(8)
crontab(5) before: 
MAILTO=”” 
*/15 * * * * /usr/home/semirror/semirror.sh 
After: 
cron_name { 
command = "/usr/home/semirror/semirror.sh"; 
user = "semirror"; 
minute = "*/15"; 
hour = "*"; 
environment { 
MAILTO = ''"; 
PATH = "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"; 
} 
}
newsyslog.conf(5) before: 
/var/log/messages 644 5 100 @0101T JC 
After: 
mylogfile: { 
logfile_name: “/var/log/messages”, 
mode: 644, 
count: 6, 
size: 100kb, 
when: “@0101T” /* this could be written in crontab(5) style? */ 
flags: [ ‘C’, ‘J’], 
} 
include “/usr/local/etc/newsyslog.d/*.conf”;
Extending the concept 
● Move the defaults for stuff like newsyslog. 
conf and /etc/crontab into /etc/defaults 
● Extend things like /etc/newsyslog.d/ for 
crontab, add a /usr/local/etc/ version as well 
● If a user wants to keep more versions of 
/var/log/messages, they add /etc/newsyslog. 
d/whatever.conf and override the ‘count’ key. 
● Disable a crontab? somekey { enabled: no }
Ordering Issue 
Some configs may be sensitive to the order of 
the declarations. 
An ‘order’ key, when the configs from: 
● /etc/defaults/newsyslog.conf 
● /etc/newsyslog.conf 
● /etc/newsyslog.d/*.conf 
● /usr/local/etc/newsyslog.d/*.conf 
are combined, they are sorted by this ‘order’ 
key, which defaults to MAX, so any config block 
without an order key is sorted last.
Precedence Issues 
If the configurations will allow ‘overlays’, such that the user 
can change the values from /etc/defaults/crontab in another 
file, it may be required to specify the priority of some of the 
config blocks, to solve conflicts. For example: 
/etc/pkg/FreeBSD.conf: enabled=yes 
/usr/local/etc/pkg/repos/FreeBSD.conf: enabled=no 
/usr/local/etc/pkg/repos/something.conf: enabled=yes 
What order are they considered in? 
A priority key, sorted descendingly, so the config with 
‘priority=1’ is considered last and gets ‘the final say’ 
Secondarily sort lexicographically to resolve conflicts 
(Since I wrote this, this has been implemented in libUCL)
Moving Forward 
● Some UCL tools in base for things like: 
○ Schema Validation - maybe a tool like vipw, 
atomically update config and block if parse fails. 
libUCL uses mmap() for includes, may require 
special consideration if files shrink 
○ Config compilation - show what the final config looks 
like, all of the defaults and the multiple layers of 
config applied on top of them to show the final config 
(ala samba testparm) 
○ Getting and Setting - (see next slide)
New Toys 
● While writing these slides I came up with the idea for a tool for 
interacting with UCL config files via the command line (and via shell 
scripts) -- https://github.com/allanjude/uclcmd 
● sysrc type tool to be able to extract values in a shell script: 
uclcmd --file /etc/pkg/FreeBSD.conf --get freebsd.url 
"pkg+http://pkg.FreeBSD.org/${ABI}/latest" 
● Maybe write them as well, takes a UCL via STDIN and merges it 
with what is already in the file if it already exists 
ucl --file /usr/local/etc/pkg/repos/allan.conf --set 
developer_mode: true 
allan: { 
url: “http://pkg.scaleengine.net/${ABI}/latest”, 
} 
● Already in use: https://github.com/allanjude/bhyveucl
Podcasts 
BSDNow.tv is a weekly video podcast featuring 
News, Interviews and Tutorials about the BSD 
family of Operating Systems. Hosted by Kris 
Moore (founder of PC-BSD) and Myself. 
TechSNAP.tv is a weekly sysadmin video podcast 
covering an OS agnostic range of security and 
production issues of interest to those working, 
studying or interested in the field. 
Twitter: @allanjude Email: allanjude@freebsd.org

More Related Content

What's hot

Docker internals
Docker internalsDocker internals
Docker internals
Rohit Jnagal
 
Continuous integration with Docker and Ansible
Continuous integration with Docker and AnsibleContinuous integration with Docker and Ansible
Continuous integration with Docker and Ansible
Dmytro Slupytskyi
 
Docker practical solutions
Docker practical solutionsDocker practical solutions
Docker practical solutions
Kesav Kumar Kolla
 
Wso2 con 2014-us-tutorial-apache stratos-wso2 private paas with docker integr...
Wso2 con 2014-us-tutorial-apache stratos-wso2 private paas with docker integr...Wso2 con 2014-us-tutorial-apache stratos-wso2 private paas with docker integr...
Wso2 con 2014-us-tutorial-apache stratos-wso2 private paas with docker integr...
Lakmal Warusawithana
 
Virtual Machines and Docker
Virtual Machines and DockerVirtual Machines and Docker
Virtual Machines and Docker
Danish Khakwani
 
Introduction to Docker & CoreOS - Symfony User Group Cologne
Introduction to Docker & CoreOS - Symfony User Group CologneIntroduction to Docker & CoreOS - Symfony User Group Cologne
Introduction to Docker & CoreOS - Symfony User Group Cologne
D
 
From Docker Run To Docker Compose
From Docker Run To Docker ComposeFrom Docker Run To Docker Compose
From Docker Run To Docker Compose
Fitra Aditya
 
Red Teaming macOS Environments with Hermes the Swift Messenger
Red Teaming macOS Environments with Hermes the Swift MessengerRed Teaming macOS Environments with Hermes the Swift Messenger
Red Teaming macOS Environments with Hermes the Swift Messenger
Justin Bui
 
Logging & Metrics with Docker
Logging & Metrics with DockerLogging & Metrics with Docker
Logging & Metrics with Docker
Stefan Zier
 
Docker 102 - Immutable Infrastructure
Docker 102 - Immutable InfrastructureDocker 102 - Immutable Infrastructure
Docker 102 - Immutable Infrastructure
Adrian Otto
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
Justyna Ilczuk
 
Gentoo Linux, or Why in the World You Should Compile Everything
Gentoo Linux, or Why in the World You Should Compile EverythingGentoo Linux, or Why in the World You Should Compile Everything
Gentoo Linux, or Why in the World You Should Compile Everything
Donnie Berkholz
 
OpenZFS at LinuxCon
OpenZFS at LinuxConOpenZFS at LinuxCon
OpenZFS at LinuxCon
Matthew Ahrens
 
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
Ahmed El-Arabawy
 
Driver_linux
Driver_linuxDriver_linux
Driver_linux
Sayanton Vhaduri
 
Docker Internals - Twilio talk November 14th, 2013
Docker Internals - Twilio talk November 14th, 2013Docker Internals - Twilio talk November 14th, 2013
Docker Internals - Twilio talk November 14th, 2013
Guillaume Charmes
 
OpenWrt From Top to Bottom
OpenWrt From Top to BottomOpenWrt From Top to Bottom
OpenWrt From Top to Bottom
Kernel TLV
 
Academy PRO: Docker. Part 4
Academy PRO: Docker. Part 4Academy PRO: Docker. Part 4
Academy PRO: Docker. Part 4
Binary Studio
 
Academy PRO: Docker. Part 1
Academy PRO: Docker. Part 1Academy PRO: Docker. Part 1
Academy PRO: Docker. Part 1
Binary Studio
 
Containers are the future of the Cloud
Containers are the future of the CloudContainers are the future of the Cloud
Containers are the future of the Cloud
Pavel Odintsov
 

What's hot (20)

Docker internals
Docker internalsDocker internals
Docker internals
 
Continuous integration with Docker and Ansible
Continuous integration with Docker and AnsibleContinuous integration with Docker and Ansible
Continuous integration with Docker and Ansible
 
Docker practical solutions
Docker practical solutionsDocker practical solutions
Docker practical solutions
 
Wso2 con 2014-us-tutorial-apache stratos-wso2 private paas with docker integr...
Wso2 con 2014-us-tutorial-apache stratos-wso2 private paas with docker integr...Wso2 con 2014-us-tutorial-apache stratos-wso2 private paas with docker integr...
Wso2 con 2014-us-tutorial-apache stratos-wso2 private paas with docker integr...
 
Virtual Machines and Docker
Virtual Machines and DockerVirtual Machines and Docker
Virtual Machines and Docker
 
Introduction to Docker & CoreOS - Symfony User Group Cologne
Introduction to Docker & CoreOS - Symfony User Group CologneIntroduction to Docker & CoreOS - Symfony User Group Cologne
Introduction to Docker & CoreOS - Symfony User Group Cologne
 
From Docker Run To Docker Compose
From Docker Run To Docker ComposeFrom Docker Run To Docker Compose
From Docker Run To Docker Compose
 
Red Teaming macOS Environments with Hermes the Swift Messenger
Red Teaming macOS Environments with Hermes the Swift MessengerRed Teaming macOS Environments with Hermes the Swift Messenger
Red Teaming macOS Environments with Hermes the Swift Messenger
 
Logging & Metrics with Docker
Logging & Metrics with DockerLogging & Metrics with Docker
Logging & Metrics with Docker
 
Docker 102 - Immutable Infrastructure
Docker 102 - Immutable InfrastructureDocker 102 - Immutable Infrastructure
Docker 102 - Immutable Infrastructure
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 
Gentoo Linux, or Why in the World You Should Compile Everything
Gentoo Linux, or Why in the World You Should Compile EverythingGentoo Linux, or Why in the World You Should Compile Everything
Gentoo Linux, or Why in the World You Should Compile Everything
 
OpenZFS at LinuxCon
OpenZFS at LinuxConOpenZFS at LinuxCon
OpenZFS at LinuxCon
 
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
Embedded Systems: Lecture 13: Introduction to GNU Toolchain (Build Tools)
 
Driver_linux
Driver_linuxDriver_linux
Driver_linux
 
Docker Internals - Twilio talk November 14th, 2013
Docker Internals - Twilio talk November 14th, 2013Docker Internals - Twilio talk November 14th, 2013
Docker Internals - Twilio talk November 14th, 2013
 
OpenWrt From Top to Bottom
OpenWrt From Top to BottomOpenWrt From Top to Bottom
OpenWrt From Top to Bottom
 
Academy PRO: Docker. Part 4
Academy PRO: Docker. Part 4Academy PRO: Docker. Part 4
Academy PRO: Docker. Part 4
 
Academy PRO: Docker. Part 1
Academy PRO: Docker. Part 1Academy PRO: Docker. Part 1
Academy PRO: Docker. Part 1
 
Containers are the future of the Cloud
Containers are the future of the CloudContainers are the future of the Cloud
Containers are the future of the Cloud
 

Viewers also liked

Harmonisation of malaria control in nigeria
Harmonisation of malaria control in nigeriaHarmonisation of malaria control in nigeria
Harmonisation of malaria control in nigeria
Malaria Consortium
 
Delivered management of abdominal trauma
Delivered management of abdominal traumaDelivered management of abdominal trauma
Delivered management of abdominal trauma
Antonio Calderon
 
TexTerpreting for Kitelab
TexTerpreting for KitelabTexTerpreting for Kitelab
TexTerpreting for Kitelab
Gabriel Blessing
 
Trichuris trichiura
Trichuris trichiuraTrichuris trichiura
Trichuris trichiura
Mohammed Abo Yousef
 
Presentation chief minister part i
Presentation chief minister part iPresentation chief minister part i
Presentation chief minister part i
Prof Dr M Subhan Qureshi
 
Fatturazione elettronica verso la Pubblica Amministrazione
Fatturazione elettronica verso la Pubblica AmministrazioneFatturazione elettronica verso la Pubblica Amministrazione
Fatturazione elettronica verso la Pubblica Amministrazione
it Consult
 
Ppt of edmund hillary the mountaineer
Ppt of edmund hillary the mountaineerPpt of edmund hillary the mountaineer
Ppt of edmund hillary the mountaineerDiksha Shukla
 
Case Study Solvay
Case Study Solvay Case Study Solvay
Case Study Solvay
it Consult
 
josh 6: the Organization Intelligence software
josh 6: the Organization Intelligence software josh 6: the Organization Intelligence software
josh 6: the Organization Intelligence software
it Consult
 
DATA DRIVEN RETAIL SUCCESS White Paper
DATA DRIVEN RETAIL SUCCESS White PaperDATA DRIVEN RETAIL SUCCESS White Paper
DATA DRIVEN RETAIL SUCCESS White Paper
Ken Prokopec
 
Dsp 2015 - conference brochure (1)
Dsp 2015 - conference brochure (1)Dsp 2015 - conference brochure (1)
Dsp 2015 - conference brochure (1)
Prof Dr M Subhan Qureshi
 
5 Strategies for choosing a worthy CNAM provider
5 Strategies for choosing a worthy CNAM provider5 Strategies for choosing a worthy CNAM provider
5 Strategies for choosing a worthy CNAM provider
Flowroute
 
DAVIDRIALNIETO
DAVIDRIALNIETODAVIDRIALNIETO
DAVIDRIALNIETO
davidrialnieto
 
Sales supervisor cover letter
Sales supervisor cover letterSales supervisor cover letter
Sales supervisor cover letter
pereztracy615
 
cara menginstal redhat berbasing text by fitria utami
cara menginstal redhat berbasing text by fitria utamicara menginstal redhat berbasing text by fitria utami
cara menginstal redhat berbasing text by fitria utamifitriautami123
 
CDays14 - CPP05 - Standard Library: STL e boost, la BCL di C++
CDays14 - CPP05 - Standard Library: STL e boost, la BCL di C++CDays14 - CPP05 - Standard Library: STL e boost, la BCL di C++
CDays14 - CPP05 - Standard Library: STL e boost, la BCL di C++
Alessio Gogna
 
question three media
question three media question three media
question three media
katiemarie1223
 
Case Study FPZ Blower Technology
Case Study FPZ Blower TechnologyCase Study FPZ Blower Technology
Case Study FPZ Blower Technology
it Consult
 
Network analysis, v2.2
Network analysis, v2.2Network analysis, v2.2
Network analysis, v2.2
aidbel
 

Viewers also liked (20)

Harmonisation of malaria control in nigeria
Harmonisation of malaria control in nigeriaHarmonisation of malaria control in nigeria
Harmonisation of malaria control in nigeria
 
Delivered management of abdominal trauma
Delivered management of abdominal traumaDelivered management of abdominal trauma
Delivered management of abdominal trauma
 
TexTerpreting for Kitelab
TexTerpreting for KitelabTexTerpreting for Kitelab
TexTerpreting for Kitelab
 
Trichuris trichiura
Trichuris trichiuraTrichuris trichiura
Trichuris trichiura
 
Presentation chief minister part i
Presentation chief minister part iPresentation chief minister part i
Presentation chief minister part i
 
Fatturazione elettronica verso la Pubblica Amministrazione
Fatturazione elettronica verso la Pubblica AmministrazioneFatturazione elettronica verso la Pubblica Amministrazione
Fatturazione elettronica verso la Pubblica Amministrazione
 
Ppt of edmund hillary the mountaineer
Ppt of edmund hillary the mountaineerPpt of edmund hillary the mountaineer
Ppt of edmund hillary the mountaineer
 
Case Study Solvay
Case Study Solvay Case Study Solvay
Case Study Solvay
 
josh 6: the Organization Intelligence software
josh 6: the Organization Intelligence software josh 6: the Organization Intelligence software
josh 6: the Organization Intelligence software
 
DATA DRIVEN RETAIL SUCCESS White Paper
DATA DRIVEN RETAIL SUCCESS White PaperDATA DRIVEN RETAIL SUCCESS White Paper
DATA DRIVEN RETAIL SUCCESS White Paper
 
Dsp 2015 - conference brochure (1)
Dsp 2015 - conference brochure (1)Dsp 2015 - conference brochure (1)
Dsp 2015 - conference brochure (1)
 
5 Strategies for choosing a worthy CNAM provider
5 Strategies for choosing a worthy CNAM provider5 Strategies for choosing a worthy CNAM provider
5 Strategies for choosing a worthy CNAM provider
 
DAVIDRIALNIETO
DAVIDRIALNIETODAVIDRIALNIETO
DAVIDRIALNIETO
 
Sales supervisor cover letter
Sales supervisor cover letterSales supervisor cover letter
Sales supervisor cover letter
 
cara menginstal redhat berbasing text by fitria utami
cara menginstal redhat berbasing text by fitria utamicara menginstal redhat berbasing text by fitria utami
cara menginstal redhat berbasing text by fitria utami
 
2
22
2
 
CDays14 - CPP05 - Standard Library: STL e boost, la BCL di C++
CDays14 - CPP05 - Standard Library: STL e boost, la BCL di C++CDays14 - CPP05 - Standard Library: STL e boost, la BCL di C++
CDays14 - CPP05 - Standard Library: STL e boost, la BCL di C++
 
question three media
question three media question three media
question three media
 
Case Study FPZ Blower Technology
Case Study FPZ Blower TechnologyCase Study FPZ Blower Technology
Case Study FPZ Blower Technology
 
Network analysis, v2.2
Network analysis, v2.2Network analysis, v2.2
Network analysis, v2.2
 

Similar to UCL All of the Things (MeetBSD California 2014 Lightning Talk)

Tips and Tricks for Increased Development Efficiency
Tips and Tricks for Increased Development EfficiencyTips and Tricks for Increased Development Efficiency
Tips and Tricks for Increased Development Efficiency
Olivier Bourgeois
 
UltraESB - Installation and Configuration
UltraESB - Installation and ConfigurationUltraESB - Installation and Configuration
UltraESB - Installation and Configuration
AdroitLogic
 
Introduction to containers
Introduction to containersIntroduction to containers
Introduction to containers
Nitish Jadia
 
Balisage - EXPath Packaging
Balisage - EXPath PackagingBalisage - EXPath Packaging
Balisage - EXPath Packaging
Florent Georges
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los Angeles
Jérôme Petazzoni
 
Linux Internals - Part I
Linux Internals - Part ILinux Internals - Part I
Docker and Containers for Development and Deployment — SCALE12X
Docker and Containers for Development and Deployment — SCALE12XDocker and Containers for Development and Deployment — SCALE12X
Docker and Containers for Development and Deployment — SCALE12X
Jérôme Petazzoni
 
Development and deployment with composer and kite
Development and deployment with composer and kiteDevelopment and deployment with composer and kite
Development and deployment with composer and kite
Christian Opitz
 
U-Boot - An universal bootloader
U-Boot - An universal bootloader U-Boot - An universal bootloader
U-Boot - An universal bootloader
Emertxe Information Technologies Pvt Ltd
 
An Introduction To Linux
An Introduction To LinuxAn Introduction To Linux
An Introduction To Linux
Ishan A B Ambanwela
 
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet
 
Purdue CS354 Operating Systems 2008
Purdue CS354 Operating Systems 2008Purdue CS354 Operating Systems 2008
Purdue CS354 Operating Systems 2008
guestd9065
 
LISA15: systemd, the Next-Generation Linux System Manager
LISA15: systemd, the Next-Generation Linux System Manager LISA15: systemd, the Next-Generation Linux System Manager
LISA15: systemd, the Next-Generation Linux System Manager
Alison Chaiken
 
LAS16-209: Finished and Upcoming Projects in LMG
LAS16-209: Finished and Upcoming Projects in LMGLAS16-209: Finished and Upcoming Projects in LMG
LAS16-209: Finished and Upcoming Projects in LMG
Linaro
 
Workflow story: Theory versus Practice in large enterprises by Marcin Piebiak
Workflow story: Theory versus Practice in large enterprises by Marcin PiebiakWorkflow story: Theory versus Practice in large enterprises by Marcin Piebiak
Workflow story: Theory versus Practice in large enterprises by Marcin Piebiak
NETWAYS
 
Workflow story: Theory versus practice in Large Enterprises
Workflow story: Theory versus practice in Large EnterprisesWorkflow story: Theory versus practice in Large Enterprises
Workflow story: Theory versus practice in Large Enterprises
Puppet
 
Docker_AGH_v0.1.3
Docker_AGH_v0.1.3Docker_AGH_v0.1.3
Docker_AGH_v0.1.3
Witold 'Ficio' Kopel
 
Using Ansible for Deploying to Cloud Environments
Using Ansible for Deploying to Cloud EnvironmentsUsing Ansible for Deploying to Cloud Environments
Using Ansible for Deploying to Cloud Environments
ahamilton55
 
Drupal Best Practices
Drupal Best PracticesDrupal Best Practices
Drupal Best Practices
Mukesh Agarwal
 
#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to Ansible#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to Ansible
Cédric Delgehier
 

Similar to UCL All of the Things (MeetBSD California 2014 Lightning Talk) (20)

Tips and Tricks for Increased Development Efficiency
Tips and Tricks for Increased Development EfficiencyTips and Tricks for Increased Development Efficiency
Tips and Tricks for Increased Development Efficiency
 
UltraESB - Installation and Configuration
UltraESB - Installation and ConfigurationUltraESB - Installation and Configuration
UltraESB - Installation and Configuration
 
Introduction to containers
Introduction to containersIntroduction to containers
Introduction to containers
 
Balisage - EXPath Packaging
Balisage - EXPath PackagingBalisage - EXPath Packaging
Balisage - EXPath Packaging
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los Angeles
 
Linux Internals - Part I
Linux Internals - Part ILinux Internals - Part I
Linux Internals - Part I
 
Docker and Containers for Development and Deployment — SCALE12X
Docker and Containers for Development and Deployment — SCALE12XDocker and Containers for Development and Deployment — SCALE12X
Docker and Containers for Development and Deployment — SCALE12X
 
Development and deployment with composer and kite
Development and deployment with composer and kiteDevelopment and deployment with composer and kite
Development and deployment with composer and kite
 
U-Boot - An universal bootloader
U-Boot - An universal bootloader U-Boot - An universal bootloader
U-Boot - An universal bootloader
 
An Introduction To Linux
An Introduction To LinuxAn Introduction To Linux
An Introduction To Linux
 
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3 Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
Puppet Camp Seattle 2014: Docker and Puppet: 1+1=3
 
Purdue CS354 Operating Systems 2008
Purdue CS354 Operating Systems 2008Purdue CS354 Operating Systems 2008
Purdue CS354 Operating Systems 2008
 
LISA15: systemd, the Next-Generation Linux System Manager
LISA15: systemd, the Next-Generation Linux System Manager LISA15: systemd, the Next-Generation Linux System Manager
LISA15: systemd, the Next-Generation Linux System Manager
 
LAS16-209: Finished and Upcoming Projects in LMG
LAS16-209: Finished and Upcoming Projects in LMGLAS16-209: Finished and Upcoming Projects in LMG
LAS16-209: Finished and Upcoming Projects in LMG
 
Workflow story: Theory versus Practice in large enterprises by Marcin Piebiak
Workflow story: Theory versus Practice in large enterprises by Marcin PiebiakWorkflow story: Theory versus Practice in large enterprises by Marcin Piebiak
Workflow story: Theory versus Practice in large enterprises by Marcin Piebiak
 
Workflow story: Theory versus practice in Large Enterprises
Workflow story: Theory versus practice in Large EnterprisesWorkflow story: Theory versus practice in Large Enterprises
Workflow story: Theory versus practice in Large Enterprises
 
Docker_AGH_v0.1.3
Docker_AGH_v0.1.3Docker_AGH_v0.1.3
Docker_AGH_v0.1.3
 
Using Ansible for Deploying to Cloud Environments
Using Ansible for Deploying to Cloud EnvironmentsUsing Ansible for Deploying to Cloud Environments
Using Ansible for Deploying to Cloud Environments
 
Drupal Best Practices
Drupal Best PracticesDrupal Best Practices
Drupal Best Practices
 
#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to Ansible#OktoCampus - Workshop : An introduction to Ansible
#OktoCampus - Workshop : An introduction to Ansible
 

More from iXsystems

The True Story of FreeNAS
The True Story of FreeNASThe True Story of FreeNAS
The True Story of FreeNAS
iXsystems
 
BayLISA - FreeNAS 10 by Jordan Hubbard
BayLISA - FreeNAS 10 by Jordan HubbardBayLISA - FreeNAS 10 by Jordan Hubbard
BayLISA - FreeNAS 10 by Jordan Hubbard
iXsystems
 
History of ZFS (MeetBSD California 2016)
History of ZFS (MeetBSD California 2016)History of ZFS (MeetBSD California 2016)
History of ZFS (MeetBSD California 2016)
iXsystems
 
PCI Pass-through - FreeBSD VM on Hyper-V (MeetBSD California 2016)
PCI Pass-through - FreeBSD VM on Hyper-V (MeetBSD California 2016)PCI Pass-through - FreeBSD VM on Hyper-V (MeetBSD California 2016)
PCI Pass-through - FreeBSD VM on Hyper-V (MeetBSD California 2016)
iXsystems
 
FreeNAS 10: Challenges of Building a Modern Storage Appliance based on FreeBS...
FreeNAS 10: Challenges of Building a Modern Storage Appliance based on FreeBS...FreeNAS 10: Challenges of Building a Modern Storage Appliance based on FreeBS...
FreeNAS 10: Challenges of Building a Modern Storage Appliance based on FreeBS...
iXsystems
 
Netflix Update (MeetBSD California 2014 Lightning Talk)
Netflix Update (MeetBSD California 2014 Lightning Talk)Netflix Update (MeetBSD California 2014 Lightning Talk)
Netflix Update (MeetBSD California 2014 Lightning Talk)
iXsystems
 
600M+ Unsuspecting FreeBSD Users (MeetBSD California 2014)
600M+ Unsuspecting FreeBSD Users (MeetBSD California 2014)600M+ Unsuspecting FreeBSD Users (MeetBSD California 2014)
600M+ Unsuspecting FreeBSD Users (MeetBSD California 2014)
iXsystems
 
PBI v10: Application Management Made Easy by Ken Moore
PBI v10: Application Management Made Easy by Ken MoorePBI v10: Application Management Made Easy by Ken Moore
PBI v10: Application Management Made Easy by Ken Moore
iXsystems
 
Introduction to FreeNAS development by John Hixson
Introduction to FreeNAS development by John HixsonIntroduction to FreeNAS development by John Hixson
Introduction to FreeNAS development by John Hixson
iXsystems
 
Jenkins, Bhyve, and Webdriver: Continuous Integration testing on FreeNAS by C...
Jenkins, Bhyve, and Webdriver: Continuous Integration testing on FreeNAS by C...Jenkins, Bhyve, and Webdriver: Continuous Integration testing on FreeNAS by C...
Jenkins, Bhyve, and Webdriver: Continuous Integration testing on FreeNAS by C...
iXsystems
 

More from iXsystems (10)

The True Story of FreeNAS
The True Story of FreeNASThe True Story of FreeNAS
The True Story of FreeNAS
 
BayLISA - FreeNAS 10 by Jordan Hubbard
BayLISA - FreeNAS 10 by Jordan HubbardBayLISA - FreeNAS 10 by Jordan Hubbard
BayLISA - FreeNAS 10 by Jordan Hubbard
 
History of ZFS (MeetBSD California 2016)
History of ZFS (MeetBSD California 2016)History of ZFS (MeetBSD California 2016)
History of ZFS (MeetBSD California 2016)
 
PCI Pass-through - FreeBSD VM on Hyper-V (MeetBSD California 2016)
PCI Pass-through - FreeBSD VM on Hyper-V (MeetBSD California 2016)PCI Pass-through - FreeBSD VM on Hyper-V (MeetBSD California 2016)
PCI Pass-through - FreeBSD VM on Hyper-V (MeetBSD California 2016)
 
FreeNAS 10: Challenges of Building a Modern Storage Appliance based on FreeBS...
FreeNAS 10: Challenges of Building a Modern Storage Appliance based on FreeBS...FreeNAS 10: Challenges of Building a Modern Storage Appliance based on FreeBS...
FreeNAS 10: Challenges of Building a Modern Storage Appliance based on FreeBS...
 
Netflix Update (MeetBSD California 2014 Lightning Talk)
Netflix Update (MeetBSD California 2014 Lightning Talk)Netflix Update (MeetBSD California 2014 Lightning Talk)
Netflix Update (MeetBSD California 2014 Lightning Talk)
 
600M+ Unsuspecting FreeBSD Users (MeetBSD California 2014)
600M+ Unsuspecting FreeBSD Users (MeetBSD California 2014)600M+ Unsuspecting FreeBSD Users (MeetBSD California 2014)
600M+ Unsuspecting FreeBSD Users (MeetBSD California 2014)
 
PBI v10: Application Management Made Easy by Ken Moore
PBI v10: Application Management Made Easy by Ken MoorePBI v10: Application Management Made Easy by Ken Moore
PBI v10: Application Management Made Easy by Ken Moore
 
Introduction to FreeNAS development by John Hixson
Introduction to FreeNAS development by John HixsonIntroduction to FreeNAS development by John Hixson
Introduction to FreeNAS development by John Hixson
 
Jenkins, Bhyve, and Webdriver: Continuous Integration testing on FreeNAS by C...
Jenkins, Bhyve, and Webdriver: Continuous Integration testing on FreeNAS by C...Jenkins, Bhyve, and Webdriver: Continuous Integration testing on FreeNAS by C...
Jenkins, Bhyve, and Webdriver: Continuous Integration testing on FreeNAS by C...
 

Recently uploaded

Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 

Recently uploaded (20)

Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 

UCL All of the Things (MeetBSD California 2014 Lightning Talk)

  • 1. UCL all of the things A universal config language for (almost) everything in FreeBSD Allan Jude -- ScaleEngine Inc. allanjude@freebsd.org twitter: @allanjude
  • 2. Introduction Allan Jude ● 12 Years as FreeBSD Server Admin ● FreeBSD docs committer (focus: ZFS, bhyve, iscsi) ● Architect of the ScaleEngine CDN (HTTP and Video) ● Host of BSDNow.tv & TechSNAP.tv Podcasts ● Extensive work with Puppet to manage our 100+ servers in 33 data centers in 12 countries ● Lots of work with ZFS to manage large collections of videos as well as extremely large website caches (15+ million objects in ff*ff directories)
  • 3. Impetus At EuroBSDCon 2014 in Sofia, Jordan Hubbard (jkh@freebsd.org) gave the opening keynote Among the recommendations for how FreeBSD could be improved and made easier to manage was to move away from the ‘one config file format per utility’ I really don’t want the one format to be XML :p
  • 4. What is UCL ● UCL -- universal configuration language ● Inspired by the nginx (or bind) style configuration file ● Fully compatible with JSON, but more liberal in what it accepts, so users do not have to write JSON ● Can output the configuration as ‘configuration’ (nginx style), JSON (compact or pretty), or YAML ● Supports handy suffixes like k, kb, min, d
  • 5. What does UCL look like? logical_name: { “somekey”: “somevalue”, port: 80, enabled: true, } something_else { key = value; interval = 5min; }
  • 6. Why UCL is better than JSON ● UCL can input and output JSON ● However, UCL is less strict ● Quoting is not required ● Commas can be added after every element (smaller diffs) ● Braces are not necessary ● Can use = instead of : ● Automatic array creation ● In general, just less strict about syntax, writing JSON by hand is hard
  • 7. Why use UCL? ● Very flexible, so can replace many types of config files ● Can express complex, structured data, including nesting. Also supports includes ● Terse. Doesn’t contain a lot of excess formatting or syntax (like XML) ● Human readable, and importantly, writable ● Not whitespace sensitive like YAML ● Already in the base system, used by pkg(8)
  • 8. crontab(5) before: MAILTO=”” */15 * * * * /usr/home/semirror/semirror.sh After: cron_name { command = "/usr/home/semirror/semirror.sh"; user = "semirror"; minute = "*/15"; hour = "*"; environment { MAILTO = ''"; PATH = "/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"; } }
  • 9. newsyslog.conf(5) before: /var/log/messages 644 5 100 @0101T JC After: mylogfile: { logfile_name: “/var/log/messages”, mode: 644, count: 6, size: 100kb, when: “@0101T” /* this could be written in crontab(5) style? */ flags: [ ‘C’, ‘J’], } include “/usr/local/etc/newsyslog.d/*.conf”;
  • 10. Extending the concept ● Move the defaults for stuff like newsyslog. conf and /etc/crontab into /etc/defaults ● Extend things like /etc/newsyslog.d/ for crontab, add a /usr/local/etc/ version as well ● If a user wants to keep more versions of /var/log/messages, they add /etc/newsyslog. d/whatever.conf and override the ‘count’ key. ● Disable a crontab? somekey { enabled: no }
  • 11. Ordering Issue Some configs may be sensitive to the order of the declarations. An ‘order’ key, when the configs from: ● /etc/defaults/newsyslog.conf ● /etc/newsyslog.conf ● /etc/newsyslog.d/*.conf ● /usr/local/etc/newsyslog.d/*.conf are combined, they are sorted by this ‘order’ key, which defaults to MAX, so any config block without an order key is sorted last.
  • 12. Precedence Issues If the configurations will allow ‘overlays’, such that the user can change the values from /etc/defaults/crontab in another file, it may be required to specify the priority of some of the config blocks, to solve conflicts. For example: /etc/pkg/FreeBSD.conf: enabled=yes /usr/local/etc/pkg/repos/FreeBSD.conf: enabled=no /usr/local/etc/pkg/repos/something.conf: enabled=yes What order are they considered in? A priority key, sorted descendingly, so the config with ‘priority=1’ is considered last and gets ‘the final say’ Secondarily sort lexicographically to resolve conflicts (Since I wrote this, this has been implemented in libUCL)
  • 13. Moving Forward ● Some UCL tools in base for things like: ○ Schema Validation - maybe a tool like vipw, atomically update config and block if parse fails. libUCL uses mmap() for includes, may require special consideration if files shrink ○ Config compilation - show what the final config looks like, all of the defaults and the multiple layers of config applied on top of them to show the final config (ala samba testparm) ○ Getting and Setting - (see next slide)
  • 14. New Toys ● While writing these slides I came up with the idea for a tool for interacting with UCL config files via the command line (and via shell scripts) -- https://github.com/allanjude/uclcmd ● sysrc type tool to be able to extract values in a shell script: uclcmd --file /etc/pkg/FreeBSD.conf --get freebsd.url "pkg+http://pkg.FreeBSD.org/${ABI}/latest" ● Maybe write them as well, takes a UCL via STDIN and merges it with what is already in the file if it already exists ucl --file /usr/local/etc/pkg/repos/allan.conf --set developer_mode: true allan: { url: “http://pkg.scaleengine.net/${ABI}/latest”, } ● Already in use: https://github.com/allanjude/bhyveucl
  • 15. Podcasts BSDNow.tv is a weekly video podcast featuring News, Interviews and Tutorials about the BSD family of Operating Systems. Hosted by Kris Moore (founder of PC-BSD) and Myself. TechSNAP.tv is a weekly sysadmin video podcast covering an OS agnostic range of security and production issues of interest to those working, studying or interested in the field. Twitter: @allanjude Email: allanjude@freebsd.org