# OPKG
## Package management
<!-- Put the link to this slide here so people can follow -->
slide: https://hackmd.io/@Shihyu/rkBs2jIUH
---
Debian Ubuntu **Dpkg**: apt-get
Red hat **RPM**: rpm
Embedded systems: ipkg, opkg
---
OpenWrt is an open source project for embedded operating system based on Linux
3500 Packages in opkg
CPE routers (客製化路由器)
---
https://openwrt.org/docs/guide-user/additional-software/opkg
---
## Repositories
- /etc/opkg/distfeeds.conf
- /etc/opkg/customfeeds.conf
- Self host
- Local file
---
## Image Builder
https://openwrt.org/docs/guide-user/additional-software/imagebuilder
https://gitlab.program.com.tw/E_currency_detector2/mp1807r-imagebuilder-docker
---
## Creating packages
- package/Makefile
- package/patches
- package/files
https://openwrt.org/docs/guide-developer/packages
---
### package/bridge/Makefile:
```makefile
include $(TOPDIR)/rules.mk
PKG_NAME:=bridge
PKG_VERSION:=1.0.6
PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/bridge-utils-$(PKG_VERSION)
PKG_SOURCE:=bridge-utils-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=@SF/bridge
PKG_HASH:=9b7dc52656f5cbec846a7ba3299f73bd
PKG_CAT:=zcat
include $(INCLUDE_DIR)/package.mk
define Package/bridge
SECTION:=base
CATEGORY:=Network
TITLE:=Ethernet bridging configuration utility
#DESCRIPTION:=This variable is obsolete. use the Package/name/description define instead!
URL:=http://bridge.sourceforge.net/
endef
define Package/bridge/description
Ethernet bridging configuration utility
Manage ethernet bridging; a way to connect networks together to
form a larger network.
endef
define Build/Configure
$(call Build/Configure/Default,--with-linux-headers=$(LINUX_DIR))
endef
define Package/bridge/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/brctl/brctl $(1)/usr/sbin/
endef
$(eval $(call BuildPackage,bridge))
```
---
[Openwrt python packages github](https://github.com/openwrt/packages/tree/master/lang/python)
---
```makefile
#
# Copyright (C) 2007-2017 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=python-chardet
PKG_VERSION:=3.0.4
PKG_RELEASE:=2
PKG_LICENSE:=LGPL-2.1
PKG_SOURCE:=chardet-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://pypi.python.org/packages/fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d/
PKG_HASH:=84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae
PKG_BUILD_DIR:=$(BUILD_DIR)/$(BUILD_VARIANT)-chardet-$(PKG_VERSION)
include $(INCLUDE_DIR)/package.mk
include ../python-package.mk
include ../python3-package.mk
PKG_UNPACK:=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE)
define Package/python-chardet/Default
SUBMENU:=Python
SECTION:=lang
CATEGORY:=Languages
MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
URL:=https://github.com/chardet/chardet
endef
define Package/python-chardet
$(call Package/python-chardet/Default)
TITLE:=Universal encoding detector for Python 2
DEPENDS:=+PACKAGE_python-chardet:python
VARIANT:=python
endef
define Package/python3-chardet
$(call Package/python-chardet/Default)
TITLE:=Universal encoding detector for Python3
DEPENDS:=+PACKAGE_python3-chardet:python3-light
VARIANT:=python3
endef
define Package/python-chardet/description
Universal encoding detector for Python 2 and 3
endef
define Package/python3-chardet/description
$(call Package/python-chardet/description)
.
(Variant for Python3)
endef
define Py3Package/python3-chardet/install
$(INSTALL_DIR) $(1)/usr/bin
$(CP) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
for bin in $(1)/usr/bin/*; do \
mv $$$$bin $$$${bin}3 ; \
done
endef
$(eval $(call PyPackage,python-chardet))
$(eval $(call BuildPackage,python-chardet))
$(eval $(call BuildPackage,python-chardet-src))
$(eval $(call Py3Package,python3-chardet))
$(eval $(call BuildPackage,python3-chardet))
$(eval $(call BuildPackage,python3-chardet-src))
```
---
### In `install` fix header!
```makefile
define Py3Package/python3-chardet/install
$(INSTALL_DIR) $(1)/usr/bin
$(CP) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
# fix python exec path in scripts
$(SED) 's/#!.*/#!\/usr\/bin\/python3/g' $(1)/usr/bin/*
```
{"metaMigratedAt":"2023-06-14T23:59:14.490Z","metaMigratedFrom":"YAML","title":"OPKG (Open PacKaGe management)","breaks":true,"description":"A lightweight package management system based upon ipkg. It is written in C and resembles Advanced Packaging Tool (APT)/dpkg in operation.","contributors":"[{\"id\":\"f53b7b35-92dd-4684-a436-fe8a9a9f8a48\",\"add\":6814,\"del\":2302}]"}