Solaris IPS: Image Packaging System

Overview

Solaris Image Packaging System

Introduction

The image packaging system (IPS) is a software delivery system with interaction with a network repository as its primary design goal. Other key ideas are: safe execution for zones and other installation contexts, use of ZFS for efficiency and rollback, preventing the introduction of incorrect or incomplete packages, and efficient use of bandwidth.

Prerequisites

IPS development requires additional external dependencies, which on Solaris 11 are provided by the list of packages found in src/pkg/external_deps.txt.

Build, Testing and Deployment

Once all dependency packages are installed, IPS source can be built by the following command:

  $ cd src; make install

The above will generate a proto directory under the root directory. Inside the proto directory, the build_i386 directory contains Python version-specific builds; root_i386 contains the complete build with the directory structure preserved.

Generally, testing of the new build can be done by the following command:

  $cd src/tests; sudo ./run.py -j 8

The above will run all test cases in 8 parallel processes. Other options are also available by typing ./run.py -h.

Tests running can also be done by using make:

  $cd src; sudo make test

Make targets test-27 and test-34 are available for testing specific Python versions.

IPS applications and libraries can be packaged and published into an IPS repository using:

  $cd src; make packages;

The above command generates IPS related packages and publishes them into packages/i386/repo on an x86-based system.

Usage Examples

  • Example 1 Create an Image With Publisher Configured

    Create a new, full image, with publisher example.com, stored at /aux0/example_root.

    $ pkg image-create -F -p example.com=http://pkg.example.com:10000 \
    /aux0/example_root
  • Example 2 Create an Image With No Publisher Configured

    Create a new, full image with no publishers configured at /aux0/example_root.

    $ pkg image-create -F /aux0/example_root
  • Example 3 Install a Package

    Install the latest version of the widget package in the current image.

    $ pkg install application/widget
    $ pkg set-publisher -g http://www.example.com/repo example.com
  • Example 5 Add and Automatically Configure a Publisher

    Add a new publisher with a repository located at /export/repo using automatic configuration.

    $ pkg set-publisher -p /export/repo

For more examples, please refer to List of References below or man page pkg(1) on Solaris operating system.

How to Contribute

Please refer to CONTRIBUTING for details.

License

The Image Packaging System is primarily distributed under the terms of the CDDL (Common Development and Distribution License), with a few portions covered by BSD-style or MIT-style licenses.

Refer to LICENSE-CDDL, LICENSE-CPIO (applies to src/modules/cpiofile.py), and LICENSE-MINISAT (applies to src/modules/solver/*) for details.

List of References

  1. Packaging and Delivering Software With the Image Packaging System in Oracle© Solaris 11.3

  2. Introducing the Basics of Image Packaging System (IPS) on Oracle Solaris 11

  3. Oracle Solaris 11 Cheatsheet for Image Packaging System

You might also like...
A Python library to utilize AWS API Gateway's large IP pool as a proxy to generate pseudo-infinite IPs for web scraping and brute forcing.

A Python library to utilize AWS API Gateway's large IP pool as a proxy to generate pseudo-infinite IPs for web scraping and brute forcing.

rPico KMK powered macropad with IPS screen
rPico KMK powered macropad with IPS screen

MacroPact rPico KMK powered macropad with IPS screen Idea/Desing: Sean Yin Build/Coding: kbjunky ( In case of any problems hit me up on Discord kbjunk

Search Shodan for Minecraft server IPs to grief

GriefBuddy This script searches Shodan for Minecraft server IPs to grief. This will return all servers connected to the public internet which Shodan h

A simple free API that allows you to extract abuse emails from IPs.

Abuse-Email-API A simple free API that allows you to extract abuse emails from IPs. also isnt worth 500 dollars :) Requirements A Debian based OS The

Simple Python Script to Parse Apache Log, Get all Unique IPs and Urls visited by that IP

Parse_Apache_Log Simple Python Script to Parse Apache Log, Get all Unique IPs and Urls visited by that IP. It will create 3 different files. allIP.txt

Ghostbuster - Eliminate dangling elastic IPs by performing analysis on your resources within all your AWS accounts
Ghostbuster - Eliminate dangling elastic IPs by performing analysis on your resources within all your AWS accounts

Table of Contents Table of Contents Ghostbuster The problem Project Features Ins

Python dependency management and packaging made easy.
Python dependency management and packaging made easy.

Poetry: Dependency Management for Python Poetry helps you declare, manage and install dependencies of Python projects, ensuring you have the right sta

Python PyPi staging server and packaging, testing, release tool

devpi: PyPI server and packaging/testing/release tool This repository contains three packages comprising the core devpi system on the server and clien

Pipeline is an asset packaging library for Django.

Pipeline Pipeline is an asset packaging library for Django, providing both CSS and JavaScript concatenation and compression, built-in JavaScript templ

Pipeline is an asset packaging library for Django.

Pipeline Pipeline is an asset packaging library for Django, providing both CSS and JavaScript concatenation and compression, built-in JavaScript templ

Python dependency management and packaging made easy.
Python dependency management and packaging made easy.

Poetry: Dependency Management for Python Poetry helps you declare, manage and install dependencies of Python projects, ensuring you have the right sta

A modern Python application packaging and distribution tool

PyOxidizer PyOxidizer is a utility for producing binaries that embed Python. The over-arching goal of PyOxidizer is to make complex packaging and dist

Simplified packaging of Python modules

Flit is a simple way to put Python packages and modules on PyPI. It tries to require less thought about packaging and help you avoid common mistakes.

A simple weather tool. I made this as a way for me to learn Python, API, and PyPi packaging.
A simple weather tool. I made this as a way for me to learn Python, API, and PyPi packaging.

A simple weather tool. I made this as a way for me to learn Python, API, and PyPi packaging.

QPT-Quick packaging tool 前项式Python环境快捷封装工具

QPT - Quick packaging tool 快捷封装工具 GitHub主页 | Gitee主页 QPT是一款可以“模拟”开发环境的多功能封装工具,一行命令即可将普通的Python脚本打包成EXE可执行程序,与此同时还可轻松引入CUDA等深度学习加速库, 尽可能在用户使用时复现您的开发环境。

Pipeline is an asset packaging library for Django.

Pipeline Pipeline is an asset packaging library for Django, providing both CSS and JavaScript concatenation and compression, built-in JavaScript templ

auto packaging for iOS

iOS Auto Packaging iOS自动打包脚本 准备 脚本第一次执行之前 先检查依赖, packaging目录下终端执行 pip3 install -r requirements.txt 运行 cd packaging packaging.py -h help -s scheme

A library which implements low-level functions that relate to packaging and distribution of Python

What is it? Distlib is a library which implements low-level functions that relate to packaging and distribution of Python software. It is intended to

Automatic packaging of the open-composite libs for OvGME

OvGME Packager for OpenXR – OpenComposite for DCS Note This repository is currently unsupported and needs to be migrated to the upstream OpenComposite

Comments
  • setup.py install fails when building repo cloned from Github

    setup.py install fails when building repo cloned from Github

    Trying to build the IPS repo cloned from Github results in exception in pydates:

    $ python3.7 ./src/setup.py install
    running install
    running build
    running build_py
    Traceback (most recent call last):
      File "/home/vkotal/solaris-ips/src/pydates", line 36, in <module>
        repo = localrepo.instance(myui, cmdutil.findrepo(os.getcwd()), False)
      File "/usr/lib/python2.7/dist-packages/mercurial/localrepo.py", line 2810, in instance
        localpath = util.urllocalpath(path)
      File "/usr/lib/python2.7/dist-packages/mercurial/util.py", line 2947, in urllocalpath
        return url(path, parsequery=False, parsefragment=False).localpath()
      File "/usr/lib/python2.7/dist-packages/mercurial/util.py", line 2726, in __init__
        if hasdriveletter(path) or path.startswith('\\\\'):
    AttributeError: 'NoneType' object has no attribute 'startswith'
    

    This is because it constructs a Mercurial repository object from cmdutil.findrepo(os.getcwd()). Of course, the repo cloned from Github is Git repo and not a Mercurial repo as the findrepo() expects, therefore it returns None.

    opened by vladak 2
  • Traceback in cli.t_pkg_depotd.py TestPkgDepot.test_empty_incorp_depend

    Traceback in cli.t_pkg_depotd.py TestPkgDepot.test_empty_incorp_depend

    Running the test-suite on Solaris 11.4, I see a test failure in TestPkgDepot.test_empty_incorp_depend which was not there before https://github.com/oracle/solaris-ips/commit/729c95dff6f40fc4b8dae84c8381c96db60cc8d1

    The problem is in CatalogInterface.gen_allowed_packages() in that md.get("actions") always returns an empty set and so the loop's else: clause is entered without f ever having been assigned.

    I fixed it with:

    --- a/src/modules/server/api.py
    +++ b/src/modules/server/api.py
    @@ -159,11 +159,8 @@ class CatalogInterface(_Interface):
                             allowed.setdefault(pkg_name, [])
                             for v, entries in cat.entries_by_version(pkg_name,
                                 info_needed=cat_info, pubs=pubs):
    -                                for f, fa in (
    -                                    (f, fa)
    -                                    for f, md in entries
    -                                    for fa in md.get("actions", misc.EmptyI)
    -                                ):
    +                                for f, md in entries:
    +                                    for fa in md.get("actions", misc.EmptyI):
                                             if not fa.startswith("set"):
                                                     continue
    
    @@ -180,7 +177,7 @@ class CatalogInterface(_Interface):
                                                     del a
                                                     break
                                             del a
    -                                else:
    +                                    else:
                                             allowed[pkg_name].append((f, sn))
    
                     sort_ver = itemgetter(0)
    

    However, it does seem that there is a bigger problem here since I can't determine how the set actions that are being checked for could ever be returned with this test (same with the code before this latest commit).

    opened by citrus-it 1
Owner
Oracle
Open Source at Oracle
Oracle
Python PyPi staging server and packaging, testing, release tool

devpi: PyPI server and packaging/testing/release tool This repository contains three packages comprising the core devpi system on the server and clien

null 629 Jan 1, 2023
Python dependency management and packaging made easy.

Poetry: Dependency Management for Python Poetry helps you declare, manage and install dependencies of Python projects, ensuring you have the right sta

Poetry 23.2k Jan 5, 2023
OS-agnostic, system-level binary package manager and ecosystem

Conda is a cross-platform, language-agnostic binary package manager. It is the package manager used by Anaconda installations, but it may be used for

Conda 5.1k Dec 30, 2022
OS-agnostic, system-level binary package manager and ecosystem

Conda is a cross-platform, language-agnostic binary package manager. It is the package manager used by Anaconda installations, but it may be used for

Conda 5.1k Jan 7, 2023
An installation and dependency system for Python

Pyflow Simple is better than complex - The Zen of Python Pyflow streamlines working with Python projects and files. It's an easy-to-use CLI app with a

David O'Connor 1.2k Dec 23, 2022
Library Management System

Library Management Library Management System How to Use run main.py python file. python3 main.py Links Download Source Code: Click Here My Github Aco

Mohammad Dori 3 Jul 15, 2022
A toolkit for geo ML data processing and model evaluation (fork of solaris)

An open source ML toolkit for overhead imagery. This is a beta version of lunular which may continue to develop. Please report any bugs through issues

Ryan Avery 4 Nov 4, 2021
CVE 2020-14871 Solaris exploit

CVE 2020-14871 Solaris exploit This is a basic ROP based exploit for CVE 2020-14871. CVE 2020-14871 is a vulnerability in Sun Solaris systems. The act

Robin Massink 2 Oct 25, 2022
Tool for quickly gathering information from Shodan.io about the number of IPs which satisfy large number of different queries

TriOp Tool for quickly gathering information from Shodan.io about the number of IPs which satisfy large number of different queries For furt

Jan Kopriva 27 Nov 3, 2022
domhttpx is a google search engine dorker with HTTP toolkit built with python, can make it easier for you to find many URLs/IPs at once with fast time.

domhttpx is a google search engine dorker with HTTP toolkit built with python, can make it easier for you to find many URLs/IPs at once with fast time

Naufal Ardhani 59 Dec 4, 2022