FAQ: Porting Opensource packages to AIX PDF Print E-mail
User Rating: / 4
PoorBest 
Written by Michael Felt   

I have been spending some time lately porting opensource packages to AIX. For rootvg forums I am dependent on PHP for example, and as I look for ways to improve things I discover I need yet another module added into php. By the way, php has always been one of the harder opensource packages to get compiled.

Initially, there are just a few questions - because I'll only add a question AFTER I have the anwser.

Q. What steps are needed to compile an opensource package?
A. Generally, for AIX the steps are the same as for any *nix platform. Have a working compiler, download the package - ususally a compressed tar file (.gz, tgz, bz2, zip),uncompress and extract the source files to a seperate directory, cd to the package "root", and run the sequence: ./configure; make; make test; make install.

Q. What are common problems with porting opensource on AIX, or *nix?
A. The most common problem is not having a requirement already installed. For example, some projects require gnumake, a specific version of autoconf or libtool to configure or make (build). The may be requirements at link time (configure generally checks for these first) such as libz.a or libssl.a (Z compression and openssl support). And these requirements might have requirements.

Q. What is wrong? I am getting a message (exec(): 0509-036 Cannot load program sapi/cli/php because of the following errors:) that a library cannot be found but the link worked fine?
A. The AIX linker seems to have a different way of looking at resolving things than the program does at runtime. I have run into this a couple of times while building PHP. In this case - after I built curl support into PHP.
Build complete.
Don't forget to run 'make test'.

michael@x054:[/data/home/michael/prj/php5.2-200910031430]r sapi
sapi/cli/php -v
exec(): 0509-036 Cannot load program sapi/cli/php because of the following errors:
        0509-022 Cannot load module /usr/local/lib/libcurl.a(libcurl.so.4).
        0509-150   Dependent module /usr/local/ssl/lib/libcrypto.a(libcrypto.so.0.9.8) could not be loaded.
        0509-152   Member libcrypto.so.0.9.8 is not found in archive
        0509-022 Cannot load module php.
        0509-150   Dependent module /usr/local/lib/libcurl.a(libcurl.so.4) could not be loaded.
        0509-022 Cannot load module .

This can be fixed by specifying a LIBPATH environment specific for this application:
LIBPATH=/usr/local/lib:/usr/lib sapi/cli/php -v
PHP 5.2.12-dev (cli) (built: Oct  3 2009 15:54:54)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
This is how you are able to override the default, or compiled, LIBPATH in the application.

Q. How can I see an applications default LIBPATH settings.
A. dump -H application
michael@x054:[/data/home/michael/prj/php5.2-200910031430]r dump
dump -H sapi/cli/php
sapi/cli/php:

                        ***Loader Section***
                      Loader Header Information
VERSION#         #SYMtableENT     #RELOCent        LENidSTR
0x00000001       0x00001574       0x0000d0a1       0x0000017a      

#IMPfilID        OFFidSTR         LENstrTBL        OFFstrTBL
0x0000000b       0x000bca8c       0x0001de11       0x000bcc06      


                        ***Import File Strings***
INDEX  PATH                          BASE                MEMBER             
0      /usr/local/lib:/usr/local/ssl/lib:/usr/lib/lib:/usr/local/mysql/lib:/usr/vac/lib:/usr/lib:/lib                                        
1                                    libmysqlclient.so                      
2      /usr/local/lib                libfreetype.a       libfreetype.so.6   
3      /usr/local/lib                libpng12.a          libpng12.so.0      
4                                    libiconv.a          shr4.o             
5      /usr/local/lib                libcurl.a           libcurl.so.4       
6      /usr/local/lib                libxml2.a           libxml2.so.2       
7                                    libpthread.a        shr_comm.o         
8                                    libpthread.a        shr_xpg5.o         
9                                    libc.a              shr.o              
10                                   librtl.a            shr.o              

Q. How can I modify the default LIBPATH for an opensource package.
A. You need to specify the -blibpath argument to the LDFLAGS environment variables (it must be exported!) before running ./configure.
export LDFLAGS='-blibpath:/usr/lib/local:/usr/lib:/usr/local/mysql/lib'
./configure

Q. What is the best default directory?
A. I don't dare say which is best. There are, in my opinion, two good choices on AIX. Either /usr/local or /opt/local. The directory /usr/local is very popular in the rest of the *nix world. However, when AIX 5L (for Linux Affinity) came out IBM introduced the the /opt directory for optional software. Bull Freeware and AIX RPM packages seem to prefer the /opt directory as a root rather than /usr. I used /usr/local for years. And even though I say /usr/local and /opt/local are the two expected choices I have chosen to use a non-standard directory for installation - /data/local - and I keep it outside of the rootvg voulme group. Because most configure scripts expect include files, libraries, etc in /usr/local (and some even have /opt/local) I have a symbolic link for /usr/local pointing to /data/local.(ln -s /data/local /usr/local). In any case I highly recommend a seperate logical volume and file system - ideally seperate form rootvg volume group.

Q. How can I get a hung "make test" to complete?
A. Most of the time there are tests that fail - so called known bugs. But sometimes a test just hangs for hours. I made the mistake of pressing 'ctrl-C' to stop the failed test - but it stopped the whole make test process. To get a finished report I had to start the tests again, and then when the test hangs - use ps to find the process ID of the test and kill it seperately. The test monitor program will see that the test has not completed properly, mark it as a FAIL, and start the next test. And when the final test completes you will have a test report you can save and/or send to the opensource developers.

 
< Prev   Next >
61 queries executed
1
SET sql_mode = 'MYSQL40'
2 SELECT folder, element, published, params FROM jos_mambots WHERE published >= 1 AND access <= 0 AND folder = 'system' ORDER BY ordering
3 SELECT template FROM jos_templates_menu WHERE client_id = 0 AND ( menuid = 0 OR menuid = 317 ) ORDER BY menuid DESC LIMIT 1
4 DELETE FROM jos_session WHERE ( ( time < '1548314357' ) AND guest = 0 AND gid > 0 ) OR ( ( time < '1548314357' ) AND guest = 1 AND userid = 0 )
5 SELECT COUNT(*) FROM jos_stats_agents WHERE agent = 'Unknown' AND type = 0
6 UPDATE jos_stats_agents SET hits = ( hits + 1 ) WHERE agent = 'Unknown' AND type = 0
7 SELECT COUNT(*) FROM jos_stats_agents WHERE agent = 'Unknown' AND type = 1
8 UPDATE jos_stats_agents SET hits = ( hits + 1 ) WHERE agent = 'Unknown' AND type = 1
9 SELECT COUNT(*) FROM jos_stats_agents WHERE agent = 'com' AND type = 2
10 UPDATE jos_stats_agents SET hits = ( hits + 1 ) WHERE agent = 'com' AND type = 2
11 SELECT * FROM jos_menu WHERE id = 317
12 SELECT a.*, u.name AS author, u.usertype, cc.name AS category, s.name AS section, g.name AS groups, s.published AS sec_pub, cc.published AS cat_pub, s.access AS sec_access, cc.access AS cat_access, s.id AS sec_id, cc.id as cat_id FROM jos_content AS a LEFT JOIN jos_categories AS cc ON cc.id = a.catid LEFT JOIN jos_sections AS s ON s.id = cc.section AND s.scope = 'content' LEFT JOIN jos_users AS u ON u.id = a.created_by LEFT JOIN jos_groups AS g ON a.access = g.id WHERE a.id = 372 AND ( a.state = 1 OR a.state = -1 ) AND ( a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2019-01-24 08:34' ) AND ( a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2019-01-24 08:34' ) AND a.access <= 0
13 SELECT a.id FROM jos_content AS a WHERE a.catid = 19 AND a.state = 1 AND a.access <= 0 AND ( a.state = 1 OR a.state = -1 ) AND ( a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2019-01-24 08:34' ) AND ( a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2019-01-24 08:34' ) ORDER BY a.ordering
14 SELECT ROUND( v.rating_sum / v.rating_count ) AS rating, v.rating_count FROM jos_content AS a LEFT JOIN jos_content_rating AS v ON a.id = v.content_id WHERE a.id = 372
15 UPDATE jos_content SET hits = ( hits + 1 ) WHERE id = '372'
16 SELECT hits FROM jos_core_log_items WHERE time_stamp = '2019-01-24' AND item_table = '#__content' AND item_id = '372'
17 UPDATE jos_core_log_items SET hits = ( hits + 1 ) WHERE time_stamp = '2019-01-24' AND item_table = '#__content' AND item_id = '372'
18 SELECT folder, element, published, params FROM jos_mambots WHERE access <= 0 AND folder = 'content' ORDER BY ordering
19 SELECT value FROM jos_bookmarks_prefs WHERE userid = '-1' AND category = 'params' AND name = 'urlkey'
20 SELECT value FROM jos_bookmarks_prefs WHERE userid = '-1' AND category = 'params' AND name = 'snapshotactiv'
21 SELECT value FROM jos_bookmarks_prefs WHERE userid = '-1' AND category = 'params' AND name = 'snapshotother'
22 SELECT id FROM jos_mambots WHERE element = 'mosbookmarks' AND folder = 'content'
23 SELECT * FROM jos_mambots WHERE id = '32'
24 SELECT name, value FROM jos_bookmarks_prefs WHERE userid = '-1' AND category = 'params' ORDER BY name
25 SELECT c.id, c.parent FROM jos_bookmarks_categories as c WHERE c.id = -1
26 SELECT * FROM jos_bookmarks_columns WHERE category='' AND custom='0'
27 SELECT * FROM jos_bookmarks_columns WHERE category='' ORDER BY ordering
28 SELECT * FROM jos_bookmarks_columns WHERE category='admin'
29 SELECT * FROM jos_bookmarks_columns WHERE category='admin' ORDER BY ordering
30 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
31 SELECT * FROM jos_mambots WHERE id = '27'
32 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
33 SELECT * FROM jos_mambots WHERE id = '27'
34 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
35 SELECT * FROM jos_mambots WHERE id = '27'
36 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
37 SELECT * FROM jos_mambots WHERE id = '27'
38 SELECT params FROM jos_mambots WHERE element = 'mosemailcloak' AND folder = 'content'
39 SELECT a.* FROM jos_components AS a WHERE ( a.admin_menu_link = 'option=com_syndicate' OR a.admin_menu_link = 'option=com_syndicate&hidemainmenu=1' ) AND a.option = 'com_syndicate'
40 SELECT m.id FROM jos_modules AS m WHERE m.module = 'mod_rssfeed' AND m.published = 1
41 SELECT id, title, module, position, content, showtitle, params FROM jos_modules AS m INNER JOIN jos_modules_menu AS mm ON mm.moduleid = m.id WHERE m.published = 1 AND m.access <= 0 AND m.client_id != 1 AND ( mm.menuid = 0 OR mm.menuid = 317 ) ORDER BY ordering
42 SELECT id FROM jos_menu WHERE link = 'index.php?option=com_search' AND published = 1
43 SELECT m.*, sum(case when p.published=1 then 1 else 0 end) as cnt FROM jos_menu AS m LEFT JOIN jos_menu AS p ON p.parent = m.id WHERE m.menutype='rt_splitSuckerFish' AND m.published='1' AND m.access <= '0' GROUP BY m.id ORDER BY m.parent, m.ordering
44 SELECT m.* FROM jos_menu AS m WHERE menutype='rt_splitSuckerFish' AND m.published='1'
45 SELECT * FROM jos_banner WHERE showBanner=1
46 SELECT id FROM jos_mambots WHERE element = 'mosbookmarks' AND folder = 'content'
47 SELECT * FROM jos_mambots WHERE id = '32'
48 SELECT name, value FROM jos_bookmarks_prefs WHERE userid = '-1' AND category = 'params' ORDER BY name
49 SELECT c.id, c.parent FROM jos_bookmarks_categories as c WHERE c.id = -1
50 SELECT * FROM jos_bookmarks_columns WHERE category='' AND custom='0'
51 SELECT * FROM jos_bookmarks_columns WHERE category='' ORDER BY ordering
52 SELECT * FROM jos_bookmarks_columns WHERE category='admin'
53 SELECT * FROM jos_bookmarks_columns WHERE category='admin' ORDER BY ordering
54 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
55 SELECT * FROM jos_mambots WHERE id = '27'
56 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
57 SELECT * FROM jos_mambots WHERE id = '27'
58 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
59 SELECT * FROM jos_mambots WHERE id = '27'
60 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
61 SELECT * FROM jos_mambots WHERE id = '27'