Installing a package the normal way: The package contains: ~/tmp> unzip -l einstein-2.0-1-haiku-gcc4-x86-09-03-01.pkg.zip Archive: einstein-2.0-1-haiku-gcc4-x86-09-03-01.pkg.zip Length Date Time Name -------- ---- ---- ---- 154 08-04-09 11:59 .PKGINFO 0 08-04-09 12:00 einstein/ 1042519 02-28-09 12:15 einstein/einstein 0 08-04-09 12:00 einstein/res/ 656076 02-28-09 11:42 einstein/res/einstein.res -------- ------- 1698749 5 files ~/tmp> The .PKGINFO file looks like this: ~/tmp> unzip -p einstein-2.0-1-haiku-gcc4-x86-09-03-01.pkg.zip .PKGINFO pkgname = einstein pkgver = 2.0-1 url = http://games.flowix.com/en/index.html depend = sdl depend = sdl_mixer depend = sdl_ttf arch = x86 packager = Blub ~/tmp> Now, in this case I haven't put the package into a repository, I can work with the file directly. As you can see, this is an Application. Its files are not in the /boot/common directory, which means I have to use an installdir other than the default: currently /boot ~/tmp> pacman -U --installdir /boot/apps einstein-2.0-1-haiku-gcc4-x86-09-03-01.pkg.zip loading package data... checking dependencies... (1/1) checking for file conflicts [######################################################################################] 100% (1/1) installing einstein [######################################################################################] 100% ~/tmp> pacman -Ql einstein einstein (boot/apps/) /einstein/ einstein (boot/apps/) /einstein/einstein einstein (boot/apps/) /einstein/res/ einstein (boot/apps/) /einstein/res/einstein.res ~/tmp> After installing I listed the installed files from "einstein". When querying a package, you refer to it using only its name. The output format is: name (installdir) file Now, this package depends on some SDL libs which I have installed in /boot/common, otherwise pacman would have installed those, too. (but into /boot/apps, which is something that has yet to be changed) Another possibility is to create a bundle - how? Here's a log: ~/tmp> pacman -Rd einstein # remove the previous installation (1/1) removing einstein [#######################################################################################################################] 100% ~/tmp> TMP=`mktemp -d` ~/tmp> mkdir bundle # we need a place to create the installation - the tmp directory is used to change the pacman DB so it thinks nothing is installed yet ~/tmp> pacman -U --dbpath $TMP --installdir $PWD/bundle einstein-2.0-1-haiku-gcc4-x86-09-03-01.pkg.zip loading package data... checking dependencies... error: failed to prepare transaction (could not satisfy dependencies) :: einstein: requires sdl :: einstein: requires sdl_mixer :: einstein: requires sdl_ttf ~/tmp> pacman -Ud --dbpath $TMP --installdir $PWD/bundle einstein-2.0-1-haiku-gcc4-x86-09-03-01.pkg.zip loading package data... (1/1) checking for file conflicts [#######################################################################################################################] 100% (1/1) installing einstein [#######################################################################################################################] 100% ~/tmp> pacman -S --dbpath $TMP --installdir /boot/home/tm/bundle/einstein/ ~/tmp> ls bundle einstein ~/tmp> pacman -S --dbpath $TMP --installdir $PWD/bundle/einstein sdl_mixer sdl_ttf sdl_mixer package not found, searching for group... error: 'sdl_mixer': not found in sync db Of course, first of all, -U only works with files, so we cannot have it install the dependencies directly, pacman doesn't do that. Also, since we changed the DB-Path, we need to synchronize with -Sy to get a list of the available packages - currentle $TMP's database is empty... Let's continue, we'll see that -S will pull in lots of other dependencies now: ~/tmp> pacman -Sy --dbpath $TMP --installdir $PWD/bundle/einstein sdl_mixer sdl_ttf :: Synchronizing package databases... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 10130 100 10130 0 0 8082k 0 --:--:-- --:--:-- --:--:-- 0 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 107 858 107 858 0 0 740k 0 --:--:-- --:--:-- --:--:-- 0 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 109 874 109 874 0 0 905k 0 --:--:-- --:--:-- --:--:-- 0 resolving dependencies... looking for inter-conflicts... Targets (9): sdl-1.2.13-3 libogg-1.1.3-0 libvorbis-1.2.0-0 libmikmod-3.1.12-0 smpeg-0.4.4-5 sdl_mixer-1.2.8-3 zlib-1.2.3-0 freetype2-2.3.8-0 sdl_ttf-2.0.9-0 Total Download Size: 0.00 MB Total Installed Size: 3.66 MB Proceed with installation? [Y/n] Y checking package integrity... (9/9) checking for file conflicts [#######################################################################################################################] 100% (1/9) installing sdl [#######################################################################################################################] 100% (2/9) installing libogg [#######################################################################################################################] 100% (3/9) installing libvorbis [#######################################################################################################################] 100% (4/9) installing libmikmod [#######################################################################################################################] 100% (5/9) installing smpeg [#######################################################################################################################] 100% (6/9) installing sdl_mixer [#######################################################################################################################] 100% (7/9) installing zlib [#######################################################################################################################] 100% (8/9) installing freetype2 [#######################################################################################################################] 100% (9/9) installing sdl_ttf [#######################################################################################################################] 100% ~/tmp> ls bundle einstein ~/tmp> ls bundle/einstein/ common einstein res ~/tmp> mv bundle/einstein/{common/lib,} ~/tmp> ls bundle/einstein/ common einstein lib res ~/tmp> ls bundle/einstein/common/ bin include share ~/tmp> rm -rf bundle/einstein/common/{bin,include,share} # those are unnecessary ~/tmp> rmdir bundle/einstein/common/ # could have done that directly ... ~/tmp> cd bundle/ ~/tmp/bundle> ls einstein Now we need a PKGINFO file without the dependencies listed, I'll use the "shortcut" there and `zip -p`-pipe the .PKGINFO into a grep command and from thre into the new .PKGINFO file. ~/tmp/bundle> unzip -p ../einstein-2.0-1-haiku-gcc4-x86-09-03-01.pkg.zip .PKGINFO |grep -v depend > .PKGINFO ~/tmp/bundle> cat .PKGINFO # we stripped the SDL dependencies pkgname = einstein pkgver = 2.0-1 url = http://games.flowix.com/en/index.html arch = x86 packager = Blub ~/tmp/bundle> zip -y9r ../einstein-2.0-1-haiku-gcc4-x86-09-03-01.bundle.pkg.zip .PKGINFO * updating: .PKGINFO (deflated 9%) adding: einstein/ (stored 0%) adding: einstein/einstein (deflated 68%) adding: einstein/lib/ (stored 0%) adding: einstein/lib/libSDL-1.2.so.0 (stored 0%) adding: einstein/lib/libSDL-1.2.so.0.11.2 (deflated 57%) adding: einstein/lib/libSDL.a (deflated 63%) adding: einstein/lib/libSDL.so (stored 0%) adding: einstein/lib/libSDL_mixer-1.2.so.0 (stored 0%) adding: einstein/lib/libSDL_mixer-1.2.so.0.2.6 (deflated 56%) adding: einstein/lib/libSDL_mixer.a (deflated 62%) adding: einstein/lib/libSDL_mixer.la (deflated 49%) adding: einstein/lib/libSDL_mixer.so (stored 0%) adding: einstein/lib/libSDL_ttf-2.0.so.0 (stored 0%) adding: einstein/lib/libSDL_ttf-2.0.so.0.6.3 (deflated 59%) adding: einstein/lib/libSDL_ttf.a (deflated 55%) adding: einstein/lib/libSDL_ttf.la (deflated 49%) adding: einstein/lib/libSDL_ttf.so (stored 0%) adding: einstein/lib/libSDLmain.a (deflated 64%) adding: einstein/lib/libfreetype.so (stored 0%) adding: einstein/lib/libfreetype.so.6 (stored 0%) adding: einstein/lib/libfreetype.so.6.3.19 (deflated 55%) adding: einstein/lib/libmikmod.a (deflated 62%) adding: einstein/lib/libmikmod.la (deflated 48%) adding: einstein/lib/libmikmod.so (stored 0%) adding: einstein/lib/libmikmod.so.2 (stored 0%) adding: einstein/lib/libmikmod.so.2.0.4 (deflated 62%) adding: einstein/lib/libogg.a (deflated 57%) adding: einstein/lib/libogg.la (deflated 47%) adding: einstein/lib/libogg.so (stored 0%) adding: einstein/lib/libogg.so.0 (stored 0%) adding: einstein/lib/libogg.so.0.5.3 (deflated 54%) adding: einstein/lib/libsmpeg-0.4.so.0 (stored 0%) adding: einstein/lib/libsmpeg-0.4.so.0.1.3 (deflated 65%) adding: einstein/lib/libsmpeg.a (deflated 68%) adding: einstein/lib/libsmpeg.so (stored 0%) adding: einstein/lib/libvorbis.a (deflated 47%) adding: einstein/lib/libvorbis.la (deflated 49%) adding: einstein/lib/libvorbis.so (stored 0%) adding: einstein/lib/libvorbis.so.0 (stored 0%) adding: einstein/lib/libvorbis.so.0.4.0 (deflated 43%) adding: einstein/lib/libvorbisenc.a (deflated 91%) adding: einstein/lib/libvorbisenc.la (deflated 51%) adding: einstein/lib/libvorbisenc.so (stored 0%) adding: einstein/lib/libvorbisenc.so.2 (stored 0%) adding: einstein/lib/libvorbisenc.so.2.0.3 (deflated 91%) adding: einstein/lib/libvorbisfile.a (deflated 50%) adding: einstein/lib/libvorbisfile.la (deflated 51%) adding: einstein/lib/libvorbisfile.so (stored 0%) adding: einstein/lib/libvorbisfile.so.3 (stored 0%) adding: einstein/lib/libvorbisfile.so.3.2.0 (deflated 50%) adding: einstein/lib/libz.a (deflated 50%) adding: einstein/lib/libz.so (stored 0%) adding: einstein/lib/libz.so.1 (stored 0%) adding: einstein/lib/libz.so.1.2.3 (deflated 46%) adding: einstein/lib/pkgconfig/ (stored 0%) adding: einstein/lib/pkgconfig/freetype2.pc (deflated 33%) adding: einstein/lib/pkgconfig/ogg.pc (deflated 31%) adding: einstein/lib/pkgconfig/sdl.pc (deflated 31%) adding: einstein/lib/pkgconfig/vorbis.pc (deflated 33%) adding: einstein/lib/pkgconfig/vorbisenc.pc (deflated 37%) adding: einstein/lib/pkgconfig/vorbisfile.pc (deflated 37%) adding: einstein/res/ (stored 0%) adding: einstein/res/einstein.res (deflated 1%) ~/tmp/bundle> cd .. Cleaning is fun! ~/tmp/bundle> rm -rf $TMP # cleanup ~/tmp/bundle> unset TMP And now the bundle can be installed, it acts like a normal package, but keep in mind that its entries start with einstein/ and not with boot/apps/einstein/ so let's use --installdir /boot/apps One could add an install-dir suggestion to the .PKGINFO files, so that when creating a GUI frontend to pacman it would know what to do. ~/tmp> pacman -U --installdir /boot/apps einstein-2.0-1-haiku-gcc4-x86-09-03-01.bundle.pkg.zip loading package data... checking dependencies... (1/1) checking for file conflicts [#######################################################################################################################] 100% (1/1) installing einstein [#######################################################################################################################] 100% ~/tmp> ls /boot/apps/einstein/ einstein lib res ~/tmp> Now I can even remove my locally installed libraries and still play einstein :)