Developing in Python on Red Hat Platforms (DevNation 2016)

Developing in Python
on Red Hat platforms
Nick Coghlan
Senior Software Engineer
Graham Dumpleton
Developer Advocate for OpenShift
June 28th
2016
Using Python on Red Hat Platforms
● Python for Network Services
● Python for Applications
● Python for System Administration
Current Transitions in the Python Ecosystem
● Migration to Python 3
● Modernizing the Python 2.7 Network Security Stack
● Defaulting to HTTPS Certificate Verification
Python for Network Services
Developing in Python on Red Hat Platforms (DevNation 2016)
Developing in Python on Red Hat Platforms (DevNation 2016)
Developing in Python on Red Hat Platforms (DevNation 2016)
Developing in Python on Red Hat Platforms (DevNation 2016)
Developing in Python on Red Hat Platforms (DevNation 2016)
Developing in Python on Red Hat Platforms (DevNation 2016)
Developing in Python on Red Hat Platforms (DevNation 2016)
$ oc new-app https://gitlab.com/osevg/python-django-modwsgi.git
--> Found image 772dc19 (4 weeks old) in image stream "python" in project "openshift" under tag "3.4" for "python"
Python 3.4
----------
Platform for building and running Python 3.4 applications
Tags: builder, python, python34, rh-python34
* The source repository appears to match: python
* A source build using source code from https://gitlab.com/osevg/python-django-modwsgi.git will be created
* The resulting image will be pushed to image stream "python-django-modwsgi:latest"
* This image will be deployed in deployment config "python-django-modwsgi"
* Port 8080/tcp will be load balanced by service "python-django-modwsgi"
* Other containers can access this service through the hostname "python-django-modwsgi"
--> Creating resources with label app=python-django-modwsgi ...
imagestream "python-django-modwsgi" created
buildconfig "python-django-modwsgi" created
deploymentconfig "python-django-modwsgi" created
service "python-django-modwsgi" created
--> Success
Build scheduled, use 'oc logs -f bc/python-django-modwsgi' to track its progress.
Run 'oc status' to view your app.
$ oc expose svc/python-django-modwsgi
route "python-django-modwsgi" exposed
Source to Image (S2I)
https://github.com/openshift/source-to-image
$ s2i build https://gitlab.com/osevg/python-django-modwsgi.git centos/python-34-centos7 python-django-modwsgi
I0610 10:02:07.422470 84805 docker.go:352] Image "centos/python-34-centos7:latest" not available locally, pulling ...
I0610 10:02:36.501637 84805 clone.go:32] Downloading "https://gitlab.com/osevg/python-django-modwsgi.git" ...
I0610 10:02:38.831859 84805 install.go:251] Using "assemble" installed from "image:///usr/libexec/s2i/assemble"
I0610 10:02:38.831913 84805 install.go:251] Using "run" installed from "image:///usr/libexec/s2i/run"
I0610 10:02:38.831943 84805 install.go:251] Using "save-artifacts" installed from "image:///usr/libexec/s2i/save-artifacts"
I0610 10:02:38.832495 84805 environment.go:60] Setting 1 environment variables provided by environment file in sources
---> Copying application source ...
---> Installing dependencies ...
...
---> Collecting Django static files ...
I0610 10:03:00.876021 84805 environment.go:60] Setting 1 environment variables provided by environment file in sources
$ docker run --rm -p 8080:8080 python-django-modwsgi
---> Running application from Python script (app.py) ...
[Fri Jun 10 00:07:33.580013 2016] [mpm_event:notice] [pid 1:tid 139758878566464] AH00489: Apache/2.4.6 (CentOS)
mod_wsgi/4.5.2 Python/3.4.2 configured -- resuming normal operations
[Fri Jun 10 00:07:33.580149 2016] [core:notice] [pid 1:tid 139758878566464] AH00094: Command line: 'httpd (mod_wsgi-
express) -f /tmp/mod_wsgi-localhost:8080:1001/httpd.conf -D MOD_WSGI_MULTIPROCESS -D
MOD_WSGI_WITH_PROXY_HEADERS -D MOD_WSGI_MPM_ENABLE_EVENT_MODULE -D
MOD_WSGI_MPM_EXISTS_EVENT_MODULE -D MOD_WSGI_MPM_EXISTS_WORKER_MODULE -D
MOD_WSGI_MPM_EXISTS_PREFORK_MODULE -D FOREGROUND'
Docker Base Images (S2I Enabled)
● RHEL 7
– Python 2.7 → registry.access.redhat.com/rhscl/python-27-rhel7
– Python 3.3 → registry.access.redhat.com/openshift3/python-33-rhel7
– Python 3.4 → registry.access.redhat.com/rhscl/python-34-rhel7
● CentOS 7
– Python 2.7 → docker.io/centos/python-27-centos7
– Python 3.3 → docker.io/openshift/python-33-centos7
– Python 3.4 → docker.io/centos/python-34-centos7
Migrating from OpenShift 2 to 3
● Converting of existing applications.
● Backward compatible S2I builder.
● Guidelines for porting applications.
● Templates to aid in porting applications.
Developing in Python on Red Hat Platforms (DevNation 2016)
Python for Applications
Why *Not* Containers?
● Containers are the recommended option for network services
● However:
– Container support for rich desktop applications is currently limited
– Container runtime may impose unwanted overhead on dedicated systems
– Containers may give more isolation than is wanted
– Applications may require non-trivial modification to run as a privileged container
● Software Collections aim to offer “minimum viable runtime isolation”
– Add new executable directories to front of PATH
– Add new shared library directories to front of LD_LIBRARY_PATH
Why Software Collections for Python?
● Use newer Python runtimes without impacting system components
● Use a common Python runtime across multiple operating system versions
● Python 3 for Red Hat Enterprise Linux 6 & 7!
Red Hat Software Collections
● Platforms
– Red Hat Enterprise Linux 6 & Red Hat Enterprise Linux 7
– CentOS 6 and 7 (via softwarecollections.org)
– Basis for OpenShift language runtimes
● Available versions (as of RHSCL 2.2)
– Python 2.7.8 (+ selected backports)
– Python 3.5.1 (+ selected backports)
– Python 3.4.2 (+ selected backports)
– Python 3.3.2 (+ selected backports)
Python Virtual Environments
● Software Collections allow multiple runtimes to share a system without conflicting
● Virtual environments allow multiple Python applications to share a runtime
● Low or no runtime overhead: just add/replace directories in Python’s import path
● Cleanly isolate application dependencies from platform components
● Dependencies within the environment managed with pip
● Created via:
– python3 -m venv (Python 3.4+)
– virtualenv (Python 2.7, Python 3.x)
● Not included in the Red Hat Enterprise Linux System Python
Developing in Python on Red Hat Platforms (DevNation 2016)
Constructing a Layered Application
● Base platform (via system package manager):
– Operating system (e.g. kernel, C runtime)
– Language runtime (from Software Collections)
– Other external dependencies (e.g. OpenSSL)
● Modify shared library loading (via enabled Software Collection)
● Modify Python import configuration (via virtualenv or standard library’s venv)
● Inside the virtual environment:
– Application dependencies (managed via pip)
– Application source code (managed via pip, or direct from source control)
Deploying a Layered Application (1)
● Application RPM with generated artifacts in SRPM:
– Create full installation in representative environment
– Bundle entire virtualenv and other desired components into SRPM
– Also include scripts to appropriately activate SCL and virtual environment
● Some generated files will end up in the SRPM
– Pre-compiled Python files
– Executable wrappers for pip managed Python scripts
Deploying a Layered Application (2)
● Application RPM with source-only SRPM:
– SRPM contains source for application and any application level dependencies
– virtual environment created and configured during RPM build process
● Not yet fully supported in pip
– some pip generated metadata will incorrectly include RPM buildroot paths
– shouldn’t matter for most RPM based deployment use cases
Managing Application Dependencies
● The Python Package Index is not an App Store!
● Designed to minimize barriers to publication:
– No pre-publication review
– Publisher Terms of Service ensure right to redistribute, not to run or modify
– Publishers may delete (but not replace) previously published versions
● Recommendation: use caching proxies and a component review process
– Commercially supported options: JFrog Artifactory, Sonatype Nexus
– Community/self-supported options: devpi, Python plugin for Pulp
– Check licensing, export restrictions, project governance, ...
● Security monitoring & response also becomes a dev team responsibility!
Python for System Administration
Why *Not* Software Collections?
● Containers are the recommended option for network services
● Software Collections are recommended for applications
● However:
– some platform bindings are only installed in the main System Python
– the System Python is available on all systems by default
● Some system administration tasks are best handled with the System Python
System Python
● Red Hat Enterprise Linux 6
– Python 2.6.6 (+ selected backports)
● Red Hat Enterprise Linux 7
– Python 2.7.5 (+ selected backports)
● Fedora 23 and later
– Recent Python 3.x (rebases rather than backports)
– Recent Python 2.7 available as system package, may not have all system bindings
Caveats and Challenges
● Restricted to features of System Python on oldest supported platform
● Community maintained libraries and frameworks often require newer runtimes
● Conflict between supporting:
– Red Hat Enterprise Linux 5 (Python 2.4 lacks Py3 forward compatibility features)
– Fedora 23+ (Python 3.x as System Python)
● May want to consider higher level system abstractions like Ansible
Migration to Python 3
Python 2.7 Support Timeline
● Anticipated community end-of-life for Python 2.7 in January 2020
– https://docs.python.org/devguide/#status-of-python-branches
● Supported in Red Hat Enterprise Linux 7 until June 2024
– https://access.redhat.com/support/policy/updates/errata
● Anticipate community project support for Python 2 declining sharply post-2020
– Already seeing new community projects starting as Python 3 only
Python 3 Migration Techniques
● General “refactoring enablement” techniques:
– automated regression testing frameworks
– static structural analysis tools
● Recommended approach for applications and network services:
– Migrate to the Python 2.7 SCL or OpenShift image (if using the system Python)
– Follow https://docs.python.org/3/howto/pyporting.html
– Migrate to the latest Python 3.x SCL or OpenShift image
● Recommended approach for system administration tools:
– Consider using Fedora 23+ to look for potential pain points
Python 3 Migration Notes
● Common subset of Python 2.6+ and 3.3+ is quite large
● Many deprecated idioms can be updated automatically
● Key data & workload driven pain points
– Explicit bytes/unicode separation
– Removal of implicit cross-type comparisons
● Automated refactoring and compatibility testing tools continue to improve
Modernizing the Python 2.7
Network Security Stack
New Security Features in Python 2.7
● https://docs.python.org/2/whatsnew/2.7.html#pep-466-network-security-enhancements-
for-python-2-7
● Constant-time comparison (hmac.compare_digest())
● Password storage hashing (hashlib.pbkdf2_hmac())
● ssl module rebase on Python 3.4 implementation
– Server Name Indication support
– SSLContext for SSL configuration
– Configuration support for TLS 1.x
– Access to system certificate stores
– ...
Availability in Red Hat Products
● Red Hat Enterprise Linux 7.2
– backported to System Python
● Red Hat Software Collections 2.0+
– default in Python 3.4
● Red Hat Software Collections 2.2+
– backported to Python 2.7
– default in Python 3.5
Third Party Module Compatibility
● ssl module rebase changed several private implementation details
● Some third party libraries had used internal APIs instead of requesting public ones
● Backport offers greater compatibility than upstream rebase
● Testing before upgrading is still recommended
● Report problems through the usual channels
Defaulting to HTTPS
Certificate Verification
What does “HTTPS” Mean?
● Historical Python standard library answer:
– “HTTP connection with SSL/TLS enabled”
– didn’t check certificate validity or remote host identification
● Modern Python standard library answer:
– “What web browsers say it means”
– still a HTTP connection with SSL/TLS enabled
– also checks for certificate validity
– also checks remote host identification against system certificate store
Verifying HTTPS Certificates
● https://docs.python.org/2/whatsnew/2.7.html#pep-476-enabling-certificate-verification-by-
default-for-stdlib-http-clients
● Default behavior of standard library HTTPS clients in:
– Python 2.7.9+
– Python 3.4.3+
– Python 3.5.0+
● Turns a silent security failure into a noisy connection failure
● Potential problems:
– Self-signed internal certificates
– Expired certificates
– Internal CAs not configured on client system
On Red Hat Platforms
● File-based opt-in:
– Config setting in /etc/python/cert-verification.cfg
– Red Hat Enterprise Linux 7.2+ System Python
– Red Hat Software Collections 2.2+ Python 2.7 collection
● Default behavior:
– Red Hat Software Collections Python 3.5 collection
● Details in Knowledge Base
– https://access.redhat.com/articles/2039753
Future Configuration Options
● https://docs.python.org/2/whatsnew/2.7.html#pep-493-https-verification-migration-tools
-for-python-2-7
● Adds new Python 2.7 specific configuration options
– ssl._https_verify_certificates() API
– PYTHONHTTPSVERIFY environment variable
● Can be used to revert Python 2.7.12+ to Python 2.7.8 behavior
● Python 2.7 only, not supported by any version of Python 3
Resources
OpenShift
● OpenShift
– https://www.openshift.com
● OpenShift Online Preview
– https://www.openshift.com/devpreview/register.html
● OpenShift Container Development Kit
– https://developers.redhat.com/products/cdk/overview/
● OpenShift Origin
– https://www.openshift.org
● OpenShift Origin All-In-One VM
– https://www.openshift.org/vm
Python
● Red Hat Software Collections
– http://developers.redhat.com/products/softwarecollections/
– Access: https://access.redhat.com/solutions/472793
● Software Collections Upstream
– https://wiki.centos.org/SpecialInterestGroup/SCLo
– https://www.softwarecollections.org
Related DevNation 2016 Sessions
● OpenShift
– OpenShift Enterprise 3 walk-through with Docker and Kubernetes
● Container Development Kit
– CDK 2.0: Docker, Kubernetes, and OSE on your desk
– Container development for command line developers
● Software Collections
– Software Collections: Easy access to the cutting edge
Developing in Python on Red Hat Platforms (DevNation 2016)
1 of 49

Recommended

OpenHPC: Community Building Blocks for HPC Systems by
OpenHPC: Community Building Blocks for HPC SystemsOpenHPC: Community Building Blocks for HPC Systems
OpenHPC: Community Building Blocks for HPC Systemsinside-BigData.com
1.3K views30 slides
OpenHPC: Project Overview and Updates by
OpenHPC: Project Overview and UpdatesOpenHPC: Project Overview and Updates
OpenHPC: Project Overview and Updatesinside-BigData.com
1.9K views30 slides
Git in the European Parliament by
Git in the European ParliamentGit in the European Parliament
Git in the European ParliamentJean-Pol Landrain
128 views30 slides
An Essential Relationship between Real-time and Resource Partitioning by
An Essential Relationship between Real-time and Resource PartitioningAn Essential Relationship between Real-time and Resource Partitioning
An Essential Relationship between Real-time and Resource PartitioningYoshitake Kobayashi
254 views32 slides
OpenNebula Conf 2014: CentOS, QA an OpenNebula - Christoph Galuschka by
OpenNebula Conf 2014: CentOS, QA an OpenNebula - Christoph GaluschkaOpenNebula Conf 2014: CentOS, QA an OpenNebula - Christoph Galuschka
OpenNebula Conf 2014: CentOS, QA an OpenNebula - Christoph GaluschkaNETWAYS
1.1K views17 slides
Automotive Grade Linux and systemd by
Automotive Grade Linux and systemdAutomotive Grade Linux and systemd
Automotive Grade Linux and systemdAlison Chaiken
1.6K views21 slides

More Related Content

What's hot

Introduction to Docker by
Introduction to DockerIntroduction to Docker
Introduction to DockerNissan Dookeran
707 views40 slides
Code review and automated testing for Puppet code by
Code review and automated testing for Puppet codeCode review and automated testing for Puppet code
Code review and automated testing for Puppet codewzzrd
1.9K views38 slides
LAS16-210: Hardware Assisted Tracing on ARM with CoreSight and OpenCSD by
LAS16-210: Hardware Assisted Tracing on ARM with CoreSight and OpenCSDLAS16-210: Hardware Assisted Tracing on ARM with CoreSight and OpenCSD
LAS16-210: Hardware Assisted Tracing on ARM with CoreSight and OpenCSDLinaro
1.2K views35 slides
BKK16-213 Where's the Hardware? by
BKK16-213 Where's the Hardware?BKK16-213 Where's the Hardware?
BKK16-213 Where's the Hardware?Linaro
549 views27 slides
200519 TMU Ubiquitous Robot by
200519 TMU Ubiquitous Robot200519 TMU Ubiquitous Robot
200519 TMU Ubiquitous RobotNoriakiAndo
427 views105 slides
Working with multiple git repositories by
Working with multiple git repositoriesWorking with multiple git repositories
Working with multiple git repositoriesJulien Pivotto
17K views67 slides

What's hot(20)

Code review and automated testing for Puppet code by wzzrd
Code review and automated testing for Puppet codeCode review and automated testing for Puppet code
Code review and automated testing for Puppet code
wzzrd1.9K views
LAS16-210: Hardware Assisted Tracing on ARM with CoreSight and OpenCSD by Linaro
LAS16-210: Hardware Assisted Tracing on ARM with CoreSight and OpenCSDLAS16-210: Hardware Assisted Tracing on ARM with CoreSight and OpenCSD
LAS16-210: Hardware Assisted Tracing on ARM with CoreSight and OpenCSD
Linaro1.2K views
BKK16-213 Where's the Hardware? by Linaro
BKK16-213 Where's the Hardware?BKK16-213 Where's the Hardware?
BKK16-213 Where's the Hardware?
Linaro549 views
200519 TMU Ubiquitous Robot by NoriakiAndo
200519 TMU Ubiquitous Robot200519 TMU Ubiquitous Robot
200519 TMU Ubiquitous Robot
NoriakiAndo427 views
Working with multiple git repositories by Julien Pivotto
Working with multiple git repositoriesWorking with multiple git repositories
Working with multiple git repositories
Julien Pivotto17K views
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration by Linaro
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP IntegrationBKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
Linaro870 views
Brno Perl Mongers 28.5.2015 - Perl family by mj41 by Michal Jurosz
Brno Perl Mongers 28.5.2015 - Perl family by mj41Brno Perl Mongers 28.5.2015 - Perl family by mj41
Brno Perl Mongers 28.5.2015 - Perl family by mj41
Michal Jurosz1.2K views
都立大「ユビキタスロボティクス特論」5月12日 by NoriakiAndo
都立大「ユビキタスロボティクス特論」5月12日都立大「ユビキタスロボティクス特論」5月12日
都立大「ユビキタスロボティクス特論」5月12日
NoriakiAndo633 views
Kernel Recipes 2013 - Viewing real time ltt trace using gtkwave by Anne Nicolas
Kernel Recipes 2013 - Viewing real time  ltt trace using gtkwaveKernel Recipes 2013 - Viewing real time  ltt trace using gtkwave
Kernel Recipes 2013 - Viewing real time ltt trace using gtkwave
Anne Nicolas2.6K views
Stefano Cordibella - An introduction to Yocto Project by linuxlab_conf
Stefano Cordibella - An introduction to Yocto ProjectStefano Cordibella - An introduction to Yocto Project
Stefano Cordibella - An introduction to Yocto Project
linuxlab_conf338 views
Las16 309 - lua jit arm64 port - status by Linaro
Las16 309 - lua jit arm64 port - statusLas16 309 - lua jit arm64 port - status
Las16 309 - lua jit arm64 port - status
Linaro1.9K views
Software management in linux by nejadmand
Software management in linuxSoftware management in linux
Software management in linux
nejadmand8K views
Creating new Tizen profiles using the Yocto Project by Leon Anavi
Creating new Tizen profiles  using the Yocto ProjectCreating new Tizen profiles  using the Yocto Project
Creating new Tizen profiles using the Yocto Project
Leon Anavi4.9K views
淺談 Live patching technology by SZ Lin
淺談 Live patching technology淺談 Live patching technology
淺談 Live patching technology
SZ Lin2.1K views
Distro Recipes 2013 : Upstream management and consequences on the distributi... by Anne Nicolas
Distro Recipes 2013 : Upstream management and consequences on the  distributi...Distro Recipes 2013 : Upstream management and consequences on the  distributi...
Distro Recipes 2013 : Upstream management and consequences on the distributi...
Anne Nicolas868 views
Delivering a bleeding edge community-led openstack distribution: RDO by Chandan Kumar
Delivering a bleeding edge community-led openstack distribution: RDO Delivering a bleeding edge community-led openstack distribution: RDO
Delivering a bleeding edge community-led openstack distribution: RDO
Chandan Kumar157 views
Kernel Recipes 2015 - The Dronecode Project – A step in open source drones by Anne Nicolas
Kernel Recipes 2015 - The Dronecode Project – A step in open source dronesKernel Recipes 2015 - The Dronecode Project – A step in open source drones
Kernel Recipes 2015 - The Dronecode Project – A step in open source drones
Anne Nicolas2.3K views

Similar to Developing in Python on Red Hat Platforms (DevNation 2016)

Open source Android 10 on Orange Pi: Meth or Reality? by
Open source Android 10 on Orange Pi: Meth or Reality?Open source Android 10 on Orange Pi: Meth or Reality?
Open source Android 10 on Orange Pi: Meth or Reality?GlobalLogic Ukraine
1.7K views32 slides
MuleSoft Meetup Roma - Processi di Automazione su CloudHub by
MuleSoft Meetup Roma - Processi di Automazione su CloudHubMuleSoft Meetup Roma - Processi di Automazione su CloudHub
MuleSoft Meetup Roma - Processi di Automazione su CloudHubAlfonso Martino
420 views27 slides
Build and deploy scientific Python Applications by
Build and deploy scientific Python Applications  Build and deploy scientific Python Applications
Build and deploy scientific Python Applications Ramakrishna Reddy
753 views17 slides
App container rkt by
App container rktApp container rkt
App container rktXiaofeng Guo
1.5K views108 slides
release_python_day3_slides_201606.pdf by
release_python_day3_slides_201606.pdfrelease_python_day3_slides_201606.pdf
release_python_day3_slides_201606.pdfPaul Yang
7 views143 slides
Inria Tech Talk : RIOT, l'OS libre pour vos objets connectés #IoT by
Inria Tech Talk : RIOT, l'OS libre pour vos objets connectés #IoTInria Tech Talk : RIOT, l'OS libre pour vos objets connectés #IoT
Inria Tech Talk : RIOT, l'OS libre pour vos objets connectés #IoTStéphanie Roger
323 views48 slides

Similar to Developing in Python on Red Hat Platforms (DevNation 2016)(20)

Open source Android 10 on Orange Pi: Meth or Reality? by GlobalLogic Ukraine
Open source Android 10 on Orange Pi: Meth or Reality?Open source Android 10 on Orange Pi: Meth or Reality?
Open source Android 10 on Orange Pi: Meth or Reality?
GlobalLogic Ukraine1.7K views
MuleSoft Meetup Roma - Processi di Automazione su CloudHub by Alfonso Martino
MuleSoft Meetup Roma - Processi di Automazione su CloudHubMuleSoft Meetup Roma - Processi di Automazione su CloudHub
MuleSoft Meetup Roma - Processi di Automazione su CloudHub
Alfonso Martino420 views
Build and deploy scientific Python Applications by Ramakrishna Reddy
Build and deploy scientific Python Applications  Build and deploy scientific Python Applications
Build and deploy scientific Python Applications
Ramakrishna Reddy753 views
App container rkt by Xiaofeng Guo
App container rktApp container rkt
App container rkt
Xiaofeng Guo1.5K views
release_python_day3_slides_201606.pdf by Paul Yang
release_python_day3_slides_201606.pdfrelease_python_day3_slides_201606.pdf
release_python_day3_slides_201606.pdf
Paul Yang7 views
Inria Tech Talk : RIOT, l'OS libre pour vos objets connectés #IoT by Stéphanie Roger
Inria Tech Talk : RIOT, l'OS libre pour vos objets connectés #IoTInria Tech Talk : RIOT, l'OS libre pour vos objets connectés #IoT
Inria Tech Talk : RIOT, l'OS libre pour vos objets connectés #IoT
Stéphanie Roger323 views
2009-09-24 Get the Hype on System z Webinar with IBM, Current & Future Linux ... by Shawn Wells
2009-09-24 Get the Hype on System z Webinar with IBM, Current & Future Linux ...2009-09-24 Get the Hype on System z Webinar with IBM, Current & Future Linux ...
2009-09-24 Get the Hype on System z Webinar with IBM, Current & Future Linux ...
Shawn Wells219 views
Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC... by Jian-Hong Pan
Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC...Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC...
Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC...
Jian-Hong Pan86 views
Open source projects with python by roskakori
Open source projects with pythonOpen source projects with python
Open source projects with python
roskakori1.6K views
Red Hat Satellite 6 - Automation with Puppet by Michael Lessard
Red Hat Satellite 6 - Automation with PuppetRed Hat Satellite 6 - Automation with Puppet
Red Hat Satellite 6 - Automation with Puppet
Michael Lessard24.5K views
Princeton Wintersession: Software Quality Assurance Tooling by Henry Schreiner
Princeton Wintersession: Software Quality Assurance ToolingPrinceton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance Tooling
Henry Schreiner128 views
Software Quality Assurance Tooling 2023 by Henry Schreiner
Software Quality Assurance Tooling 2023Software Quality Assurance Tooling 2023
Software Quality Assurance Tooling 2023
Henry Schreiner42 views
Hackaton for health 2015 - Sharing the Code we Make by esben1962
Hackaton for health 2015 - Sharing the Code we MakeHackaton for health 2015 - Sharing the Code we Make
Hackaton for health 2015 - Sharing the Code we Make
esben1962182 views
Introduction to Civil Infrastructure Platform by SZ Lin
Introduction to Civil Infrastructure PlatformIntroduction to Civil Infrastructure Platform
Introduction to Civil Infrastructure Platform
SZ Lin508 views
Monitoring_with_Prometheus_Grafana_Tutorial by Tim Vaillancourt
Monitoring_with_Prometheus_Grafana_TutorialMonitoring_with_Prometheus_Grafana_Tutorial
Monitoring_with_Prometheus_Grafana_Tutorial
Tim Vaillancourt9.1K views
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red... by OpenShift Origin
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
Extending OpenShift Origin: Build Your Own Cartridge with Bill DeCoste of Red...
OpenShift Origin5K views
Introduction to Git for Network Engineers (Lab Guide) by Joel W. King
Introduction to Git for Network Engineers (Lab Guide)Introduction to Git for Network Engineers (Lab Guide)
Introduction to Git for Network Engineers (Lab Guide)
Joel W. King346 views

Recently uploaded

"Node.js Development in 2024: trends and tools", Nikita Galkin by
"Node.js Development in 2024: trends and tools", Nikita Galkin "Node.js Development in 2024: trends and tools", Nikita Galkin
"Node.js Development in 2024: trends and tools", Nikita Galkin Fwdays
32 views38 slides
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading... by
Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading...The Digital Insurer
90 views52 slides
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ... by
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...Jasper Oosterveld
35 views49 slides
Generative AI: Shifting the AI Landscape by
Generative AI: Shifting the AI LandscapeGenerative AI: Shifting the AI Landscape
Generative AI: Shifting the AI LandscapeDeakin University
53 views55 slides
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue by
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlueWhat’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlueShapeBlue
263 views23 slides
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023 by
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023Redefining the book supply chain: A glimpse into the future - Tech Forum 2023
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023BookNet Canada
44 views19 slides

Recently uploaded(20)

"Node.js Development in 2024: trends and tools", Nikita Galkin by Fwdays
"Node.js Development in 2024: trends and tools", Nikita Galkin "Node.js Development in 2024: trends and tools", Nikita Galkin
"Node.js Development in 2024: trends and tools", Nikita Galkin
Fwdays32 views
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading... by The Digital Insurer
Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading...
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ... by Jasper Oosterveld
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue by ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlueWhat’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
What’s New in CloudStack 4.19 - Abhishek Kumar - ShapeBlue
ShapeBlue263 views
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023 by BookNet Canada
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023Redefining the book supply chain: A glimpse into the future - Tech Forum 2023
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023
BookNet Canada44 views
The Power of Generative AI in Accelerating No Code Adoption.pdf by Saeed Al Dhaheri
The Power of Generative AI in Accelerating No Code Adoption.pdfThe Power of Generative AI in Accelerating No Code Adoption.pdf
The Power of Generative AI in Accelerating No Code Adoption.pdf
Saeed Al Dhaheri32 views
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online by ShapeBlue
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineKVM Security Groups Under the Hood - Wido den Hollander - Your.Online
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online
ShapeBlue221 views
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f... by TrustArc
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc170 views
The Power of Heat Decarbonisation Plans in the Built Environment by IES VE
The Power of Heat Decarbonisation Plans in the Built EnvironmentThe Power of Heat Decarbonisation Plans in the Built Environment
The Power of Heat Decarbonisation Plans in the Built Environment
IES VE79 views
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ... by ShapeBlue
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...
Live Demo Showcase: Unveiling Dell PowerFlex’s IaaS Capabilities with Apache ...
ShapeBlue126 views
"Running students' code in isolation. The hard way", Yurii Holiuk by Fwdays
"Running students' code in isolation. The hard way", Yurii Holiuk "Running students' code in isolation. The hard way", Yurii Holiuk
"Running students' code in isolation. The hard way", Yurii Holiuk
Fwdays36 views
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue by ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlueCloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
ShapeBlue135 views
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P... by ShapeBlue
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
ShapeBlue194 views
Setting Up Your First CloudStack Environment with Beginners Challenges - MD R... by ShapeBlue
Setting Up Your First CloudStack Environment with Beginners Challenges - MD R...Setting Up Your First CloudStack Environment with Beginners Challenges - MD R...
Setting Up Your First CloudStack Environment with Beginners Challenges - MD R...
ShapeBlue173 views
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit... by ShapeBlue
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...
Transitioning from VMware vCloud to Apache CloudStack: A Path to Profitabilit...
ShapeBlue159 views
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ... by ShapeBlue
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...
ShapeBlue119 views

Developing in Python on Red Hat Platforms (DevNation 2016)

  • 1. Developing in Python on Red Hat platforms Nick Coghlan Senior Software Engineer Graham Dumpleton Developer Advocate for OpenShift June 28th 2016
  • 2. Using Python on Red Hat Platforms ● Python for Network Services ● Python for Applications ● Python for System Administration
  • 3. Current Transitions in the Python Ecosystem ● Migration to Python 3 ● Modernizing the Python 2.7 Network Security Stack ● Defaulting to HTTPS Certificate Verification
  • 12. $ oc new-app https://gitlab.com/osevg/python-django-modwsgi.git --> Found image 772dc19 (4 weeks old) in image stream "python" in project "openshift" under tag "3.4" for "python" Python 3.4 ---------- Platform for building and running Python 3.4 applications Tags: builder, python, python34, rh-python34 * The source repository appears to match: python * A source build using source code from https://gitlab.com/osevg/python-django-modwsgi.git will be created * The resulting image will be pushed to image stream "python-django-modwsgi:latest" * This image will be deployed in deployment config "python-django-modwsgi" * Port 8080/tcp will be load balanced by service "python-django-modwsgi" * Other containers can access this service through the hostname "python-django-modwsgi" --> Creating resources with label app=python-django-modwsgi ... imagestream "python-django-modwsgi" created buildconfig "python-django-modwsgi" created deploymentconfig "python-django-modwsgi" created service "python-django-modwsgi" created --> Success Build scheduled, use 'oc logs -f bc/python-django-modwsgi' to track its progress. Run 'oc status' to view your app. $ oc expose svc/python-django-modwsgi route "python-django-modwsgi" exposed
  • 13. Source to Image (S2I) https://github.com/openshift/source-to-image
  • 14. $ s2i build https://gitlab.com/osevg/python-django-modwsgi.git centos/python-34-centos7 python-django-modwsgi I0610 10:02:07.422470 84805 docker.go:352] Image "centos/python-34-centos7:latest" not available locally, pulling ... I0610 10:02:36.501637 84805 clone.go:32] Downloading "https://gitlab.com/osevg/python-django-modwsgi.git" ... I0610 10:02:38.831859 84805 install.go:251] Using "assemble" installed from "image:///usr/libexec/s2i/assemble" I0610 10:02:38.831913 84805 install.go:251] Using "run" installed from "image:///usr/libexec/s2i/run" I0610 10:02:38.831943 84805 install.go:251] Using "save-artifacts" installed from "image:///usr/libexec/s2i/save-artifacts" I0610 10:02:38.832495 84805 environment.go:60] Setting 1 environment variables provided by environment file in sources ---> Copying application source ... ---> Installing dependencies ... ... ---> Collecting Django static files ... I0610 10:03:00.876021 84805 environment.go:60] Setting 1 environment variables provided by environment file in sources $ docker run --rm -p 8080:8080 python-django-modwsgi ---> Running application from Python script (app.py) ... [Fri Jun 10 00:07:33.580013 2016] [mpm_event:notice] [pid 1:tid 139758878566464] AH00489: Apache/2.4.6 (CentOS) mod_wsgi/4.5.2 Python/3.4.2 configured -- resuming normal operations [Fri Jun 10 00:07:33.580149 2016] [core:notice] [pid 1:tid 139758878566464] AH00094: Command line: 'httpd (mod_wsgi- express) -f /tmp/mod_wsgi-localhost:8080:1001/httpd.conf -D MOD_WSGI_MULTIPROCESS -D MOD_WSGI_WITH_PROXY_HEADERS -D MOD_WSGI_MPM_ENABLE_EVENT_MODULE -D MOD_WSGI_MPM_EXISTS_EVENT_MODULE -D MOD_WSGI_MPM_EXISTS_WORKER_MODULE -D MOD_WSGI_MPM_EXISTS_PREFORK_MODULE -D FOREGROUND'
  • 15. Docker Base Images (S2I Enabled) ● RHEL 7 – Python 2.7 → registry.access.redhat.com/rhscl/python-27-rhel7 – Python 3.3 → registry.access.redhat.com/openshift3/python-33-rhel7 – Python 3.4 → registry.access.redhat.com/rhscl/python-34-rhel7 ● CentOS 7 – Python 2.7 → docker.io/centos/python-27-centos7 – Python 3.3 → docker.io/openshift/python-33-centos7 – Python 3.4 → docker.io/centos/python-34-centos7
  • 16. Migrating from OpenShift 2 to 3 ● Converting of existing applications. ● Backward compatible S2I builder. ● Guidelines for porting applications. ● Templates to aid in porting applications.
  • 19. Why *Not* Containers? ● Containers are the recommended option for network services ● However: – Container support for rich desktop applications is currently limited – Container runtime may impose unwanted overhead on dedicated systems – Containers may give more isolation than is wanted – Applications may require non-trivial modification to run as a privileged container ● Software Collections aim to offer “minimum viable runtime isolation” – Add new executable directories to front of PATH – Add new shared library directories to front of LD_LIBRARY_PATH
  • 20. Why Software Collections for Python? ● Use newer Python runtimes without impacting system components ● Use a common Python runtime across multiple operating system versions ● Python 3 for Red Hat Enterprise Linux 6 & 7!
  • 21. Red Hat Software Collections ● Platforms – Red Hat Enterprise Linux 6 & Red Hat Enterprise Linux 7 – CentOS 6 and 7 (via softwarecollections.org) – Basis for OpenShift language runtimes ● Available versions (as of RHSCL 2.2) – Python 2.7.8 (+ selected backports) – Python 3.5.1 (+ selected backports) – Python 3.4.2 (+ selected backports) – Python 3.3.2 (+ selected backports)
  • 22. Python Virtual Environments ● Software Collections allow multiple runtimes to share a system without conflicting ● Virtual environments allow multiple Python applications to share a runtime ● Low or no runtime overhead: just add/replace directories in Python’s import path ● Cleanly isolate application dependencies from platform components ● Dependencies within the environment managed with pip ● Created via: – python3 -m venv (Python 3.4+) – virtualenv (Python 2.7, Python 3.x) ● Not included in the Red Hat Enterprise Linux System Python
  • 24. Constructing a Layered Application ● Base platform (via system package manager): – Operating system (e.g. kernel, C runtime) – Language runtime (from Software Collections) – Other external dependencies (e.g. OpenSSL) ● Modify shared library loading (via enabled Software Collection) ● Modify Python import configuration (via virtualenv or standard library’s venv) ● Inside the virtual environment: – Application dependencies (managed via pip) – Application source code (managed via pip, or direct from source control)
  • 25. Deploying a Layered Application (1) ● Application RPM with generated artifacts in SRPM: – Create full installation in representative environment – Bundle entire virtualenv and other desired components into SRPM – Also include scripts to appropriately activate SCL and virtual environment ● Some generated files will end up in the SRPM – Pre-compiled Python files – Executable wrappers for pip managed Python scripts
  • 26. Deploying a Layered Application (2) ● Application RPM with source-only SRPM: – SRPM contains source for application and any application level dependencies – virtual environment created and configured during RPM build process ● Not yet fully supported in pip – some pip generated metadata will incorrectly include RPM buildroot paths – shouldn’t matter for most RPM based deployment use cases
  • 27. Managing Application Dependencies ● The Python Package Index is not an App Store! ● Designed to minimize barriers to publication: – No pre-publication review – Publisher Terms of Service ensure right to redistribute, not to run or modify – Publishers may delete (but not replace) previously published versions ● Recommendation: use caching proxies and a component review process – Commercially supported options: JFrog Artifactory, Sonatype Nexus – Community/self-supported options: devpi, Python plugin for Pulp – Check licensing, export restrictions, project governance, ... ● Security monitoring & response also becomes a dev team responsibility!
  • 28. Python for System Administration
  • 29. Why *Not* Software Collections? ● Containers are the recommended option for network services ● Software Collections are recommended for applications ● However: – some platform bindings are only installed in the main System Python – the System Python is available on all systems by default ● Some system administration tasks are best handled with the System Python
  • 30. System Python ● Red Hat Enterprise Linux 6 – Python 2.6.6 (+ selected backports) ● Red Hat Enterprise Linux 7 – Python 2.7.5 (+ selected backports) ● Fedora 23 and later – Recent Python 3.x (rebases rather than backports) – Recent Python 2.7 available as system package, may not have all system bindings
  • 31. Caveats and Challenges ● Restricted to features of System Python on oldest supported platform ● Community maintained libraries and frameworks often require newer runtimes ● Conflict between supporting: – Red Hat Enterprise Linux 5 (Python 2.4 lacks Py3 forward compatibility features) – Fedora 23+ (Python 3.x as System Python) ● May want to consider higher level system abstractions like Ansible
  • 33. Python 2.7 Support Timeline ● Anticipated community end-of-life for Python 2.7 in January 2020 – https://docs.python.org/devguide/#status-of-python-branches ● Supported in Red Hat Enterprise Linux 7 until June 2024 – https://access.redhat.com/support/policy/updates/errata ● Anticipate community project support for Python 2 declining sharply post-2020 – Already seeing new community projects starting as Python 3 only
  • 34. Python 3 Migration Techniques ● General “refactoring enablement” techniques: – automated regression testing frameworks – static structural analysis tools ● Recommended approach for applications and network services: – Migrate to the Python 2.7 SCL or OpenShift image (if using the system Python) – Follow https://docs.python.org/3/howto/pyporting.html – Migrate to the latest Python 3.x SCL or OpenShift image ● Recommended approach for system administration tools: – Consider using Fedora 23+ to look for potential pain points
  • 35. Python 3 Migration Notes ● Common subset of Python 2.6+ and 3.3+ is quite large ● Many deprecated idioms can be updated automatically ● Key data & workload driven pain points – Explicit bytes/unicode separation – Removal of implicit cross-type comparisons ● Automated refactoring and compatibility testing tools continue to improve
  • 36. Modernizing the Python 2.7 Network Security Stack
  • 37. New Security Features in Python 2.7 ● https://docs.python.org/2/whatsnew/2.7.html#pep-466-network-security-enhancements- for-python-2-7 ● Constant-time comparison (hmac.compare_digest()) ● Password storage hashing (hashlib.pbkdf2_hmac()) ● ssl module rebase on Python 3.4 implementation – Server Name Indication support – SSLContext for SSL configuration – Configuration support for TLS 1.x – Access to system certificate stores – ...
  • 38. Availability in Red Hat Products ● Red Hat Enterprise Linux 7.2 – backported to System Python ● Red Hat Software Collections 2.0+ – default in Python 3.4 ● Red Hat Software Collections 2.2+ – backported to Python 2.7 – default in Python 3.5
  • 39. Third Party Module Compatibility ● ssl module rebase changed several private implementation details ● Some third party libraries had used internal APIs instead of requesting public ones ● Backport offers greater compatibility than upstream rebase ● Testing before upgrading is still recommended ● Report problems through the usual channels
  • 41. What does “HTTPS” Mean? ● Historical Python standard library answer: – “HTTP connection with SSL/TLS enabled” – didn’t check certificate validity or remote host identification ● Modern Python standard library answer: – “What web browsers say it means” – still a HTTP connection with SSL/TLS enabled – also checks for certificate validity – also checks remote host identification against system certificate store
  • 42. Verifying HTTPS Certificates ● https://docs.python.org/2/whatsnew/2.7.html#pep-476-enabling-certificate-verification-by- default-for-stdlib-http-clients ● Default behavior of standard library HTTPS clients in: – Python 2.7.9+ – Python 3.4.3+ – Python 3.5.0+ ● Turns a silent security failure into a noisy connection failure ● Potential problems: – Self-signed internal certificates – Expired certificates – Internal CAs not configured on client system
  • 43. On Red Hat Platforms ● File-based opt-in: – Config setting in /etc/python/cert-verification.cfg – Red Hat Enterprise Linux 7.2+ System Python – Red Hat Software Collections 2.2+ Python 2.7 collection ● Default behavior: – Red Hat Software Collections Python 3.5 collection ● Details in Knowledge Base – https://access.redhat.com/articles/2039753
  • 44. Future Configuration Options ● https://docs.python.org/2/whatsnew/2.7.html#pep-493-https-verification-migration-tools -for-python-2-7 ● Adds new Python 2.7 specific configuration options – ssl._https_verify_certificates() API – PYTHONHTTPSVERIFY environment variable ● Can be used to revert Python 2.7.12+ to Python 2.7.8 behavior ● Python 2.7 only, not supported by any version of Python 3
  • 46. OpenShift ● OpenShift – https://www.openshift.com ● OpenShift Online Preview – https://www.openshift.com/devpreview/register.html ● OpenShift Container Development Kit – https://developers.redhat.com/products/cdk/overview/ ● OpenShift Origin – https://www.openshift.org ● OpenShift Origin All-In-One VM – https://www.openshift.org/vm
  • 47. Python ● Red Hat Software Collections – http://developers.redhat.com/products/softwarecollections/ – Access: https://access.redhat.com/solutions/472793 ● Software Collections Upstream – https://wiki.centos.org/SpecialInterestGroup/SCLo – https://www.softwarecollections.org
  • 48. Related DevNation 2016 Sessions ● OpenShift – OpenShift Enterprise 3 walk-through with Docker and Kubernetes ● Container Development Kit – CDK 2.0: Docker, Kubernetes, and OSE on your desk – Container development for command line developers ● Software Collections – Software Collections: Easy access to the cutting edge