Feels like cheating - openSSL updates PDF Print E-mail
User Rating: / 0
PoorBest 
Written by Michael Felt   
But maybe pragmatic is a better word.

What did I do? - that feels like cheating!

I am copying archive members from one library to another library so that the run-time linker finds the archive member it is looking for. The run-time linker search for a member is not exhaustive.

FYI - this article sat as draft for over year. I will write part two today - which covers what I did - better learned about packaging - between July 2015 when I wrote what is below - and today, 23 Sept 2016

AIXTOOLS and packaging Open-Source

One of the goals for AIX 5L was to be supportive of the Linux run-time environment - aka Linux affinitive or compatible. LINUX is, or was, not POSIX compliant. The Linux community adds something or modifies something that does not always co-exist with POSIX or even previous Linux definitions. I am told that co-existing holds back innovation. And while this may be true it does create difficulties for others that want to adopt an innovation but still need a previous environment or API (or should I say ABI?).

AIXTOOLS: Goal #1

Besides a purpose - "Make Opensource packages available in installp format" one of my goals for packaging - as AIXTOOLS "brand" - is to co-exist with existing packages - e.g., do not overwrite existing files. I have suffered packaging that does not attempt to achieve this "simple" goal. A common example comes from RPM packaging that overwrites a file that is also in an installp package. One of two things go wrong with some frequency. A) Uninstalling only one of the two packages means the other is broken because the common file is removed while both packages depended on it. B) The first (lets call it the original) package breaks because it is a different version of an API - especially when older, or because it has specific RTE (run-time environment) demands that are different (aka ABI differences).

"To co-exist" or "Not to co-exist"

Packaging software, especially as a "guest", i.e. not the owner of the specification for the run-time environment, is a complex process. Default locations such as /usr/lib are occupied with libraries that many programs depend on - and how to make sure that libraries with the same name are used rather than the libraries in a legacy location.
A start of a 'solution' that IBM and/or BULL choose back during the AIX 5.0 pre-release testing (put the libraries in /opt/freeware/lib and a symbolic link in /usr/lib) still reserves a location in /usr/lib because the location (the) rtl (run-time linker) searches for the library is /usr/lib. Remove or replace the symbolic link is the same as removing the library in /opt/freeware/lib.

API and ABI - why should I care?

There are many ways to start this discussion. I hope I am choosing one that is easy to understand. OpenSSL is an API. LibreSSL is a new implementation of the OpenSSL API. LibreSSL is not binary compatible with OpenSSL. (Compare this with MariaDB that means to be a binary replacement for MySQL).

OpenSSL (wiki) is an open-source implementation of the SSL and TLS protocols. This project is available - in source form  from www.openssl.org. Further, this implementaion is so popular that it can be seen as an API to SSL and TLS protocols. And then we can speak of different versions of OpenSSL (e.g., OpenSSL-0.9.8, OpenSSL-1.0.1).

A library, in binary form, represents a version of the API. On AIX different binary versions "co-exist" as different members in an archive. For example, the archive /usr/lib/libssl.a has members libssl.so.0.9.8 and libssl.so.1.0.0. Other *NIX versions do not dynamically link to a library member - instead they link to a shared object (.so) file - e.g. /usr/lib/libssl.so.0.9.8 or /usr/lib/libssl.so.1.0.0

Ideally, when a new binary version differs in a way that programs that dynamically linked to a previous version run functionally differently - the program(s) do(es) not run. The new binary version can be considered to not be ABI compatible with the previous version - even if (rather especially) when the program is still - source-code compatible to the API. (See http://stackoverflow.com/questions/3784389/difference-between-api-and-abi for one description/discussion of the difference between API/ABI). Having an archive (.a file) with multiple members, or multiple .so files in a certain directory makes it possible for multiple binary (aka ABI) versions to co-exist.

 
< Prev
109 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 = 169 ) ORDER BY menuid DESC LIMIT 1
4 DELETE FROM jos_session WHERE ( ( time < '1548313894' ) AND guest = 0 AND gid > 0 ) OR ( ( time < '1548313894' ) 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 = 169
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 = 710 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:26' ) AND ( a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2019-01-24 08:26' ) AND a.access <= 0
13 SELECT a.id FROM jos_content AS a WHERE a.catid = 74 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:26' ) AND ( a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2019-01-24 08:26' ) 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 = 710
15 UPDATE jos_content SET hits = ( hits + 1 ) WHERE id = '710'
16 SELECT hits FROM jos_core_log_items WHERE time_stamp = '2019-01-24' AND item_table = '#__content' AND item_id = '710'
17 UPDATE jos_core_log_items SET hits = ( hits + 1 ) WHERE time_stamp = '2019-01-24' AND item_table = '#__content' AND item_id = '710'
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 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'
39 SELECT m.id FROM jos_modules AS m WHERE m.module = 'mod_rssfeed' AND m.published = 1
40 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 = 169 ) ORDER BY ordering
41 SELECT a.id, a.introtext, a.fulltext , a.images, a.attribs, a.title, a.state FROM jos_content AS a INNER JOIN jos_categories AS cc ON cc.id = a.catid INNER JOIN jos_sections AS s ON s.id = a.sectionid WHERE a.state = 1 AND a.access <= 0 AND cc.access <= 0 AND s.access <= 0 AND (a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2019-01-24 08:26' ) AND (a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2019-01-24 08:26' ) AND a.catid = 44 AND cc.published = 1 AND s.published = 1 ORDER BY a.ordering LIMIT 15
42 SELECT id FROM jos_mambots WHERE element = 'mosbookmarks' AND folder = 'content'
43 SELECT * FROM jos_mambots WHERE id = '32'
44 SELECT name, value FROM jos_bookmarks_prefs WHERE userid = '-1' AND category = 'params' ORDER BY name
45 SELECT c.id, c.parent FROM jos_bookmarks_categories as c WHERE c.id = -1
46 SELECT * FROM jos_bookmarks_columns WHERE category='' AND custom='0'
47 SELECT * FROM jos_bookmarks_columns WHERE category='' ORDER BY ordering
48 SELECT * FROM jos_bookmarks_columns WHERE category='admin'
49 SELECT * FROM jos_bookmarks_columns WHERE category='admin' ORDER BY ordering
50 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
51 SELECT * FROM jos_mambots WHERE id = '27'
52 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
53 SELECT * FROM jos_mambots WHERE id = '27'
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_menu WHERE link = 'index.php?option=com_search' AND published = 1
59 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
60 SELECT m.* FROM jos_menu AS m WHERE menutype='rt_splitSuckerFish' AND m.published='1'
61 SELECT * FROM jos_banner WHERE showBanner=1
62 SELECT id FROM jos_mambots WHERE element = 'mosbookmarks' AND folder = 'content'
63 SELECT * FROM jos_mambots WHERE id = '32'
64 SELECT name, value FROM jos_bookmarks_prefs WHERE userid = '-1' AND category = 'params' ORDER BY name
65 SELECT c.id, c.parent FROM jos_bookmarks_categories as c WHERE c.id = -1
66 SELECT * FROM jos_bookmarks_columns WHERE category='' AND custom='0'
67 SELECT * FROM jos_bookmarks_columns WHERE category='' ORDER BY ordering
68 SELECT * FROM jos_bookmarks_columns WHERE category='admin'
69 SELECT * FROM jos_bookmarks_columns WHERE category='admin' ORDER BY ordering
70 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
71 SELECT * FROM jos_mambots WHERE id = '27'
72 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
73 SELECT * FROM jos_mambots WHERE id = '27'
74 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
75 SELECT * FROM jos_mambots WHERE id = '27'
76 SELECT id FROM jos_mambots WHERE element = 'plugin_jw_allvideos' AND folder = 'content'
77 SELECT * FROM jos_mambots WHERE id = '27'
78 SELECT name, value FROM jos_bookmarks_prefs WHERE userid = '-1' AND category = 'params' ORDER BY name
79 SELECT c.id, c.parent FROM jos_bookmarks_categories as c WHERE c.id = -1
80 SELECT * FROM jos_bookmarks_columns WHERE category='' AND custom='0'
81 SELECT * FROM jos_bookmarks_columns WHERE category='' ORDER BY ordering
82 SELECT * FROM jos_bookmarks_columns WHERE category='admin'
83 SELECT * FROM jos_bookmarks_columns WHERE category='admin' ORDER BY ordering
84 SELECT DISTINCT b.*, u.name AS username FROM jos_bookmarks_itemcat AS i LEFT JOIN jos_bookmarks AS b ON b.id = i.itemid LEFT JOIN jos_bookmarks_categories AS bc ON bc.id = i.catid LEFT JOIN jos_users AS u ON u.id = b.created_by WHERE ((b.published=1 AND b.approved=1) OR b.id IS NULL) AND i.catid IN (4) AND b.access <= '0' AND bc.published = '1' AND bc.access <= '0' AND ((b.private = 0) OR (b.private = 1 AND b.created_by = '0')) ORDER BY b.title ASC
85 SELECT bc.name as category FROM jos_bookmarks_itemcat i LEFT OUTER JOIN jos_bookmarks_categories bc ON (i.catid = bc.id) WHERE (i.itemid = 298) ORDER BY bc.name ASC
86 SELECT bc.name as category FROM jos_bookmarks_itemcat i LEFT OUTER JOIN jos_bookmarks_categories bc ON (i.catid = bc.id) WHERE (i.itemid = 265) ORDER BY bc.name ASC
87 SELECT bc.name as category FROM jos_bookmarks_itemcat i LEFT OUTER JOIN jos_bookmarks_categories bc ON (i.catid = bc.id) WHERE (i.itemid = 297) ORDER BY bc.name ASC
88 SELECT bc.name as category FROM jos_bookmarks_itemcat i LEFT OUTER JOIN jos_bookmarks_categories bc ON (i.catid = bc.id) WHERE (i.itemid = 296) ORDER BY bc.name ASC
89 SELECT bc.name as category FROM jos_bookmarks_itemcat i LEFT OUTER JOIN jos_bookmarks_categories bc ON (i.catid = bc.id) WHERE (i.itemid = 248) ORDER BY bc.name ASC
90 SELECT bc.name as category FROM jos_bookmarks_itemcat i LEFT OUTER JOIN jos_bookmarks_categories bc ON (i.catid = bc.id) WHERE (i.itemid = 246) ORDER BY bc.name ASC
91 SELECT name, value FROM jos_bookmarks_prefs WHERE userid = '-1' AND category = 'params' ORDER BY name
92 SELECT c.id, c.parent FROM jos_bookmarks_categories as c WHERE c.id = -1
93 SELECT * FROM jos_bookmarks_columns WHERE category='' AND custom='0'
94 SELECT * FROM jos_bookmarks_columns WHERE category='' ORDER BY ordering
95 SELECT * FROM jos_bookmarks_columns WHERE category='admin'
96 SELECT * FROM jos_bookmarks_columns WHERE category='admin' ORDER BY ordering
97 SELECT DISTINCT b.*, u.name AS username FROM jos_bookmarks_itemcat AS i LEFT JOIN jos_bookmarks AS b ON b.id = i.itemid LEFT JOIN jos_bookmarks_categories AS bc ON bc.id = i.catid LEFT JOIN jos_users AS u ON u.id = b.created_by WHERE ((b.published=1 AND b.approved=1) OR b.id IS NULL) AND i.catid IN (34) AND b.access <= '0' AND bc.published = '1' AND bc.access <= '0' AND ((b.private = 0) OR (b.private = 1 AND b.created_by = '0')) ORDER BY b.title ASC LIMIT 6
98 SELECT bc.name as category FROM jos_bookmarks_itemcat i LEFT OUTER JOIN jos_bookmarks_categories bc ON (i.catid = bc.id) WHERE (i.itemid = 142) ORDER BY bc.name ASC
99 SELECT bc.name as category FROM jos_bookmarks_itemcat i LEFT OUTER JOIN jos_bookmarks_categories bc ON (i.catid = bc.id) WHERE (i.itemid = 289) ORDER BY bc.name ASC
100 SELECT bc.name as category FROM jos_bookmarks_itemcat i LEFT OUTER JOIN jos_bookmarks_categories bc ON (i.catid = bc.id) WHERE (i.itemid = 242) ORDER BY bc.name ASC
101 SELECT bc.name as category FROM jos_bookmarks_itemcat i LEFT OUTER JOIN jos_bookmarks_categories bc ON (i.catid = bc.id) WHERE (i.itemid = 294) ORDER BY bc.name ASC
102 SELECT bc.name as category FROM jos_bookmarks_itemcat i LEFT OUTER JOIN jos_bookmarks_categories bc ON (i.catid = bc.id) WHERE (i.itemid = 284) ORDER BY bc.name ASC
103 SELECT bc.name as category FROM jos_bookmarks_itemcat i LEFT OUTER JOIN jos_bookmarks_categories bc ON (i.catid = bc.id) WHERE (i.itemid = 293) ORDER BY bc.name ASC
104 SELECT a.id, a.title, a.sectionid, a.catid, a.created, a.hits FROM jos_content AS a LEFT JOIN jos_content_frontpage AS f ON f.content_id = a.id INNER JOIN jos_categories AS cc ON cc.id = a.catid INNER JOIN jos_sections AS s ON s.id = a.sectionid WHERE ( a.state = 1 AND a.sectionid > 0 ) AND ( a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2019-01-24 08:26' ) AND ( a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2019-01-24 08:26' ) AND ((TO_DAYS('2019-01-24') - TO_DAYS(a.created)) <= '60') AND a.access <= 0 AND cc.access <= 0 AND s.access <= 0 AND s.published = 1 AND cc.published = 1 ORDER BY a.hits DESC LIMIT 3
105 SELECT m.* FROM jos_menu AS m WHERE menutype = 'Products' AND published = 1 AND access <= 0 ORDER BY parent, ordering
106 SELECT a.id, a.title, a.sectionid, a.catid FROM jos_content AS a LEFT JOIN jos_content_frontpage AS f ON f.content_id = a.id INNER JOIN jos_categories AS cc ON cc.id = a.catid INNER JOIN jos_sections AS s ON s.id = a.sectionid WHERE ( a.state = 1 AND a.sectionid > 0 ) AND ( a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2019-01-24 08:26' ) AND ( a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2019-01-24 08:26' ) AND a.access <= 0 AND cc.access <= 0 AND s.access <= 0 AND s.published = 1 AND cc.published = 1 ORDER BY a.hits DESC LIMIT 3
107 SELECT ms.id AS sid, ms.type AS stype, mc.id AS cid, mc.type AS ctype, i.id as sectionid, i.id As catid, ms.published AS spub, mc.published AS cpub FROM jos_content AS i LEFT JOIN jos_sections AS s ON i.sectionid = s.id LEFT JOIN jos_menu AS ms ON ms.componentid = s.id LEFT JOIN jos_categories AS c ON i.catid = c.id LEFT JOIN jos_menu AS mc ON mc.componentid = c.id WHERE ( ms.type IN ( 'content_section', 'content_blog_section' ) OR mc.type IN ( 'content_blog_category', 'content_category' ) ) AND i.id = 174 ORDER BY ms.type DESC, mc.type DESC, ms.id, mc.id
108 SELECT ms.id AS sid, ms.type AS stype, mc.id AS cid, mc.type AS ctype, i.id as sectionid, i.id As catid, ms.published AS spub, mc.published AS cpub FROM jos_content AS i LEFT JOIN jos_sections AS s ON i.sectionid = s.id LEFT JOIN jos_menu AS ms ON ms.componentid = s.id LEFT JOIN jos_categories AS c ON i.catid = c.id LEFT JOIN jos_menu AS mc ON mc.componentid = c.id WHERE ( ms.type IN ( 'content_section', 'content_blog_section' ) OR mc.type IN ( 'content_blog_category', 'content_category' ) ) AND i.id = 281 ORDER BY ms.type DESC, mc.type DESC, ms.id, mc.id
109 SELECT ms.id AS sid, ms.type AS stype, mc.id AS cid, mc.type AS ctype, i.id as sectionid, i.id As catid, ms.published AS spub, mc.published AS cpub FROM jos_content AS i LEFT JOIN jos_sections AS s ON i.sectionid = s.id LEFT JOIN jos_menu AS ms ON ms.componentid = s.id LEFT JOIN jos_categories AS c ON i.catid = c.id LEFT JOIN jos_menu AS mc ON mc.componentid = c.id WHERE ( ms.type IN ( 'content_section', 'content_blog_section' ) OR mc.type IN ( 'content_blog_category', 'content_category' ) ) AND i.id = 431 ORDER BY ms.type DESC, mc.type DESC, ms.id, mc.id