Skip to content

GH-47877: [C++][FlightRPC] ODBC Linux rpm installer support with Cpack#49787

Draft
alinaliBQ wants to merge 2 commits intoapache:mainfrom
Bit-Quill:gh-47877-rpm-installer
Draft

GH-47877: [C++][FlightRPC] ODBC Linux rpm installer support with Cpack#49787
alinaliBQ wants to merge 2 commits intoapache:mainfrom
Bit-Quill:gh-47877-rpm-installer

Conversation

@alinaliBQ
Copy link
Copy Markdown
Collaborator

@alinaliBQ alinaliBQ commented Apr 17, 2026

Rationale for this change

GH-47877

What changes are included in this PR?

This PR is dependent on #49766 to undraft and merge.

Add support for Linux ODBC .rpm installer.
In install_odbc.sh, changed to use awk on unix platforms as sed doesn't work well on Linux.
Add installer readme section.
Add ARROW_FLIGHT_SQL_ODBC_INSTALLER option.

The following contents will be installed by the .rpm installer:

root@84db9b9349a5:/usr/lib64/arrow-odbc# tree
.
|-- doc
|   |-- Connection-Options.md
|   `-- LICENSE.txt
`-- lib
    |-- libarrow_flight_sql_odbc.so -> libarrow_flight_sql_odbc.so.2400
    |-- libarrow_flight_sql_odbc.so.2400 -> libarrow_flight_sql_odbc.so.2400.0.0
    `-- libarrow_flight_sql_odbc.so.2400.0.0

3 directories, 5 files

Are these changes tested?

Yes

Are there any user-facing changes?

Developers can download RPM installer from the CI.

@github-actions
Copy link
Copy Markdown

⚠️ GitHub issue #47877 has been automatically assigned in GitHub to PR creator.

Comment on lines +181 to +200
else()
# Linux
set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_NAME}")
if(${ODBC_PACKAGE_FORMAT} STREQUAL "DEB")
# GH-49595 TODO: implement DEB installer
message(STATUS "ODBC_PACKAGE_FORMAT DEB not implemented, see GH-49595")
elseif(${ODBC_PACKAGE_FORMAT} STREQUAL "RPM")
set(CPACK_RPM_PACKAGE_ARCHITECTURE x86_64)
set(CPACK_GENERATOR RPM)
set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE
"${CMAKE_CURRENT_SOURCE_DIR}/install/linux/rpm/postinstall")
set(CPACK_RPM_FILE_NAME "${ODBC_UNIX_FILE_NAME}.rpm")
# Disable dependency check as ODBC embeds all third party dependencies
set(CPACK_RPM_PACKAGE_AUTOREQPROV "no")
set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE 1)
set(CPACK_RPM_COMPONENT_INSTALL ON)
else()
message(FATAL_ERROR "ODBC_PACKAGE_FORMAT '${ODBC_PACKAGE_FORMAT}' must be DEB or RPM for Linux installer."
)
endif()
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code changes for RPM installer are ready for review. This PR contains code changes that are dependent on #49766

@github-actions github-actions Bot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Apr 20, 2026
Co-authored-by: vic-tsang <victor.tsang@improving.com>

cpp/src/arrow/flight/sql/odbc/install/unix/install_odbc_ini.sh is originally authored by  vic-tsang <victor.tsang@improving.com>

Co-authored-by: justing-bq <justin.gossett@improving.com> for addressing feedback
---------------------------------------

* Initial draft for macOS .pkg installer

* in-progress for `install_odbc`

* Remove `$HOME` from registration script

* Generate .pkg installer and attempts to fix installer

* Attempt to fix doc not seen
* Attempt to fix ODBC registration script

* Fix installer script and doc

* Rename `install_odbc_ini.sh` to `postinstall`

* Reuse `install_odbc.sh` script inside `postinstall`

* Fix to generate macOS installer

- Check $(pwd)/build/cpp

* Clean up PR and todos

* Update format to re-use code

* Use `install_odbc_ini.sh` script to install DSN

Keep a lightweight `postinstall` file for macOS

* Update install_odbc_ini.sh execution access

* Address Justin's comment

Add timeout limit for macOS

Address feedback
@alinaliBQ alinaliBQ force-pushed the gh-47877-rpm-installer branch 2 times, most recently from cc44bab to e00ac1b Compare April 23, 2026 21:03
* Implement RPM installer

fix formatting

Remove todos

ODBC rpm Installer wrap up

* installing `rpm` package fixed the `cpack` command issue
* Fix cpack command on CI

(merge into last commit when ready) Change to use `awk` so script works on both platforms

Comment out `find` and `tree` steps

Change build path to be under /arrow

Since docker is mounted, changing build path to be in `/arrow` will allow host machine to access docker build contents

TEMP - Disable non-ODBC items

Add commands to find build folder

Attempt to build RPM installer

* not sure if `/build/cpp` can be accessed outside of docker. Hopefully it should.
* add `rpm` dependency install

Indicate RPM in workflow run

Add rpm `postinstall` (not tested)

Remove merge conflict code

* Enable ODBC installer build in CI instead of `compose.yaml`

Update workflow matrix

Update cpp_extra.yml

Fix package name
@alinaliBQ alinaliBQ force-pushed the gh-47877-rpm-installer branch from e00ac1b to a5484a2 Compare April 23, 2026 22:03
@alinaliBQ alinaliBQ changed the title GH-47877: [C++][FlightRPC] ODBC Linux rpm installer support GH-47877: [C++][FlightRPC] ODBC Linux rpm installer support with Cpack Apr 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant