Skip to content

Instantly share code, notes, and snippets.

@TalkedDevotee
Last active November 3, 2017 23:23
Show Gist options
  • Save TalkedDevotee/d0783fb4a73a2e6e926e60f5f73cbadd to your computer and use it in GitHub Desktop.
Save TalkedDevotee/d0783fb4a73a2e6e926e60f5f73cbadd to your computer and use it in GitHub Desktop.
lab10

Laboratory work X

Данная лабораторная работа посвещена изучению систем управления пакетами на примере Hunter

$ open https://github.com/ruslo/hunter

Tasks

  • 1. Создать публичный репозиторий с названием lab10 на сервисе GitHub
  • 2. Сгенирировать токен для доступа к сервису GitHub с правами repo
  • 3. Выполнить инструкцию учебного материала
  • 4. Ознакомиться со ссылками учебного материала
  • 5. Составить отчет и отправить ссылку личным сообщением в Slack

Tutorial

Устанавливаем переменные окружений 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
[![Build Status](https://travis-ci.org/${GITHUB_USERNAME}/lab10.svg?branch=master)](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

Report

$ 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}"

Links

Copyright (c) 2017 Братья Вершинины
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment