Using OPKG with mLinux
Creating a Package Repository for OPKG
A simple way to create a package repository is to use the mLinux™ build tree. To create a repository, place the packages needed into one of the directories under build/tmp/deploy/ipk. Remove any ipk files that are not part of your recipe, and are normally a part of mLinux.
In this case we assume our custom recipe created packages in the directory arm926ejste:
$ cd build/tmp/deploy/ipk/arm926ejste $ cp my_ipk1.ipk my_ipk2.ipk ~/save $ rm *.ipk $ cp ~/save/*.ipk . $ bitbake package-index $ ls -1 myipk1_2.9.3-r0.0_arm926ejste.ipk myipk2_4.13-r0.0_arm926ejste.ipk Packages Packages.gz Packages.stamps
The bitbake recipe package-index will create a new package index based on the ipk packages present in the directory.
The complete set of files compose the repository, and can be placed on a web server, or in a local directory on the device.
Configuration
Files Found in /etc/opkg
/etc/opkg/mlinux-feed.conf
This lists the mlinux feed that is used to find packages. This file will be set to the current level of mLinux. If you wish to update packages because of a problem, you could set this to a newer level. Be aware that Multitech may release incompatible levels in the future. An incorrect upgrade could make your device not able to boot Linux, and you will need to re-flash your device.
To use the mlinux-feed.conf file as is, the Conduit® should be connected to the public internet.
If the public internet is not available, the files may be mirrored on a local web server, and the URLs in mLinux.conf should be updated accordingly.
/etc/opkg/local.conf
A local configuration file. You may create this file if you have your own repository with your own applications. You may add files named *.conf for additional repositories. Repositories may be on local storage. This could include a usb connected drive, or SD card if available (not possible on MTCAP).
Example contents of /etc/opkd/local.conf:
src/gz local file:///var/volatile/myrepo
Any repository placed in /var/volatile will be deleted on a reboot or power outage.
Contents of the repository:
$ ls /var/volatile/myrepo myipk1_2.9.3-r0.0_arm926ejste.ipk myipk2_4.13-r0.0_arm926ejste.ipk Packages Packages.gz Packages.stamps
OPKG Cache
Found in /var/lib/opkg. These should not be modified.
The package lists with checksums are here:
local mlinux-arm926ejste mlinux-mtcap mlinux-all
These are package lists from the repositories.
There is also an info directory with configuration files from each package, package install, and package removal instructions.
The lists directory has descriptions of packages.
Enabling the package repositories
After making the files available on the Conduit, either through a web server, or in a local directory, issue the package update command on the device:
$ opkg update Downloading http://multitech.net/mlinux/feeds/3.3.9/all/Packages.gz. Inflating http://multitech.net/mlinux/feeds/3.3.9/all/Packages.gz. Updated list of available packages in /var/lib/opkg/mlinux-all. Downloading http://multitech.net/mlinux/feeds/3.3.9/arm926ejste/Packages.gz. Inflating http://multitech.net/mlinux/feeds/3.3.9/arm926ejste/Packages.gz. Updated list of available packages in /var/lib/opkg/mlinux-arm926ejste. Downloading http://multitech.net/mlinux/feeds/3.3.9/mtcap/Packages.gz. Inflating http://multitech.net/mlinux/feeds/3.3.9/mtcap/Packages.gz. Updated list of available packages in /var/lib/opkg/mlinux-mtcap. Downloading file:///var/volatile/myrepo/Packages.gz. Inflating file:///var/volatile/myrepo/Packages.gz. Updated list of available packages in /var/lib/opkg/local.
Package Revision Level Concerns and Checksums
After you issue the package update command, bear in mind that the checksums in the package lists will be applied to all packages of the same name. This includes ipk packages that are not installed as part of the repositories.
If you need to make changes to a recipe that creates a package that is normally part of a repository, you should update the revision level of the package, so that opkg will use the latest revision, and not use the checksum from the older revision of the file which will cause your package to not install. The revision level of a package is set by the PR variable in a bitbake recipe.
If you intend on using a package that is already in a repository, you should not create your own of the same name. You should either install it from the repository, or copy the file from the repository to the device if you do not wish to install from the repository.
Do not use your own mLinux build tree to create a new functionally identical package and attempt to install it. The file named Packages in each repository lists the package names from the repository. You can also browse the mLinux packages in the file /etc/opkg/mlinux-feed.conf by using the URL in a browser:
http://multitech.net/mlinux/feeds/3.3.12/arm926ejste
Upgrading packages
If you are able to do the opkg update command you should be able to list the upgradable packages that are currently installed:
# opkg list-upgradable libmts-io0 - 0.6 - r0.0 - 1.0.1 - r0.0 lora-network-server - 1.0.36-r1.0 - 1.0.40-r1.0 radio-cmd - 0.3-r0.0 - 0.4-r0.0 mts-io - 1.5.13-r9.0.0 - 1.5.16-r9.0.0 sms-utils -1.0.2-r0.0 - 1.0.4-r0.0 ppp - 2.4.7-r8.1 - 2.4.7-r9.0 mlinux-scripts 1.0-r5.0 - 1.1-r2.0 radio-query 0.2-r0.0 - 0.4-r0.0 mlinux-version - 1:3.3.9_0947d212fc4c10871c66b4d83c97c5634dc1b8c7-r2.0 - 1:3.3.12_110a59d3c27c7b5923b32c6430e681059128a26e-r2.0 mts-id-eeprom - 0.2.10-r0.0.1 - 0.3.3-r0.0.0
To perform the upgrade you may either select individual packages or install all the upgrades:
# opkg upgrade Upgrading libmts-io0 on root from 0.6-r0.0 to 1.0.1-r0.0... Downloading http://multitech.net/mlinux/feeds/3.3.12/arm926ejste/libmts-io0_1.0.1-r0.0_arm926ejste.ipk. Upgrading radio-cmd on root from 0.3-r0.0 to 0.4-r0.0... Downloading http://multitech.net/mlinux/feeds/3.3.12/arm926ejste/radio-cmd_0.4-r0.0_arm926ejste.ipk. Upgrading mts-io on root from 1.5.13-r9.0.0 to 1.5.16-r9.0.0... Downloading http://multitech.net/mlinux/feeds/3.3.12/mtcap/mts-io_1.5.16-r9.0.0_mtcap.ipk. Unloading mts-io module [INFO] mts-io:cleanup:967: cleaning up.... [INFO] mts-io:mts_io_exit:1050: exiting update-rc.d: /etc/init.d/mts-io exists during rc.d purge (continuing) Removing any system startup links for mts-io ... /etc/rcS.d/S39mts-io Upgrading sms-utils on root from 1.0.2-r0.0 to 1.0.4-r0.0... Downloading http://multitech.net/mlinux/feeds/3.3.12/arm926ejste/sms-utils_1.0.4-r0.0_arm926ejste.ipk. Upgrading ppp on root from 2.4.7-r8.1 to 2.4.7-r9.0... Downloading http://multitech.net/mlinux/feeds/3.3.12/arm926ejste/ppp_2.4.7-r9.0_arm926ejste.ipk. Upgrading mlinux-scripts on root from 1.0-r5.0 to 1.1-r2.0... Downloading http://multitech.net/mlinux/feeds/3.3.12/arm926ejste/mlinux-scripts_1.1-r2.0_arm926ejste.ipk. Upgrading radio-query on root from 0.2-r0.0 to 0.4-r0.0... Downloading http://multitech.net/mlinux/feeds/3.3.12/arm926ejste/radio-query_0.4-r0.0_arm926ejste.ipk. Upgrading mlinux-version on root from 1:3.3.9_0947d212fc4c10871c66b4d83c97c5634dc1b8c7-r2.0 to 1:3.3.12_110a59d3c27c7b5923b32c6430e681059128a26e-r2.0... Downloading http://multitech.net/mlinux/feeds/3.3.12/mtcap/mlinux-version_3.3.12_110a59d3c27c7b5923b32c6430e681059128a26e-r2.0_mtcap.ipk. Upgrading mts-id-eeprom on root from 0.2.10-r0.0.1 to 0.3.3-r0.0.0... Downloading http://multitech.net/mlinux/feeds/3.3.12/mtcap/mtsideeprom_0.3.3-r0.0.0_mtcap.ipk. Configuring libmts-io0. …
Installing a Package
When installing a package, the opkg package manager will determine the dependencies. If the device is connected to the repository, these dependencies will be installed automatically. In this example, an install of gpsd brings in all of its dependencies:
$ opkg install gpsd Installing gpsd (3.16-m3.0) to root... Downloading http://multitech.net/mlinux/feeds/3.3.12/arm926ejste/gpsd_3.16-m3.0_arm926ejste.ipk. gpsd: unsatisfied recommendation for gpsd-machine-conf Installing bluez4 (4.101-r10.0) to root... Downloading http://multitech.net/mlinux/feeds/3.3.12/arm926ejste/bluez4_4.101-r10.0_arm926ejste.ipk. Installing libudev0 (182-r7.mlinux2.0) to root... Downloading http://multitech.net/mlinux/feeds/3.3.12/mtcap/libudev0_182-r7.mlinux2.0_mtcap.ipk. Installing libglib-2.0-0 (1:2.38.2-r0.0) to root... Downloading http://multitech.net/mlinux/feeds/3.3.12/arm926ejste/libglib-2.0-0_2.38.2-r0.0_arm926ejste.ipk. Installing libffi6 (3.0.13-r0.0) to root... Downloading http://multitech.net/mlinux/feeds/3.3.12/arm926ejste/libffi6_3.0.13-r0.0_arm926ejste.ipk. Installing libusb-0.14 (1:0.1.5-r0.0) to root... Downloading http://multitech.net/mlinux/feeds/3.3.12/arm926ejste/libusb-0.14_0.1.5-r0.0_arm926ejste.ipk. Installing gpsd-gpsctl (3.16-m3.0) to root... Downloading http://multitech.net/mlinux/feeds/3.3.12/arm926ejste/gpsd-gpsctl_3.16-m3.0_arm926ejste.ipk. Installing gpsd-conf (3.16-m3.0) to root... Downloading http://multitech.net/mlinux/feeds/3.3.12/arm926ejste/gpsd-conf_3.16-m3.0_arm926ejste.ipk. Installing gpsd-udev (3.16-m3.0) to root... Downloading http://multitech.net/mlinux/feeds/3.3.12/arm926ejste/gpsd-udev_3.16-m3.0_arm926ejste.ipk. update-rc.d: /etc/init.d/gpsd exists during rc.d purge (continuing) Removing any system startup links for gpsd ... Configuring libusb-0.1-4. Configuring libffi6. Configuring gpsd-conf. update-alternatives: Linking //etc/default/gpsd to /etc/default/gpsd.default Configuring libudev0. Configuring libglib-2.0-0. Configuring bluez4. Configuring gpsd-gpsctl. Configuring gpsd-udev. Configuring gpsd. Adding system startup for /etc/init.d/gpsd. $
More Information
For more information on OPKG: