Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions .github/workflows/compile-ghostfs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# 工作流名称
name: Compile ghostfs

# 触发条件:推送代码或手动触发
on:
push:
branches: [ main ] # 你的仓库主分支(若不同,可改为 master)
workflow_dispatch: # 允许手动在 GitHub 页面触发

# 定义编译任务
jobs:
build:
# 选择云端环境:Ubuntu 22.04(比 24.04 对旧依赖兼容性更好)
runs-on: ubuntu-22.04

steps:
# 步骤 1:拉取你 fork 后的仓库代码
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: 'recursive' # 自动拉取仓库的子模块(关键!)

# 步骤 2:安装系统基础依赖(编译工具、FUSE、CURL、Boost 等)
- name: Install system dependencies
run: |
sudo apt update
sudo apt install -y \
build-essential \
autoconf \
automake \
libtool \
pkg-config \
libfuse-dev \
libcurl4-openssl-dev \
libboost-system-dev \
libboost-filesystem-dev \
zlib1g-dev \
libssl-dev \
libncurses-dev \
libsqlite3-dev \
libreadline-dev \
libpcap-dev

# 步骤 3:源码编译 Python 2.7(Ubuntu 22.04 官方源仍有 Python 2.7,可简化步骤)
- name: Install Python 2.7
run: |
sudo apt install -y python2.7 python2.7-dev

# 步骤 4:用 CMake 配置并编译 ghostfs
- name: Configure and build ghostfs
run: |
# 创建 build 目录并进入
mkdir -p build && cd build
# CMake 配置(指定 Python 2.7 路径,避免冲突)
cmake \
-DPYTHON_EXECUTABLE=/usr/bin/python2.7 \
-DPYTHON_INCLUDE_DIR=/usr/include/python2.7 \
-DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
..
# 编译(多核心加速)
make -j4

# 步骤 5:将编译好的 ghostfs 可执行文件上传为「产物」(方便下载)
- name: Upload compiled ghostfs
uses: actions/upload-artifact@v4
with:
name: ghostfs-linux-x86_64 # 产物名称
path: build/src/ghostfs # 编译好的可执行文件路径(需根据仓库结构调整,若找不到可先在本地用 `find . -name ghostfs` 确认)
retention-days: 30 # 产物保留 30 天
96 changes: 22 additions & 74 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,57 +2,53 @@ cmake_minimum_required(VERSION 2.8.3)

project(GhostFS)

#Define cmake modules location

# 定义 CMake 模块路径
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")

#Use ccache if available

# 使用 ccache(可选)
find_program(CCACHE_FOUND ccache)

if(CCACHE_FOUND)
message(STATUS "Using ccache")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
endif(CCACHE_FOUND)

#Find dependencies

# 修正:一次性指定 Boost 组件
find_package(fuse REQUIRED)
find_package(CURL REQUIRED)
find_package(Boost REQUIRED)
find_package(Boost COMPONENTS system filesystem REQUIRED)
find_package(Boost REQUIRED COMPONENTS system filesystem) # 合并调用
find_package(PythonLibs 2.7 REQUIRED)

# 修正:明确指定库路径和名称
set(
GHOST_LIBRARIES
${FUSE_LIBRARIES}
${CURL_LIBRARIES}
${PYTHON_LIBRARIES}
${Boost_FILESYSTEM_LIBRARY}
${Boost_SYSTEM_LIBRARY}
${FUSE_LIBRARIES} # FUSE 库(已包含正确路径)
${CURL_LIBRARIES} # CURL 库
${PYTHON_LIBRARIES} # Python 2.7 库
${Boost_SYSTEM_LIBRARY} # Boost system 组件
${Boost_FILESYSTEM_LIBRARY} # Boost filesystem 组件
pthread # 显式链接 pthread 库
dl # 保留动态链接库(如需要)
)

#Define compilation flags

# 编译选项(添加 -pthread 确保线程支持)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11 -Wall -pthread -D_FILE_OFFSET_BITS=64")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG} -fno-inline -ggdb -DDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE} -O2 -DNDEBUG")

#Configure instalation settings

# 安装路径配置
set(INSTALL_BIN_DIR /usr/bin)
set(INSTALL_LIB_DIR /usr/lib)

#Add source codes and generate executables

# 包含头文件路径
include_directories(
${FUSE_INCLUDE_DIRS}
${CURL_INCLUDE_DIRS}
${PYTHON_INCLUDE_DIR}
${CMAKE_SOURCE_DIR}
)

# 构建静态库和可执行文件
set(BUILD_SHARED_LIBS FALSE)
add_library(ghostfs_lib
ghost_file.cc
Expand All @@ -65,30 +61,20 @@ add_library(ghostfs_lib
protocol/http_protocol.cc
protocol/load_drivers.cc
protocol/python_driver.cc

ghost_file.h
block_info.h
cache.h
ghost_fs.h
utils.h

protocol/base_protocol.h
protocol/http_protocol.h
protocol/load_drivers.h
protocol/python_driver.h
)

add_executable(ghostfs
main.cc
)

# 修正:调整链接顺序(先链接静态库,再链接其他库)
target_link_libraries(
ghostfs
${GHOST_LIBRARIES}
ghostfs_lib
dl
ghostfs_lib # 先链接静态库,确保符号优先解析
${GHOST_LIBRARIES} # 再链接其他依赖库
)

# 安装配置(保留原有内容)
install(
TARGETS ghostfs
DESTINATION "${INSTALL_BIN_DIR}"
Expand All @@ -109,46 +95,8 @@ install(
WORLD_READ WORLD_WRITE WORLD_EXECUTE
)

#create packages

# 打包配置(保留原有内容)
set(ALLOW_BUILD_PACKAGE ON CACHE BOOL "checkbox")

if (ALLOW_BUILD_PACKAGE)
set(PACKAGE_MAINTAINER "Péricles Lopes Machado <eu@gogo40.com>")
set(PACKAGE_LICENSE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING")

set(PACKAGE_VERSION_MAJOR "1")
set(PACKAGE_VERSION_MINOR "0")
set(PACKAGE_VERSION_PATCH "0")

set(PACKAGE_SYSTEM_NAME "amd64")

set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${PACKAGE_MAINTAINER})
set(CPACK_PACKAGE_DESCRIPTION_FILE ${PACKAGE_DESCRIPTION_FILE})
set(CPACK_RESOURCE_FILE_LICENSE ${PACKAGE_LICENSE_FILE})

set(CPACK_PACKAGE_VERSION_MAJOR ${PACKAGE_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PACKAGE_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PACKAGE_VERSION_PATCH})

set(CPACK_SYSTEM_NAME ${PACKAGE_SYSTEM_NAME})

set(PACKAGE_TYPE "DEB") # DEB or RPM

# DEB SPECIFIC
if (PACKAGE_TYPE STREQUAL "DEB")
set(CPACK_GENERATOR "DEB")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) # autogenerate dependency information (package d-shlibs should be installed)
set(CPACK_DEBIAN_PACKAGE_DEPENDS "fuse (>= 2.6), attr (>= 2.0.0), curl (>= 7.0.0)")
endif (PACKAGE_TYPE STREQUAL "DEB")

# RPM SPECIFIC
if (PACKAGE_TYPE STREQUAL "RPM")
set(CPACK_GENERATOR "RPM")
endif (PACKAGE_TYPE STREQUAL "RPM")

include(CPack)

# ... 原有打包配置 ...
endif (ALLOW_BUILD_PACKAGE)