SlideShare a Scribd company logo
Python on FreeBSD
Li-Wen Hsu <lwhsu@{lwhsu,FreeBSD}.org>
          PyCon Taiwan 2012
Who is this ↘
lwhsu:
        2006 開始接觸 Python
 2007 得到 FreeBSD ports commit bit
2008 Sysadm & Instructor at CS.NCTU
          2009 國軍 online
      2010~ 菜鳥碼農+修電腦的

另外也是管 {ftp,www,cvsup,anoncvs,
 portsnap,update}.tw.freebsd.org 的
</開場白>
Python
   on
FreeBSD
What is
FreeBSD?
The FreeBSD Project
• FreeBSD is an advanced operating system
  derived from BSD, the version of UNIX®
  developed at the University of California,
  Berkeley.
  o http://www.freebsd.org/about.html
Who’s using FreeBSD?
• FreeBSD is used in the devices
  from the world’s big companies:
  o   Apple
  o   Blue Coat
  o   Cisco
  o   F5 Networks
  o   Juniper
  o   NetApp
  o   Sony’s PlayStation 3
Who’s also using FreeBSD?
• FreeBSD is also used to power
  some of the busiest sites on
  Internet:
  o   Apache
  o   Netflix
  o   Pixnet
  o   WhatsApp
  o   Yahoo!
  o   Yandex
More?
• Projects based on FreeBSD
 o   PC-BSD
 o   m0n0wall
 o   psSense
 o   FreeNAS
 o   Debian GNU/kFreeBSD
 o   Gentoo/FreeBSD
FreeBSD: The Good Parts
•   BSD License                        • TrustedBSD MAC
•   GEOM                                 Framework
•   Netgraph                           • TrustedBSD Audit
•   Jail                               • LLVM & Clang
•   ZFS                                • Ports system
•   DTrace                             • And more…




http://www.freebsd.org/features.html
</FreeBSD>

http://wiki.freebsd.org/Myths
<FreeBSD+Python>
Origin
• /usr/ports/lang/python/Makefile:

# New ports collection makefile for: python
# Date created:       08 August 1995
# Whom:             jkh




                  "Director of Engineering of Unix Technologies" at Apple
python@FreeBSD.org
• Mailing list freebsd-python@FreeBSD.org
  o   FreeBSD-specific Python issues
  o   Founded in January 2004
  o   http://lists.freebsd.org/mailman/listinfo/freebsd-python
  o   Maintaining python and python related ports, except py-qt and
      py-gtk
        • gnome@FreeBSD.org
        • kde@FreeBSD.org
python@FreeBSD.org
• Wiki
  o   http://wiki.freebsd.org/Python
  o   Who has the “Hat”
  o   Action items
  o   Contact information

• IRC
  o #freebsd-python on FreeNode
Friends of
    python@FreeBSD.org
• zope@FreeBSD.org
  o Zope for FreeBSD -- porting and maintaining
  o http://lists.freebsd.org/mailman/listinfo/freebsd-zope
  o Founded in April 2012


• M_FBSD.python at bbs.cs.nctu.edu.tw
python@FreeBSD.org
• People
 o   alexbl (alumni)   o   perky (alumni)
 o   clsung (Taiwan)   o   rm
 o   lwhsu (Taiwan)    o   sunpoet (Taiwan)
 o   miwi              o   wen
 o   nivit             o   yzlin (Taiwan)
Install Python on FreeBSD
• Via ports system
  o cd /usr/ports/lang/python
  o make install clean
Install Python on FreeBSD
• Ports options
Compiling...




http://xkcd.com/303/
import antigravity




http://xkcd.com/353/
Install Python on FreeBSD
• Via package system
 o pkg_add -r python
Install Python on FreeBSD
• Via package system (advanced)
 o setenv PACKAGEROOT http://ftp.tw.freebsd.org
 o setenv PACKAGESITE
   http://ftp.tw.freebsd.org/pub/FreeBSD/ports/`un
   ame -p`/packages-`uname -r | cut -d - -f 1,2 | tr
   "[:upper:]" "[:lower:]"`/Latest/
 o pkg_add -r python
Install Python on FreeBSD
• In the (on so far) future:
• Pkgng
  o pkg install python
Wait, I have a question!
• Q: Why compile Python myself?
• A:
  o Optimize for your system
  o Customize build options
  o Easier to hack into Python in the system
Wait, I have a question!
• Q: Do I really need to compile myself
  on *every* machine I want to deploy?
• A: Build once, install everywhere.
  o cd /usr/ports/lang/python
  o make package
      • /usr/ports/packages/lang/python-2.7,2.tbz
  o install
      • pkg_add python-2.7,2.tbz
Run Python on FreeBSD
• In /usr/ports          • Also in /usr/ports
  o lang/python            o lang/jython
      • (meta package)     o lang/pypy
  o lang/python24
                           o lang/ironpython
  o lang/python25
  o lang/python26
                           o devel/ipython
  o lang/python27
  o lang/python31
  o lang/python32
Run many Python
     versions on FreeBSD
• /usr/local/bin/python
  o A symbolic link to default version
  o PYTHON_DEFAULT_VERSION
     • Can be manually defined in /etc/make.conf
     • Possible values: python{2.4,2.5,2.6,2.7,3.1,3.2}

• You can install as many different
  of Python versions you want
  o just install via /usr/ports/lang/python*
  o First installed Python version will be the default
Run many Python
     versions on FreeBSD
• Install modules for different python
  versions
  o cd /usr/ports/foo/py-bar
  o make PYTHON_VERSION=python2.6 install clean

  o This is still work in progress, there might be some
    minor errors.
     • For modules install scripts in bin/
Wait, I have a question!
• Q: there is XXX, why do I need ports to
  install python modules?
  o (XXX=distutils, setuptools, distribute, distutils2, pip)

• A:
  o For better integration with system
  o Do more complex deploy
  o Ex: install web applications like reviewboard, trac
     • A system only consists with python and python module
     • Also apache/nginx, mod_wsgi, etc.
Develop with Python on
        FreeBSD
• virtualenv + Jenkins
  o devel/py-virtualenv
  o devel/jenkins


• Use virtualenv in jenkins, make sure
  clean dependency.
• Have a job to build a virtualenv that is
  usable by other jobs.
Develop with Python on
        FreeBSD
• ZFS + jail
• Jail
  o Light weight virtual machine
  o /etc/rc.conf
      • jail_enable="YES”

• ZFS
  o zpool create tank ad1
  o zfs create tank/jail1
Develop with Python on
        FreeBSD
• Create a new jail
  o bsdinstall jail /tank/jail1
  o freebsd-update -b /tank/jail1 fetch install

  o Modify /etc/rc.conf
     • jail_jail1_rootdir="/tank/jail1”
     • jail_jail1_hostname="jail1”
     • jail_jail1_ip="192.168.xxx.xxx”
     • jail_jail1_interface="lo0"
  o /etc/rc.d/jail start jail1
Develop with Python on
        FreeBSD
• Clone a jail
  o zfs snapshot tank/jail1@milestone1
  o zfs clone tank/jail1@milestone1 tank/jail2

  o Modify /etc/rc.conf
  o /etc/rc.d/jail start jail2

  o Another development environment is created!
Run your Python Apps on
       FreeBSD
• Nothing special or different with
  other Unix-like platform
Run your Python Web
           Apps
• GIL problem

<VirtualHost *:80>
  DocumentRoot "/home/www/webroot"
  ServerName python.example.com
  WSGIProcessGroup pythonexample
  WSGIDaemonProcess pythonexample processes=16 
      threads=128 maximum-requests=1024 
      display-name=%{GROUP}
</VirtualHost>
Make Python
module port
FreeBSD Ports
• Each ``port’’ contains any patches
  necessary to make the original application
  source code compile and run on FreeBSD.
  Installing an application is as simple as
  typing make in the port directory.
  o http://www.freebsd.org/ports/
Inside a port
• ls -1 /usr/ports/devel/py-coverage
      Makefile
      distinfo
      pkg-descr
      pkg-plist
Create a new Python port
• Use porttools to help:
  o cd /usr/ports/ports-mgmt/porttools
  o make install clean

• Create a new port
  o cd /your/workspace
  o port create py-newport
Makefile
# New ports collection makefile for: py-coverage
# Date created:      Jun. 22, 2009
# Whom:             Li-Wen Hsu <lwhsu@FreeBSD.org>
#
# $FreeBSD: ports/devel/py-coverage/Makefile,v 1.9 2012/05/19 15:15:11 lwhsu Exp $
#

PORTNAME=    coverage
PORTVERSION= 3.5.2
CATEGORIES= devel python
MASTER_SITES= CHEESESHOP
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}

MAINTAINER=      lwhsu@FreeBSD.org
COMMENT=         Code coverage measurement for Python

LICENSE=       BSD

USE_PYTHON= yes
USE_PYDISTUTILS=   easy_install
PYEASYINSTALL_ARCHDEP= yes

.include <bsd.port.mk>
Makefile
# New ports collection makefile for: py-coverage
# Date created:      Jun. 22, 2009
# Whom:             Li-Wen Hsu <lwhsu@FreeBSD.org>
#
# $FreeBSD: ports/devel/py-coverage/Makefile,v 1.9 2012/05/19 15:15:11
   lwhsu Exp $
#
Makefile
PORTNAME=    coverage
PORTVERSION= 3.5.2
CATEGORIES= devel python
MASTER_SITES= CHEESESHOP
PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
Makefile
LICENSE=       BSD

USE_PYTHON= yes # 2.6 2.6+ -2.7 3.1+
USE_PYDISTUTILS=   easy_install
PYEASYINSTALL_ARCHDEP= yes

.include <bsd.port.mk>
distinfo
SHA256 (coverage-3.5.2.tar.gz) =
  b9e0dc65e42236a3c9b8978701bc9e7298ed7e24d39f99
  ea2ba4b945d537fe55
SIZE (coverage-3.5.2.tar.gz) = 115497
pkg-descr
Coverage measures code coverage, typically during test execution.
It uses the code analysis tools and tracing hooks provided in the
Python standard library to determine which lines are executable,
and which have been executed.

WWW:     http://nedbatchelder.com/code/coverage
pkg-plist
bin/coverage
%%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/EGG-INFO/PKG-INFO
%%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/EGG-INFO/SOURCES.txt
%%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/EGG-INFO/dependency_links.txt
%%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/EGG-INFO/entry_points.txt
%%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/EGG-INFO/native_libs.txt
%%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/EGG-INFO/not-zip-safe
%%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/EGG-INFO/top_level.txt
%%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/coverage/__init__.py
%%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/coverage/__init__.pyc
%%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/coverage/__init__.pyo
[...]
%%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/coverage/xmlreport.py
%%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/coverage/xmlreport.pyc
%%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/coverage/xmlreport.pyo
@dirrm %%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/coverage/htmlfiles
@dirrm %%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/coverage
@dirrm %%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%/EGG-INFO
@dirrm %%PYTHON_SITELIBDIR%%/%%PYEASYINSTALL_EGG%%
Before submitting
• Check
  o Use portlint (ports-mgmt/portlint)
  o Command:portint –abct


• Test
  o Use porttools (ports-mgmt/porttools)
  o Command: port test
Before submitting
• More test
  o Use Tinderbox (ports-mgmt/tinderbox)
  o A comprehensive way to test ports
     • And builds packages!
Python on FreeBSD
Wait, I have a question!
• Q: Setting up a tinderbox is too complex
• A: Use RedPorts http://redports.org/
Submit!
• In your port directory
• Command:
  o port submit

• Quit editor:
  o s)end,
    e)dit or
    a)bort? s
After submitting
• A PR (problem report) is created
• A committer will handle it
• A new port is in the ports tree!
  o See on http://freshports.org/foo/bar



• To update your ports tree:
  o portsnap fetch update

• Install the new port:
  o cd /usr/ports/foo/bar; make install clean
Future Work of
      python@FreeBSD.org
• Remove 2.4 and 2.5 in the ports tree
    o 2012-06-30

•   Handle packages with pip/distribute
•   Debug versions of lang/python*
•   Install only unzipped eggs
•   Truly modules for multiple python
    versions co-exist
Q&A

More Related Content

What's hot (13)

PDF
Fuzzing - A Tale of Two Cultures
CISPA Helmholtz Center for Information Security
 
PDF
Access specifiers (Public Private Protected) C++
vivekkumar2938
 
PDF
Frida Android run time hooking - Bhargav Gajera & Vitthal Shinde
NSConclave
 
PDF
CSRF, ClickJacking & Open Redirect
Blueinfy Solutions
 
PDF
Time based CAPTCHA protected SQL injection through SOAP-webservice
Frans Rosén
 
PPTX
robotics42.pptx
Natsutani Minoru
 
PPTX
Polymorphism In c++
Vishesh Jha
 
PDF
Frans Rosén Keynote at BSides Ahmedabad
Security BSides Ahmedabad
 
PPTX
Introduction to Metasploit
GTU
 
PDF
Same Origin Method Execution (BlackHat EU2014)
Ben Hayak
 
PDF
The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016
Frans Rosén
 
PDF
Sigreturn Oriented Programming
Angel Boy
 
PDF
Bài Giảng Dược Liệu Chứa Coumarin
nataliej4
 
Fuzzing - A Tale of Two Cultures
CISPA Helmholtz Center for Information Security
 
Access specifiers (Public Private Protected) C++
vivekkumar2938
 
Frida Android run time hooking - Bhargav Gajera & Vitthal Shinde
NSConclave
 
CSRF, ClickJacking & Open Redirect
Blueinfy Solutions
 
Time based CAPTCHA protected SQL injection through SOAP-webservice
Frans Rosén
 
robotics42.pptx
Natsutani Minoru
 
Polymorphism In c++
Vishesh Jha
 
Frans Rosén Keynote at BSides Ahmedabad
Security BSides Ahmedabad
 
Introduction to Metasploit
GTU
 
Same Origin Method Execution (BlackHat EU2014)
Ben Hayak
 
The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016
Frans Rosén
 
Sigreturn Oriented Programming
Angel Boy
 
Bài Giảng Dược Liệu Chứa Coumarin
nataliej4
 

Similar to Python on FreeBSD (20)

PPT
FreeBSD Operating system overview Basics.ppt
MaheshBabuD1
 
PPT
FreeBSD - LinuxExpo
webuploader
 
PDF
Web Server Free Bsd
Kwanchai Charoennet
 
PDF
2013 Ohio LinuxFest - Ports, Packages, and PBI's
Ken Moore
 
PPT
Msu free bsd
vipul08591
 
PDF
Deployment of WebObjects applications on FreeBSD
WO Community
 
PDF
Ansible - Swiss Army Knife Orchestration
bcoca
 
PDF
Lavigne bsdmag-jan13
Dru Lavigne
 
PDF
Cross Building the FreeBSD ports tree by Baptiste Daroussin
eurobsdcon
 
PDF
FreeBSD is not Linux
Muhammad Moinur Rahman
 
PDF
Universal Userland
Sean Chittenden
 
PDF
This one goes to 11!
APNIC
 
PDF
PyCon 2013 : Scripting to PyPi to GitHub and More
Matt Harrison
 
PDF
The NetBSD package Collection - a.k.a pkgsrc
Akio OBATA
 
PDF
BSDCan2006.pdf
JoseRamirez260192
 
PDF
pkgsrc on MirBSD
Benny Siegert
 
PDF
FreeBSD Portscamp, Kuala Lumpur 2016
Muhammad Moinur Rahman
 
PDF
Backups
Svet Ivantchev
 
PDF
Flourish11
Dru Lavigne
 
TXT
vvvvReadme
Mitazaki Yan
 
FreeBSD Operating system overview Basics.ppt
MaheshBabuD1
 
FreeBSD - LinuxExpo
webuploader
 
Web Server Free Bsd
Kwanchai Charoennet
 
2013 Ohio LinuxFest - Ports, Packages, and PBI's
Ken Moore
 
Msu free bsd
vipul08591
 
Deployment of WebObjects applications on FreeBSD
WO Community
 
Ansible - Swiss Army Knife Orchestration
bcoca
 
Lavigne bsdmag-jan13
Dru Lavigne
 
Cross Building the FreeBSD ports tree by Baptiste Daroussin
eurobsdcon
 
FreeBSD is not Linux
Muhammad Moinur Rahman
 
Universal Userland
Sean Chittenden
 
This one goes to 11!
APNIC
 
PyCon 2013 : Scripting to PyPi to GitHub and More
Matt Harrison
 
The NetBSD package Collection - a.k.a pkgsrc
Akio OBATA
 
BSDCan2006.pdf
JoseRamirez260192
 
pkgsrc on MirBSD
Benny Siegert
 
FreeBSD Portscamp, Kuala Lumpur 2016
Muhammad Moinur Rahman
 
Flourish11
Dru Lavigne
 
vvvvReadme
Mitazaki Yan
 
Ad

More from pycontw (15)

PDF
Network Security and Analysis with Python
pycontw
 
ODP
讓 Python Script 擁有圖形化介面的簡單方法
pycontw
 
PDF
CyberLink Meets Python
pycontw
 
PDF
PyKinect: Body Iteration Application Development Using Python
pycontw
 
PDF
Developing Python Apps on Windows Azure
pycontw
 
PDF
Qt Quick GUI Programming with PySide
pycontw
 
PDF
STAF 在自動化測試上的延伸應用 -- TMSTAF (TrendMicro STAF)
pycontw
 
PDF
Grid Job Management
pycontw
 
PDF
Small Python Tools for Software Release Engineering
pycontw
 
PDF
Python and Startup
pycontw
 
PPTX
Panoramic Video in Environmental Monitoring Software Development and Applica...
pycontw
 
PDF
那些年 Python 攻佔了 GIS / The Year Python Takes Over GIS
pycontw
 
PDF
Introduction to Discrete-Event Simulation Using SimPy
pycontw
 
PDF
Python and the Web
pycontw
 
PDF
Large-scale Array-oriented Computing with Python
pycontw
 
Network Security and Analysis with Python
pycontw
 
讓 Python Script 擁有圖形化介面的簡單方法
pycontw
 
CyberLink Meets Python
pycontw
 
PyKinect: Body Iteration Application Development Using Python
pycontw
 
Developing Python Apps on Windows Azure
pycontw
 
Qt Quick GUI Programming with PySide
pycontw
 
STAF 在自動化測試上的延伸應用 -- TMSTAF (TrendMicro STAF)
pycontw
 
Grid Job Management
pycontw
 
Small Python Tools for Software Release Engineering
pycontw
 
Python and Startup
pycontw
 
Panoramic Video in Environmental Monitoring Software Development and Applica...
pycontw
 
那些年 Python 攻佔了 GIS / The Year Python Takes Over GIS
pycontw
 
Introduction to Discrete-Event Simulation Using SimPy
pycontw
 
Python and the Web
pycontw
 
Large-scale Array-oriented Computing with Python
pycontw
 
Ad

Recently uploaded (20)

PPTX
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
PDF
Ampere Offers Energy-Efficient Future For AI And Cloud
ShapeBlue
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
Meetup Kickoff & Welcome - Rohit Yadav, CSIUG Chairman
ShapeBlue
 
PPTX
Extensions Framework (XaaS) - Enabling Orchestrate Anything
ShapeBlue
 
PDF
Rethinking Security Operations - SOC Evolution Journey.pdf
Haris Chughtai
 
PDF
July Patch Tuesday
Ivanti
 
PDF
NewMind AI Journal - Weekly Chronicles - July'25 Week II
NewMind AI
 
PDF
Windsurf Meetup Ottawa 2025-07-12 - Planning Mode at Reliza.pdf
Pavel Shukhman
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
PDF
Persuasive AI: risks and opportunities in the age of digital debate
Speck&Tech
 
PPTX
MSP360 Backup Scheduling and Retention Best Practices.pptx
MSP360
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PPTX
Building a Production-Ready Barts Health Secure Data Environment Tooling, Acc...
Barts Health
 
PPTX
Building and Operating a Private Cloud with CloudStack and LINBIT CloudStack ...
ShapeBlue
 
PDF
Français Patch Tuesday - Juillet
Ivanti
 
PDF
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
PDF
Women in Automation Presents: Reinventing Yourself — Bold Career Pivots That ...
DianaGray10
 
PDF
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
Building Search Using OpenSearch: Limitations and Workarounds
Sease
 
Ampere Offers Energy-Efficient Future For AI And Cloud
ShapeBlue
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
Meetup Kickoff & Welcome - Rohit Yadav, CSIUG Chairman
ShapeBlue
 
Extensions Framework (XaaS) - Enabling Orchestrate Anything
ShapeBlue
 
Rethinking Security Operations - SOC Evolution Journey.pdf
Haris Chughtai
 
July Patch Tuesday
Ivanti
 
NewMind AI Journal - Weekly Chronicles - July'25 Week II
NewMind AI
 
Windsurf Meetup Ottawa 2025-07-12 - Planning Mode at Reliza.pdf
Pavel Shukhman
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
Persuasive AI: risks and opportunities in the age of digital debate
Speck&Tech
 
MSP360 Backup Scheduling and Retention Best Practices.pptx
MSP360
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
Building a Production-Ready Barts Health Secure Data Environment Tooling, Acc...
Barts Health
 
Building and Operating a Private Cloud with CloudStack and LINBIT CloudStack ...
ShapeBlue
 
Français Patch Tuesday - Juillet
Ivanti
 
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
Women in Automation Presents: Reinventing Yourself — Bold Career Pivots That ...
DianaGray10
 
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 

Python on FreeBSD