Deploying Kylix 3 Applications

xiaoxiao2021-03-06  63

Sender: MARS (Fangq), News District: Programming

Title: Deploying Kylix 3 Applications [zz]

Sending station: Dama Biggreen BBS (Sun Oct 13 23:48:21 2002), station letter

http://www.rick-ross.com/papers/k3/k3deploy.html

Deploying Kylix 3 Applications

Rick Ross - Pillar Technology Group, Inc.

Introduction

Common Issues

DETERMININING Required Libraries

How Shared Object Libraries Are Located

Additional Environment Variables

DBEXPRESS APPLICATIONS

Configuration Files

Borland Runtime Packages

Console Applications

GUI OR X WINDOW APPLICATIONS

Apache CGI Applications

Apache DSO Applications

Shared Object Libraries

Visibroker / CORBA Applications

WebSnap Applications

An Example Startup Script

Installation Applications

Tarballs

Rpm

Loki Setup

Additional Resources

Introduction

This Paper Lays The GroundWork for Understanding How

Linux Expects Applications to BE Installed. It looks at the

Various Ways That Shared Objects Are Located, How To

Ensure Environment Variables Are Properly Set, And Other

Issues Related to Installing Applications. developers Will B

Guided by providing tips and recommendations for each

TYPE OF Application That Kylix Can Generate. Finally, Three

Tools Will Be Discussed and Demonstrated to show how to

Bundle Up An Application That IS Ready for Deployment.

Common Issues

Regardless of the Type of Kylix Application That Needs To BE

Deployed, All Types Have Several Issues in Common. this

Section Will Address these Common Issues and present

Solustrations to solid.

DETERMININING Required Libraries

All Kylix Applications, Regardless of Size, Require Additional

Shared Libraries. Fortunately, Most of the Required Libraries

Are Present on MOST MODERN Linux Distributions. The

Easiest Way To Determine What Shared Libraries Anapplication Requires Is To Use The LDD Utility. Passing The

Name of An Application Or Shared Object Library AS A

Parameter to this Utility Will List All of the Libraries That Are

STATILOW Is a Listing of Running The LDD

Command on the Kylix 2 Version As Well as The Kylix 3

Version.

(Kylix 2)

$ ldd ./guihelloworld

/LIB/LIBNOVERSION.SO.1 => /Lib/Libnoversion.so.1

(0x40018000)

Libqtintf.so => ​​/opt/kylix/bin/libqtintf.so (0x4001a000)

LIBX11.SO.6 => /usr/x11r6/lib/libx11.so.6 (0x401ad000)

Libpthread.SO.0 => /Lib/i686/libpthread.so.0 (0x4028d000)

Libdl.so.2 => /lib/libdl.so.2 (0x402a2000)

Libc.so.6 => /Lib/i686/libc.so.6 (0x402a6000)

Libqt.so.2 => /opt/kylix/bin/libqt.so.2 (0x403d6000)

/LIB/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

LIBXEXT.SO.6 => /usr/x11r6/lib/libxext.so.6 (0x40a6e000)

Libsm.so.6 => /usr/x11r6/lib/libsm.so.6 (0x40A7C000)

Libice.SO.6 => /usr/x11r6/lib/ludibice.so.6 (0x40A85000)

Libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x40A9C000)

LibSTDC - libc6.1-1.so.2 => /usr/lib/libstdc -libc6.1-1.so.2

(0x40ABB000)

Libm.so.6 => /Lib/i686/libm.so.6 (0x40AFD000)

(Kylix 3)

$ ldd ./guihelloworld

/LIB/LIBNOVERSION.SO.1 => /Lib/Libnoversion.so.1

(0x40018000)

Libx11.SO.6 => /usr/x11r6/lib/libx11.so.6 (0x40031000)

Libpthread.so.0 => /Lib/i686/libpthread.so.4 (0x4010f000)

Libdl.so.2 => /lib/libdl.so.2 (0x40124000)

Libc.so.6 => /lib/i686/libc.so.6 (0x40128000)

/LIB/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

There Are A Couple of Things to Notice. First, Observe That

The Kylix 2 Version Requires Fourteen Shared Object Libraries, While The Kylix 3 Version Appears To Only Require Six.

Second, Notice That in the Kylix 3 Version, There is no static

Dependency on the QT Librarie in the example shown

ABOVE, All of the Required Libraries Have Been Found. if A

Library Cannot Be Located When the Application IS Run, AN

Error Message Similar To The Following Would Appear.

(Kylix 2)

$ ./Guihelloworld: Error While Loading Shared Libraries:

Libqtintf.so: Cannot Load Shared Object

File: No Such File or Directory

(Kylix 3)

$ ./Guihelloworld: Error While Loading Shared Libraries:

./Guihelloworld: undefined Symbol: initpansistrings

Now loops at the output from running ldd on a "broky"

Kylix 2 Guihelloworld Looks Like this:

(Kylix 2)

$ ldd ./guihelloworld

/LIB/LIBNOVERSION.SO.1 => /Lib/Libnoversion.so.1

(0x40018000)

Libqtintf.so => ​​NOT FOUND

LIBX11.SO.6 => /usr/x11r6/lib/libx11.so.6 (0x40029000)

Libpthread.SO.0 => /Lib/i686/libpthread.so.s (0x40109000)

Libdl.so.2 => /lib/libdl.so.2 (0x4011e000)

Libc.so.6 => /Lib/i686/libc.so.4 (0x40122000)

/LIB/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

With Kylix 2 IT Is Easy to Determine That a Required Shared

Object Library is not being located. NOTICE THE "Not found"

That is next to the library trat.

However, Kylix 3 Makes Things a Much More Difficult in

Regards to knowing Which Shared Object Libraries Are

Required (at Least with the qt related libraries). Look at The

LDD Output Below for the Kylix 3 Version.

(Kylix 3)

$ ldd ./guihelloworld

/LIB/LIBNOVERSION.SO.1 => /Lib/Libnoversion.so.1

(0x40018000)

Libx11.SO.6 => /usr/x11r6/lib/libx11.so.6 (0x40031000) libpthread.so.0 => /Lib/i686/libpthread.so.40 (0x4010f000)

Libdl.so.2 => /lib/libdl.so.2 (0x40124000)

Libc.so.6 => /lib/i686/libc.so.6 (0x40128000)

/LIB/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

NOTICE THAT IT LOOKS The Same as The Working Version!

A Couple of Things Have Changed with Kylix 3. By Default,

The Qt Libraries Are Loaded Dynamically At Run-Time. Instead

Of looking for libqt.so, Kylix 3 Applications Look for

Libborqt.so. Borland Has bundled libqtf.so and libqt.so in

The new libborqt.so. by using libborqt.so, Borland Can

Guarantee That The Propr Libaries Are Being loaded. for

Those Who Want To Use EXISTING QT Libraries (Which May OR

May not be compatible) SET the CLX_USE_LIBQT

Environment Variable. (Don't forget to deploy libqtintf.so,

THough) The Environment Variable Option Option Only Works for

Delphi Applications, C Applications Must #define

CLX_USE_LIBQT and Recompile.

How Shared Object Libraries Are Located

Linux Has Several Methods That Determine How Shared

Object Libraries Are Loaded. First, IF The Binary Has A

DT_RPATH DYNAMIC Section Attribute and The

DT_Runpath Attribute Does NOT EXIST, THE DIRECTORIES

Specified in this section Second, All, ALL

Directories That Are listed in the environment variable

LD_Library_Path Are Searched. Third, The Directories

Specified in The DT_Runpath Dynamic Section Are

Searched. Fourth, The Program Loader Looks in A Special

Cached file named /etc/ld.so.cache. this file lists

Directories Where Previous Libraries Have Been Found. IT IS

Important to Note, HoWever, That this file can be skipped.

(See the man page on ld.so for more information; e.g. manld.so). Finally, if The Library Has Not Been Located After Using

The Previous Methods, The Dynamic Linker Searches the / LIB

Directory and the / usr / lib Directory.

Note

Currently, Kylix Has No Method for Setting Either T

DT_RPATH AND DT_RUNPATH Attributes of A

Executable File. Perhaps a Future Version of Kylix Will

Support the attributes.

The only exception to these rules are for applications That

Have Either The Set User ID OR Set Group ID Bits Set. There

Applications Do Not Search The LD_Library_Path

Environment Variable, TO Avoid Potential Security Risks.

With this information in mind, There Are Three Different

Solutions to Ensure That Libraries Are Located.

Set the ld_library_path environment variable

Add an entry to /etc/ld.so.conf and running ldconfig

Place The Libraries or a Symbolic Link Into The / LIB OR / USR / LIB

Directory.

Choosing An Appropriate Method

For Applications That Do Not Require Special Permissions,

Setting the ld_library_path is the best solution,

Providing the Most Control over Where Files Are Located.

Additionally, Root Privileges Will Not Be Necessary in Order To

Install the application.

Shared Object Libraries and Those Applications That Require

Special Privileges SHOULD Place a Symbolic Link in The

/ USR / LIB DIRECTORY THAT Points to the Installation Directory of

The application. Using this Solution Requires root privileges.

Finally, IF The Previous Solutions Are Not Options, Add AN

Entry to the /etc/ld.so.conf File and Run The LDConfig Utility

Which Updates The System. This Method Also Requires Root

Permissions.

Additional Environment Variables

Kylix As Well As Most Glibc Functions Use the lang

Environment Variable To Determine How To Display Localespecific Information Like Date and Time Formats, Monetary

And Other Region Specific Data. This Environment Variable

SHOULD always be set to some value. if the lang

Environment Variable Is Not Set, IT Needs to Be Set To An

ApproPriate Value. Also, Any Application Specific

Environment Variables Need to Be Set As Well.

There is Three Ways of Setting Environment Variables.

They area

Use an application specific Startup Script to set the

Environment variable.

Use an application specific Configuration File To set the

Environment variable, like the apache httpd.conf

Configuration File. This Method Usually Requires Root

Permissions.

Set a system wide environment variable within

/ etc / profile file. Also Requires Root Permissions.

Unfortunately, There is not one universal, Optimal Solution

Since It Depends on The Type of Application. Later, in The

Application Specific Sections, this Topic IS Addressed ONCE

Again.

DBEXPRESS APPLICATIONS

DBEXPRESS Applications Have Additional Library

REQUIREVER, LOOKING AT The Output generated by

The LDD Utility Will NOT Reveal Which Libraries the Application

Needs, As They is loaded Dynamically At Runtime. for Each

Different Database An Application Communicates with, Two

Additional Shared Libraries Are Needed. One Library IS

Supplied with kylix and the other is the library sales

The Maker of The Database. Two Properties of The THE

TsqlConnection Component List the needed Shared Object

Listed in The Table Below Are The Required Shared

Object Libraries Needed for Each Database.

Database Required Shared Libraries for DBEXPRESS APPS

Kylix Libraries

(Libraryname property) Client Libraries

VendorLib property

DB2 Libsqldb2.so libdb2.so

Informix Libsqlinf.so Libinfclient.so.1.0.0

Interbase libsqlib.so lobgds.so.0

Mysql libsqlmy.so libmysqlclient.so.10.0.0

Oracle Libsqlora.so LibClntsh.so.8.0

PostgreSQL libsqlpg.so libpg.so

As this information is constantly changing, Other Versions Of

Client Libraries May Work. Be Sure To Look At The Latest

Information Available At The Borland Web Site

(www.borland.com/kylix/).

Applications That Use A Descendant of

TcustomClientDataSet (E.g. TclientDataSet OR

TsqlClientDataSet Components OR A TDATSETPROVIDER

Must also include libmidas.so.1 in addition to the shared

Libaries Listed Above. This Library Will Not Appear in The

Output of the ldd utility, since it is loading Dynamical.

The only other file what must be deployed is the

DBXRES.EN.1.0 Resource File. IT Contains Various Resources

For DBEXPRESS Applications.

Configuration Files

Linux is a true multi-user platform. MOST Applications Usually

Have TWO Configuration Files, A Global Configuration File AS

Well as a user specific Configuration File. Global

Configuration Files Are Traditionally Installed In The / ETC

Directory. Other Locations for Global Configuration Files Are

Sometimes Located in The Application Directory OR A

Subdirectory of the Application. One Important Item To Note

Is That Global Configuration Files Should Be Treated AS

Read-only and shop not be modified onCE Installed. User

Configuration Files Are Typically Found With User 抯

Home Directory In an Application Specific Subdirectory. All

Changes to configurations should Only Occur With

Located in the user 抯 Home Directory.

Borland Runtime Packages

Packages Are A Shared Object Library with Additional

Routines. Therefore, Applications That Are Built WithPackages Need To Be Deployed with the package

Needed by the application. The LDD Utility Will List All

Staticly Linked Packages That An Application NEEDS. BE AN APPLICATION

Sure to include All Packages That Are Also Dynamically

LINKED.

The Borland Runtime Packages Provide FunctionAry To

Other packages. Thase dependencies are shown in the

Fighe.

Figure 1

The Package Dependencies Figure IS Read from top top

Bottom. Look at the VisualDbclx package. It Requires The

VisualClx and the dataclx package. In turn, Both

VisualClx and Dataclx Require The RTL (Formerly

BaseClx) Package. Applications That Use Functionality

Found in The VisualDbclx Package Will Also Need To

Deploy the VisualClx, Dataclx and RTL Packages.

Listed in The Table Below, Are The Names of The Actual

Library Files That Are Needed for Deployment.

Package Name BPL Library File (K1) BPL Library File (K2)

BPL Library File (K3)

BaseClx / RTL BPLBaseClx.so.6.0 bplbaseclx.so.6.5

BPLRTL.SO.6.9

VisualClx bplvisualclx.so.4.0 bplvisualClx.so.6.5

BPLVISUALCLX.SO.6.9

Dataclx bpldataclx.so.6.0 bpldatlx.so.6.5

BPLDATACLX.SO.6.9

NetClx bplnetClx.so.6.0 bplnetClx.so.6.5 bplnetClx.so.6.9

VisualDbclx bplvisualdbclx.so.6.0 bplvisualdbclx.so.6.5

BPLVISUALDBCLX.SO.6.9

NetDataClx bplnetdataclx.so.6.0 bplnetdataclx.so.6.5

BplnetDataclx.so.6.9

Indy bplindy.so.6.0 bplindy.so.6.5 bplindy.so.6.9

SOAPRTL N / A N / A BPLSOAPRTL.SO.6.9

WebdbsnapClx n / a bplwebdbsnapclx.so. 6.5

BPLWEBDBSNAPCLX.SO.6.9

WebSnapClx N / A BPLSNAPCLX.SO.6.5 BPLSNAPCLX.SO.6.9

XMLRT N / A BPLXMLRT.SO.6.5 BPLXMLRT.SO.6.9

In The next Table, Each Unit is listed That Can Be buy with

An Application. for Each Unit, One Column Lists Any SharedObject Libraries That Are Specifically Mentioned. The Other

Column lists which package the unit is contained.

Unit Shared Object Libraries Located In Package (s)

Adaptreq WebSnApCLX

Apacheapp

Apachehttp

AutoAdap WebSnapClx

AutoAdapsm WebSnapClx

Autodisp NetClx

Bindhelp libqt.so.21

Libborqt-6.9-qt2.3.so1

Libqtintf-6.9-qt2.3.so1 VisualClx

BRKRCONST NETCLX

CGIApp

CGIHTTP

Classes RTL

Compprod WebDSNAPCLX

Contnrs RTL

CONVUTILS RTL

CopyPRSR NetClx

Corba

CORBCNST

Cosnaming

Dateutils RTL

DB Dataclx

DBADAPT WebSnapClx

DBADAPTIMG WebSnapCLX

DBClient Dataclx

DBCommon Dataclx

DBConnadmin Dataclx

DBCONSTS DATACLX

DBLOCAL DATACLX

Dblocals Dataclx

DBWeb NetDataClx

DBXPRESS DATACLX

DBXPRESSWEB NETDATACLX

DIRSEL VISUALCLX

DSINTF Dataclx

DSPROD NETDATACLX

ENCDDECD SOAPRTL

FMTBCD Dataclx

Helpintfs RTL

HTTPAPP NetClx

Httpd libhtpd.so

Httpparse WebSnapClx

HTTPPROD NETCLX

Httpsoaptopasbind SOAPRTL

Httputil SOAPRTL

Idabout

Idantifreeze

Idantifreezebase indee

Idasn1UTIL IND

IdassignedNumBers IND

IDAUThentication IND

IDAUThenticationDigest Indy

IDAUThenticationManager IND

IDAUTHENTICATIONNTLM INDY

IDBaseComponent IND

IDBLOCKCIPHERINTERCEPT INDY

IDCHARGENSERVER INDY

IDCHARGENUDPSERVER INDY

IDCODER INDY

IDCODER3TO4 INDY

IDCODERHEADER INDY

IDCodermime IND

IDCoderQuotedPrintable Indy

IDCODERUE IND

IDCoderxxe IND

IDcomponent Indy

IDcompressionIntercept libz.so.1 inde

IDCONTAINERS IND

IDCOOKIE IND

IDCOOKIEMANAGER INDY

IDCUSTOMHTTPSERVER INDY

IDDateTimeStamp Indy

IDDaytime inde

IDdaytimeServer Indyiddaytimeudp Indy

IDdaytimeudpserver Indy

IDDictServer IND

IDDiscardServer INDY

IDDiscardudpserver inde

IDDNSRESOLVER IND

Idecho Indy

IDECHOSERVER INDY

IDECHOUDP INDY

IDECHOUDPSERVER INDY

IdemailAddress IND

IDEXCEPTION IND

IDFinger IND

IDFINGERSERVER INDY

IDFTP INDY

IDFTPCOMMON INDY

IDFTPLIST INDY

IDFTPSERVER INDY

IDGLOBAL INDY

IDGOPHER INDY

IDGopherConsts INDY

IDGopherServer Indy

IDHASH INDY

IDHASHCRC INDY

IDHASHELF INDY

IDHSHMESSAGEDIGEST IND

IDHEADERLIST INDY

IDHL7 IND

IDHOSTNAMSERVER INDY

IDHTTP INDY

IDHTTPHEADERINFO INDY

IDHTTPSERVER INDY

IDICMPCLIENT IND

IDIDENT INDY

IDIDENTSERVER INDY

IDIMAP4 IND

IDIMAP4SERVER INDY

IDIntercept IND

IDioHandler INDY

IDioHandlersocket INDY

IdioHandlerstream Indy

IDioHandlerthrottle IND

IDIPMCastBase IND

IDIPMCastClient INDY

IDIPMCASTSERVER IND

IDIPWATCH INDY

Idirc Indy

Idircserver Indy

IDLOGBASE INDY

IDLOGDEBUG INDY

IDLOGEVENT IND

Idlogfile inde

IDLOGSTREAM IND

IDLPR INDY

IDMailbox INDY

IDMAPPEDFTP IND

IDMAPPEDPORTTCP IND

IDMappedPortudp Indy

IDMESSAGE IND

IDMESSAGECLIENT IND

IDMessageCoder INDY

IDMessageCodermime Indy

IDMESSAGECODERUUE IND

IDMessageCoderxxe IND

IDMESSAGECOLLECTION IND

IDMIMETIPES INDY

IDMULTIPARTFORMDATA IND

IDNETWORKCALCULATOR INDY

IDNNTP INDY

IDNNTPSERVER INDY

IDNTLM INDY

IDPOP3 INDY

IDPOP3SERVER INDY

IDQOTD IND

IDQOTDSERVER IND

IDQOTDUDP INDY

IDQOTDUDPSERVER INDY

IDrawbase inde

IdrawClient Indy

IdrawFunctions INDY

Idrawheaders INDY

IdremoteCmdClient Indy

IDRemoteCmdserver IndyidResourceStrings IND

IDREXEC INDY

IDREXECSERVER IND

IDRFCReply IND

IDRSH INDY

IDRSHSERVER INDY

IDServerioHandler INDY

IDServerioHandlersocket IND

IDSIMPLESERVER INDY

IDSMTP INDY

IDSMTPSERVER INDY

IDSNMP IND

IDSNPP INDY

IDSNTP INDY

IDSocketHandle IND

IDSOCKS INDY

IDSSLOPENSSL INDY

IDSSLOPENSSLHEADERS INDY

IDSTACK INDY

IDSTACKCONSTS INDY

IDSTACKLINUX IND

IDStream Indy

IDStrings IND

IDSync INDY

IDSYSLOG INDY

IDSysLogMessage IND

IDSyslogServer Indy

IDTCPCLIENT IND

IDTCPCONNECTION IND

IDTCPSERVER INDY

IDTCPSTREAM INDY

IDTELNET IND

IDTELNETSERVER IND

IDTHREAD IND

IdthreadComponent Indy

Idthreadmgr inde

IDthreadMgrdefault IND

Idthreadmgrpool indead

Idthreadsafe Indy

IDTIME IND

IDTIMESERVER INDY

IDTIMEUDP IND

IDTIMEUDPSERVER IND

IDTRIVIALFTP IND

IDTRIVIALFTPBASE IND

IDTRIVIALFTPSERVER INDY

IDTunnelCommon Indy

IDTunnelMaster INDY

IDTunnelslave inde

IDUDPBASE INDY

IDUDPCLIENT INDY

IDUDPSERVER INDY

Iduri Indy

IDUSERACCOUNTS IND

IDVCard INDY

IDWHOIS IND

IDWhoisServer INDY

IndySockTransport Indy

InIfiles RTL

Intfinfo SOAPRTL

INVCONST SOAPRTL

Invoker SOAPRTL

InvokeRegistry SOAPRTL

Invrules SOAPRTL

Jspas libjs.borland.so WebSnapCLX

JSPasintf WebSnapCLX

JSPasobj WebSnapCLX

JStypes WebSnapClx

Kerneldefs RTL

Kernelioctl RTL

Libc LibbrokenLocale.so.1

Libc.so.6

Libcrypt.so.1

Libdl.so.2

Libm.so.6

Libnsl.so.1

LIBNSS_COMPAT.SO.2

Libnss_DNS.so.2

Libnss_files.so.2

Libnss_hesiod.so.2

Libnss_LDap.so.2

LIBNSS_NISPLUS.SO.2

LIBNSS_NIS.SO.2

Libpthread.so.0

LibResolv.so.2

Librt.so.1

Libthread_db.so.1libutil.so.1

RTL

Libcarpa libresolv.so.2 RTL

Libcelf

LibCRPC RTL

Libcrpcsvc Libnsl.so.1

Librpcsvc.so.1 RTL

Masks RTL

Maskutils RTL

Math RTL

Midas Dataclx

Midcomp WebDSNAPCLX

MidConst libmidas.so.1 DataClx

Miditems WebdSnapClx

MidProd WebDSNAPCLX

OpConvert SOAPRTL

OptosoapDomconv SOAPRTL

OptosoapDomcustom SOAPRTL

ORBPAS40 LiborbPas45.so.1

Libvport_r.so

Liborb_r.so

Oxmldom XMLRTL

Pagtems WebDSnApCLX

Provider Dataclx

Qactnlist VisualClx

QButtons VisualClx

QChecklst VisualClx

QClipbrd VisualClx

Qcomctrls VisualClx

QCONSTS VisualClx

QControls VisualClx

QDBACTNS VisualDbCLX

QDBCONSTS VisualDbCLX

QDBCTRLS VisualDbCLX

QDBGRIDS VisualDbCLX

QDBLogdlg VisualDbCLX

QDbpwdlg VisualdbCLX

QDialogs VisualClx

QextCtrls VisualClx

QFileCtrls VisualClx

QFiledialog VisualClx

QForms Libpthread.so.0 VisualClx

QGraphics VisualClx

QGrids VisualClx

QIMGList VisualClx

Qmask VisualClx

Qmenus VisualClx

QPrinters VisualClx

QSearch VisualClx

QSTDACTNS VisualClx

QStdctrls VisualClx

QStyle VisualClx

Qt VisualClx

Qtypes VisualClx

ReqFiles WebSnapClx

Reqmulti WebSnapClx

Rio SOAPRTL

RTLCONSTS RTL

SCRPTMGR WebDSNAPCLX

Sesscoln WebSnapClx

ShareExcept Libborunwind.so.6

SiteComp WebSnapClx

SiteConst WebSnapClx

SiteProd WebSnapClx

Soapattach SOAPRTL

Soapattachintf soaprtl

SOAPCONN SOAPRTL

SOAPCONST SOAPRTL

SOAPDM SOAPRTL

SOAPDOMCONV SOAPRTL

SOAPENV SOAPRTL

SOAPHTTPCLIENT SOAPRTL

SOAPHTPDISP SOAPRTL

SOAPHTTPSINV SOAPRTL

SOAPHTTRANS SOAPRTL

SOAPLINKED SOAPRTL

SOAPMEMDIAG

SOAPMIDAS SOAPRTL

SOAPPASINV SOAPRTL

SockApp

SockAppHlpr

SockAppNotifySockAppReg

Sockets NetClx

SockHTTP

SockRequestInterpreter

SockTransport

SQLConst Dataclx

SQLEXPR Dataclx

SQLTIMST Dataclx

Stdconvs RTL

Strhlpr RTL

Strutils RTL

SvrConst

Svrhttpindy

Svrinfoconsole

SVRINFOCONST

SvrinFomodule

Svrlog

Svrlogcolsettingsframe

SvrlogdetAildlg

SvrlogdetailFrame

Svrlogframe

Svrmainform

SVRPROPDLG

SvrsockRequest

SvrstatsFrame

Syncobjs RTL

Sysconst RTL

Sysinit Dataclx

Indy

NetCLX

NetDataClx

RTL

SOAPRTL

VisualClx

VisualDbCLX

WebDSNAPCLX

WebSnapCLX

XMLRTL

System Libborunwind.so.6

Libc.so.6

Libdl.so.2

Libpthread.so.0

Libefence.so2 rtl

SYSUTILS LIBUUID.SO.1 RTL

Types RTL

Typetrans Soaprtl

Typinfo RTL

Varcmplx RTL

Varconv RTL

Varhlpr RTL

Variants RTL

VARUTILS RTL

WBMCONST WebDSnApCLX

WebAdapt WebSnapClx

WebAppdbgabout

WebAuto WebSnapClx

Webautosm WebSnapClx

Webbroker

WebBrokersoap SOAPRTL

Webcntxt NetClx

WebComp WebdSnapCLX

WebConst NetClx

WebContnrs WebSnapCLX

WebDISP WebSnapClx

WebFact WebSnapClx

Webform WebSnapClx

WebModu WebSnapClx

WebNode SOAPRTL

WebReq

Webscript WebSnapClx

Webscriptsm WebSnapClx

Webservexp SOAPRTL

Websess WebSnapClx

WebUsers WebSnapClx

WSDLBIND SOAPRTL

WSDLINTF SOAPRTL

WSDLITEMS SOAPRTL

WSDLNode SOAPRTL

WSDLPUB SOAPRTL

WSDLSoAP SOAPRTL

XDOM XMLRTL

Xercesxmldom libxyercesxmldom.so.1 xmlrtl

XLIB LIBX11.SO.6 RTL

XMLBROKR WebDsnApCLX

XMLConst Xmlrtl

XmlDataToschema Xmlrtl

XMLDoc XMLRTL

XMLDOM XMLRTL

XMLINTF XMLRTL

Xmlschema Xmlrtl

Xmlschematags XMLRTL

XMLUTIL

XMLXFORM WebDSnApCLX

XPM libxpm.so.4 WebDSNAPCLX

Xsbuiltins RTL

XSlProd Soaprtl

Zlib Libz.so.1 WebSnapCLX

Zlibconst RTL1 Libqt.SO.2, Libborqt-6.9-Qt2.3.so and libqtintf-6.9-qt2.3.so

Are the qt libraries That Are Loaded Dynamically. Either

Libborqt.so is loaded or Both Libqtintf.so and libqt.so are

Loaded.

2 The libefence.so shared library is only used

System.Pas Has Been Compiled with The Symbol Efernce

Defined.

One Final Note About The Table Above. It Only Shows Those

Libraries That Are Declared With IT. OR, To Say IT Another

Way, Just Because A Unit Does Not Reference A Specific

Shared Object Library, IT May Still Need The Library THROUGH ITS

Dependencies Upon Other Units.

Console Applications

A console application is an application that does not need

AN X Window System To Be Present. Therefore, Console

Applications Should Avoid Using Any Unit That Begins with

The Letter "Q", The xlib unit or the xpm unit.

For Console Applications Requiring Environment Variables,

An Application Specific Startup Script be used. in A

Later Section, An Example of A Startup Script Will Be Shown.

GUI OR X WINDOW APPLICATIONS

At a minimum, graphical applications require the libqtintf.so

Shared library to be deployed along with the application.

Currently, Borland Only Supports the libqt.2.3.0 violet

Kylix 2, Libqt.2.2.4) That ISTALLED with KYLIX. HOWEVER,

Later Versions of Libqt Should Work, Provided That They Have

BEEN Compiled with GCC Version 2.96 or Higher and The

CLX_USE_LIBQT Environment Variable IS Set.

For Graphical Applications Requiring Environment Variables,

An Application Specific Startup Script Should Be Used. AN

Example Is Shown Later in This Paper.

Apache CGI Applications

Since CGI Applications Are Simply Consolec Applications, The

Same Rules As Console Apply. Therefore, CGIApplications Should Avoid Using Any Unit That Begins with

The Letter "Q", The xlib unit or the xpm unit. do not count

ON AN X Window Server Being Installed On A Server

CONFIGURED with apache.

CGI Applications That Require Environment Variables MUST

Be set within the httpd.conf file. The setenv directive

Provides the means to evpose environment variables to

CGI Applications.

For cgi Applications That Are Not Being Deployed to the THE

Standard CGI-BIN DIRECTORY LOCATED BELOW THE Document Root

(Which is specified with the documentroot directive), add

An additional section to the httpd.conf file. it Should Look

Similar to The Example Below.

Scriptalias / Mycgi / "Directory of CGI Application"

ALLOWOVERRIDE NONE

Options Execcgi

ORDER ALOW, DENY

ALLOW FROM ALL

DBEXPRESS CGI Applications Must Specify THE

LD_LIBRARY_PATH Environment Variable in The

Httpd.conf file. Also, The Lang Environment Variable Must

Be set to an appprike value within the httpd.conf file as

Well. Specifying the location of the database configuration

Files, The Home Environment Variable Should Be Set To The

Directory That Contains The. capital subdirectory. IF a

Home Directory Is Not Set, The Global Configuration File

Located IN / USR / local / etc Will be used.

Apache DSO Applications

As mentionsed previously, Production Apache Systems

Typically Do Not Have An X Window System Installed.

Therefore, DSO Applications Should Avoid Using Any Unit

That Begins with the letter "q", The xlib unit or the xpm unit.

Two Choices Are Available for Setting Environment

Variables in dso applications. One option is to modify the

/ usr / sbin / apachectl (or /etc/init.d/httpd) Script and addthe appropriate environment variables. The Other Option IS

To Modify The Global Configuration File Named / etc / profile,

Adding the nextary Environment Variables. Either Option

Requires root permissions.

Additional entries to the httpd.conf file area required for DSO

Applications. a loadModule Directive Specifies the module

Name and the location of the dso. in adduion, a location

Directive Indicates the path to activate the dso

Application. a portion of the httpd.conf file is shown below.

LoadModule MyDSoApp_Module

/

SetHandler "Name of Library - All Lowercase" -Handler

There IS One Additional Requirement for DSO APPLICATIONS

That use dbexpress components. The lang and home

Environment Variables Need to Be Set in a manner

Mentioned in the previous section.

Shared Object Libraries

Shared Object Libraries That Use the Sharexcept Unit Must

Deploy the libborunwind.so.6 along with the standard

Deployment Libraries.

Visibroker / CORBA Applications

Corba Applications Can Be Either Console Or Gui, So They

FOLLOW The Same Rules as Normal Applications. In Additional,

Three Additional Shared Object Libraries Must Be Deployed.

They area: liborbPas45.so.1, libvport_r.so and liborb_r.so.

WebSnap Applications

Since WebSnap Applications Are Specialized CGI or DSO

Applications, They Follow The Same Rules As CGI / DSO

Applications. Additionally, WebSnap Applications Must Also

Deploy libjs.borland.so

An Example Startup Script

A Bash Script Provides More Flexibility for Applications That

Need to Ensure That Libraries Can Be Located WHEN THE

Application is loaded. An Example Script is shown Below.

Remember to Substute THE Approate Installation

Directory and Executable name #! / bin / bash

# Sample Installation Startup Script

# Change the next two variables to specify where the

Application

# Resides.

App_install_dir =

App_path = $ app_install_dir / bin /

App_LD_PATH = $ app_install_dir / lib

# VisualClx Script Tips

# ---------------

# Deploying Libborqt.so?

# Then Make Sure The Following EXISTS IN App_LD_PATH:

# ilborqt-6.9.0-qt2.3.so

# a s f l e t t t t

# Using the folowing command:

# ln -s libborqt-6.9.0-qt2.3.so libborqt-6.9-qt2.3.so

#

# T} option is to deploy (libqtintf.so) Which Requires

# The environment variable

#

# export clx_use_libqt = yes

#

# set. (UNComment the Above line). The Make Sure That

# libqtintf-6.9.0-qt2.3.so

# is located in the app_ld_path.

#

# Now create a Soft link to the above file using the

FOLLOWING:

# ln -s libqtintf-6.9.0-qt2.3.so libqtintf-6.9-qt2.3.so

#

# If You Will Be Using An EXISTING LIBQT, MAKE SURE THAT

# libqt.so.2

# e斯斯 in a directory listed in your ld_library_path.

#

# 中erWise make sure that That

# libqt.so.2.3.0

# is in the app_ld_path and create a link using the

FOLLOWING

# ln -s libqt.so.2.3.0 Libqt.so.2

#

# ------------------------

# First Check to See IF We Have An LD_Library_path

Environment Variable, ENVIRONMENT Variable

IF [-n "$ ld_library_path"]; then

# we do, so prepend our path first

Export

LD_Library_Path = "$ app_ld_path: $ ld_library_pa

TH "

Else

# we do not, so we will create the env var.

Export ld_library_path = "$ app_ld_path"

Fi

# Make Sure WE Have Something Specified for the lang

Environment Variable, ENVIRONMENT Variable

IF [-z "$ lang"]; then

# set lang to an appropriate value

Export lang = en_usfi

# Now Run the Application, Passing Any Parameters That

WHERE specified.

$ app_path $ *

In this Example Script, The Binary File Is Expected To BE

Located in The Bin Directory. Similarly, The Libraries Are

Expected to be located in the lib Directory. Remember to

Mark the script as an executable with the chmod

COMMAND.

CHMOD A X mystartscript.sh

Download The Above Script from here.

Installation Applications

A Number of Installation Utilities Are Available for Installing

Applications in Linux. There Are Command Line Utilities AS

Well as graphical utilities. Some Utilities Are Designed for

Specific Linux Distributions That Use the RPM (Red Hat

Package Manager) Database and Other Utilities Use A

Different Method. This Section Will Explain Three Popular

Methods.

Tarballs

A Tarball IS A FANCY NAME for a Collection of Files. The prefix

TAPE IS An Acronym for Tape Archive. Originally, Tar Was Used

To create one big file from a bunch of files and then write

THE TAR File to the Tape Drive. Tarballs Are The Most Widely

Used Distribution Method for Installing Software on the Linux. INSTALLING

And Other UNIX Based Platforms. Creating a Tarball IS Easily

Performed Using The Tar Command Line Utility That Coms

WITH EVERY Linux Distribution.

THE Convention for Creating Tarballs Is for All of the Files That

Are Combined That They Are Placed in a prot in

Subdirectory. Suppose That a Tarball Needs to Be CREATED

For an application named myawesomeapp. an Example

Directory Structure Might Look Like this:

/

MyawesomeApp.1.0 /

Bin /

LIB /

MAN /

Creating a Tarball Using this Directory Structure IS Easily

Accomplished use the folowing command in The Working

Directory.

TAR CVF

MyAwesomeApp.1.0 / The above command produces a tarball in the working directory. Tar files typically are named with an extension of ".tar" by convention. Tarballs, by default, are not compressed. In order to reduce download times, they are frequently . compressed Compressed tarballs have an extension of ".gz" appended to the name Create a compressed tarball by adding the letter "z" to the command Compressing the MyAwesomeApp tarball would be accomplished using the following command:.. tar cvzfMyAwesomeApp.1.0 / Extracting Files from a Tarball IS Accomplished Using A Different Command. Use the Following Command To Extract Files from An Uncompressed Tarball. Tar XVF

Tarballs That Are Compressed Can Be Extracted Using The Following Command. Tar XVF

To Examine Files in a Tarball, Use the Following Command. Tar TF

Tarballs are easy to create and distribute, however, they do have some limitations. The biggest limitation is that there is no way for a Linux distribution to know what software is installed. This makes removing software from a system may require manually removing files from various system directories (eg global configuration files in the / etc directory). On the plus side, tarballs are great for placing everything in a single file. in addition, since almost every distribution has the tar utility installed, there is no need to provide an installation executable. Other options do exist for manipulating tarballs. The man pages (man tar) are a good source of further information. RPM One of the major Linux distributors, Red Hat, needed a method for installing, updating and removing software easier. The Result of their efforts is the red hat package manager (rpm). RPM is Gaining Popular iMONG Linux Distributions But Not All Distributions Use the rpm method. Other Linux Distributors ProV ide alternates for handling the same types of tasks. The first step in creating an RPM is to take the source files needed to build the application. A spec file is read which informs RPM how to build the package. Several sections are in the spec file , one of, which provides the instructions for compiling or building the package. Another section lists instructions for installing the package. A good resource for learning the details of RPM and how to build RPMs is found in the online book titled "Maximum RPM"

and is available at: http://www.rpmdp.org/rpmbook/ There are also graphical toolkits used in creating RPMs One is available at http://www.rusthq.com/ Loki Setup An open source graphical utility named.. . Loki Setup is available for writing installation applications It is based on XML and GTk Borland uses a modified version of Loki Setup to install Kylix XML files describe the particular information needed to install the application More information is found at http:... // www.lokigames.com/development/setup.php3. Commercial Application If a commercial installation application is needed, InstallShield has a product called InstallShield Multiplatform that is written in Java. It provides the capability of deploying Linux applications as well as many other platforms. More information is found at http://www.installshield.com Additional Resources Kylix 2 Development by Eric Whipple and Rick Ross, published by Wordware, ISBN # 1556227744 Additional online resources can be found at http:. // rick-r Oss.com? Copyright 2001,2002 by rick ross. All rights reserved. All trademarks area. Last Modified: Oct 02, 2002 12:33 PM [q] - ☆ Source:. Green bbs.dartmouth.edu. [From: mars.bbs@bbs.dartmou]

转载请注明原文地址:https://www.9cbs.com/read-113003.html

New Post(0)