Данная лабораторная работа посвещена изучению систем управления пакетами на примере Hunter
$ open https://github.com/ruslo/hunter
- 1. Создать публичный репозиторий с названием lab10 на сервисе GitHub
- 2. Сгенирировать токен для доступа к сервису GitHub с правами repo
- 3. Выполнить инструкцию учебного материала
- 4. Ознакомиться со ссылками учебного материала
- 5. Составить отчет и отправить ссылку личным сообщением в Slack
Устанавливаем переменные окружений GITHUB_USERNAME
и GITHUB_TOKEN
.
$ export GITHUB_USERNAME=TalkedDevotee # Переменная окружения GITHUB_USERNAME
$ export GITHUB_TOKEN=****************************** # Переменная окружения GITHUB_TOKEN
Скачиваем проект hub.
$ cd ${GITHUB_USERNAME}/workspace # Переходим в папку workspace
$ pushd . # Помещает имя текущего каталога в стек и осуществляет переход в каталог
$ source scripts/activate # Вставляем в файл скрипта
$ go get github.com/github/hub # Скачиваем проект hub
$ mkdir ~/.config # Создаем файл конфигуриции
$ cat > ~/.config/hub <<EOF
github.com:
- user: ${GITHUB_USERNAME}
oauth_token: ${GITHUB_TOKEN}
protocol: https
EOF
# - user - Имя пользователя
# - oath_token - аутентификация токена репозитория
# - protocol - протокол канала
$ git config --global hub.protocol https # Вносим в конфигурацию протокол от hub'a
Чтобы извлечь хеш-сумму из файла, для этого скачиваем архив из предыдущей работы №9.
$ wget https://github.com/${GITHUB_USERNAME}/lab09/archive/v0.1.0.0.tar.gz # Скачиваем архив
$ export PRINT_SHA1=`openssl sha1 v0.1.0.0.tar.gz | cut -d'=' -f2 | cut -c2-41`
$ echo $PRINT_SHA1 # Контроль хеша
f51e8b4d7dc92ff540b02db01397b134c9afed1e
$ rm -rf v0.1.0.0.tar.gz # Удаляем архив
Подключаем hub
.
$ git clone https://github.com/ruslo/hunter projects/hunter # Скачиваем гит hub
$ cd projects/hunter && git checkout v0.19.137 # Переходим в папку hunter и на v0.19.137
$ git remote show # Список управления репозиториев
$ hub fork # Включаем репозиторий
$ git remote show # Список управления репозиториев обновился
TalkedDevotee
origin
$ git remote show ${GITHUB_USERNAME} # Информация гита
* внешний репозиторий TalkedDevotee
URL для извлечения: https://github.com/TalkedDevotee/hunter.git
URL для отправки: https://github.com/TalkedDevotee/hunter.git
HEAD ветка: master
Внешние ветки:
master отслеживается
pr.new.toolchain.id отслеживается
testing-packages отслеживается
Локальная ссылка, настроенная для «git push»:
master будет отправлена в master (уже актуальна)
Создаем файл hunter.cmake
.
$ mkdir cmake/projects/print # Создаем папку print
$ cat > cmake/projects/print/hunter.cmake <<EOF
include(hunter_add_version) # Версия hunter'а
include(hunter_cacheable) # Кэширование
include(hunter_cmake_args) # Некоторая строка hunter'а
include(hunter_download) # Загрузка hunter'a
include(hunter_pick_scheme) # Выбор схемы
hunter_add_version(
PACKAGE_NAME
print # Имя пакета
VERSION # Версия пакета
"0.1.0.0"
URL # Ссылка скачивания архива
"https://github.com/${GITHUB_USERNAME}/lab09/archive/v0.1.0.0.tar.gz"
SHA1 # Хэш сумма
${PRINT_SHA1}
)
hunter_pick_scheme(DEFAULT url_sha1_cmake) # По умолчанию выбирает ссылку с хэш суммой
hunter_cmake_args(
print
CMAKE_ARGS
BUILD_EXAMPLES=NO
BUILD_TESTS=NO
)
hunter_cacheable(print) # Кэширование пакета
hunter_download(PACKAGE_NAME print) # Загрузка пакета
EOF
$ cat >> cmake/configs/default.cmake <<EOF # Создаем конфигурацию в default.cmake
hunter_config(print VERSION 0.1.0.0)
EOF
$ git add . # Добавляем все файлы
$ git commit -m"added print package" # Коммитируем изменения
$ git push ${GIHUB_USERNAME} master # Пушим изменения
$ git tag v0.19.137.1 # Подписываем гит
$ git push ${GIHUB_USERNAME} master --tags # Пушим с подпиской
$ cd .. # Выходим из папки
$ export HUNTER_ROOT=`pwd`/hunter # Переменная окружения HUNTER_ROOT
$ mkdir lab10 && cd lab10 # Создаем папку lab10 и переходим туда
$ git init # Инициализируем папку
$ git remote add origin https://github.com/${GITHUB_USERNAME}/lab10 # Прописываем путь загрузки гита
$ mkdir sources # Создаем папку sources
$ cat > sources/demo.cpp <<EOF # Проект demo.cpp
#include <print.hpp>
int main(int argc, char** argv) {
std::string text; # Объявили переменную text
while(std::cin >> text) { До тех пор, пока не напишет какую-нибудь строку
std::ofstream out("log.txt", std::ios_base::app); # Записываем строку в файл
print(text, out); # Контроль строки на экран
out << std::endl;
}
}
EOF
$ wget https://github.com/hunter-packages/gate/archive/v0.8.1.tar.gz # Скачиваем архив hunter'а
$ tar -xzvf v0.8.1.tar.gz gate-0.8.1/cmake/HunterGate.cmake # Распаковываем архив
$ mkdir cmake # Создаем папку cmake
$ mv gate-0.8.1/cmake/HunterGate.cmake cmake # Перемещаем все файлы в одну папку
$ rm -rf gate*/ # Удаляем все файлы с именем gate*
$ rm *.tar.gz # Удаляем все файлы в формате *tar.gz
$ cat > CMakeLists.txt <<EOF # В файле пишем минимальную версию CMake
cmake_minimum_required(VERSION 3.0)
set(CMAKE_CXX_STANDARD 11)
EOF
Скачиваем архив с GitHub
.
$ wget https://github.com/${GITHUB_USERNAME}/hunter/archive/v0.19.137.1.tar.gz
$ export HUNTER_SHA1=`openssl sha1 v0.19.137.1.tar.gz | cut -d'=' -f2 | cut -c2-41`
$ echo $HUNTER_SHA1
c73c56fb3af2b888652d1b3cab682cc08a55f972
$ rm -rf v0.19.137.1.tar.gz # Удаляем архив
Записываем хэш-сумму в CMakeLists.txt
$ cat >> CMakeLists.txt <<EOF
include(cmake/HunterGate.cmake)
HunterGate(
URL "https://github.com/${GITHUB_USERNAME}/hunter/archive/v0.19.137.1.tar.gz"
SHA1 "${HUNTER_SHA1}"
)
EOF
$ cat >> CMakeLists.txt <<EOF
project(demo) # Имя проекта
hunter_add_package(print) # Добавляем пакет
find_package(print)
add_executable(demo \${CMAKE_CURRENT_SOURCE_DIR}/sources/demo.cpp) # Подключаем demo.cpp
target_link_libraries(demo print) # Цель библиотек
install(TARGETS demo RUNTIME DESTINATION bin)
EOF
Вносим в список исключений
$ cat > .gitignore <<EOF
*build*/
*install*/
*.swp
EOF
Вставляем статус travis
.
$ cat > README.md <<EOF
[](https://travis-ci.org/${GITHUB_USERNAME}/lab10)
the demo application redirects data from stdin to a file **log.txt** using a package **print**.
EOF
Пишем скрипт travis
в .travis.yml
.
$ cat > .travis.yml <<EOF
language: cpp
script:
- cmake -H. -B_build
- cmake --build _build
EOF
Проверяем на допустимость.
$ travis lint
Заливаем гит на сервер.
$ git add .
$ git commit -m"first commit"
$ git push origin master
$ travis login --auto
$ travis enable
$ cmake -H. -B_build -DCMAKE_INSTALL_PREFIX=_install
_PREFIX=_install
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- [hunter] Calculating Toolchain-SHA1
-- [hunter] Calculating Config-SHA1
-- [hunter] HUNTER_ROOT: /home/TalkedDevotee/workspace/projects/hunter
-- [hunter] [ Hunter-ID: xxxxxxx | Toolchain-ID: e1266bb | Config-ID: 83da1ac ]
-- [hunter] PRINT_ROOT: /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Install (ver.: 0.1.0.0)
-- [hunter] Building print
loading initial cache file /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/cache.cmake
loading initial cache file /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/args.cmake
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/Build
Scanning dependencies of target print-Release
[ 6%] Creating directories for 'print-Release'
[ 12%] Performing download step (download, verify and extract) for 'print-Release'
-- downloading...
src='https://github.com/TalkedDevotee/lab09/archive/v0.1.0.0.tar.gz'
dst='/home/TalkedDevotee/workspace/projects/hunter/_Base/Download/print/0.1.0.0/83da1ac/v0.1.0.0.tar.gz'
timeout='none'
-- downloading... done
-- verifying file...
file='/home/TalkedDevotee/workspace/projects/hunter/_Base/Download/print/0.1.0.0/83da1ac/v0.1.0.0.tar.gz'
-- verifying file... done
-- extracting...
src='/home/TalkedDevotee/workspace/projects/hunter/_Base/Download/print/0.1.0.0/83da1ac/v0.1.0.0.tar.gz'
dst='/home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/Source'
-- extracting... [tar xfz]
-- extracting... [analysis]
-- extracting... [rename]
-- extracting... [clean up]
-- extracting... done
[ 18%] No patch step for 'print-Release'
[ 25%] No update step for 'print-Release'
[ 31%] Performing configure step for 'print-Release'
loading initial cache file /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/cache.cmake
loading initial cache file /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/args.cmake
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/Build/print-Release-prefix/src/print-Release-build
[ 37%] Performing build step for 'print-Release'
Scanning dependencies of target print
[ 50%] Building CXX object CMakeFiles/print.dir/sources/print.cpp.o
[100%] Linking CXX static library libprint.a
[100%] Built target print
[ 43%] Performing install step for 'print-Release'
[100%] Built target print
Install the project...
-- Install configuration: "Release"
-- Installing: /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/Install/lib/libprint.a
-- Installing: /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/Install/include
-- Installing: /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/Install/include/print.hpp
-- Installing: /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/Install/cmake/print-config.cmake
-- Installing: /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/Install/cmake/print-config-release.cmake
loading initial cache file /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/args.cmake
[ 50%] Completed 'print-Release'
[ 50%] Built target print-Release
Scanning dependencies of target print-Debug
[ 56%] Creating directories for 'print-Debug'
[ 62%] Performing download step (download, verify and extract) for 'print-Debug'
-- verifying file...
file='/home/TalkedDevotee/workspace/projects/hunter/_Base/Download/print/0.1.0.0/83da1ac/v0.1.0.0.tar.gz'
-- verifying file... done
-- extracting...
src='/home/TalkedDevotee/workspace/projects/hunter/_Base/Download/print/0.1.0.0/83da1ac/v0.1.0.0.tar.gz'
dst='/home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/Source'
-- extracting... [tar xfz]
-- extracting... [analysis]
-- extracting... [rename]
-- extracting... [clean up]
-- extracting... done
[ 68%] No patch step for 'print-Debug'
[ 75%] No update step for 'print-Debug'
[ 81%] Performing configure step for 'print-Debug'
loading initial cache file /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/cache.cmake
loading initial cache file /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/args.cmake
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/Build/print-Debug-prefix/src/print-Debug-build
[ 87%] Performing build step for 'print-Debug'
Scanning dependencies of target print
[ 50%] Building CXX object CMakeFiles/print.dir/sources/print.cpp.o
[100%] Linking CXX static library libprintd.a
[100%] Built target print
[ 93%] Performing install step for 'print-Debug'
[100%] Built target print
Install the project...
-- Install configuration: "Debug"
-- Installing: /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/Install/lib/libprintd.a
-- Up-to-date: /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/Install/include
-- Up-to-date: /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/Install/include/print.hpp
-- Installing: /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/Install/cmake/print-config.cmake
-- Installing: /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/Install/cmake/print-config-debug.cmake
loading initial cache file /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print/args.cmake
[100%] Completed 'print-Debug'
[100%] Built target print-Debug
-- [hunter] Build step successful (dir: /home/TalkedDevotee/workspace/projects/hunter/_Base/xxxxxxx/e1266bb/83da1ac/Build/print)
-- [hunter] Cache saved: /home/TalkedDevotee/workspace/projects/hunter/_Base/Cache/raw/4ac90a640d974eb3b512b85494ec21c94fecf693.tar.bz2
-- Configuring done
-- Generating done
-- Build files have been written to: /home/TalkedDevotee/workspace/projects/lab10/_build
$ cmake --build _build --target install
$ mkdir artifacts && cd artifacts # Создаем папку artifacts и туда переходим
$ echo "text1 text2 text3" | ../_install/bin/demo # Выводим в консоль
$ cat log.txt # Выводим на экран
text1
text2
text3
$ popd
$ export LAB_NUMBER=10
$ git clone https://github.com/tp-labs/lab${LAB_NUMBER} tasks/lab${LAB_NUMBER}
$ mkdir reports/lab${LAB_NUMBER}
$ cp tasks/lab${LAB_NUMBER}/README.md reports/lab${LAB_NUMBER}/REPORT.md
$ cd reports/lab${LAB_NUMBER}
$ edit REPORT.md
$ gistup -m "lab${LAB_NUMBER}"
Copyright (c) 2017 Братья Вершинины