天天看點

【AVS C++ SDK】基于Docker的Amazon AVS C++ SDK 開發環境搭建指南

本文主要是講述了如何基于Docker進行開發環境的搭建,避免應該Linux版本的差異導緻将時間浪費在環境的搭建上。另外在新人參與到開發時也可以不用重新搭建環境直接使用搭建好的Docker Image進行開發,

在Ubuntu虛拟機上如何安裝Docker

官方教程

  • Install Docker Engine on Ubuntu
  • Docker官方的Ubuntu Image

Docker安裝

  • 進行ubuntu系統的更新并安裝相關軟體
[email protected]:~/Midea_Develop/Open_Source/Amazon/avs-device-sdk$ sudo apt-get update
[sudo] t 的密碼: 
命中:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
命中:2 http://cn.archive.ubuntu.com/ubuntu bionic InRelease
命中:3 http://cn.archive.ubuntu.com/ubuntu bionic-updates InRelease
命中:4 http://cn.archive.ubuntu.com/ubuntu bionic-backports InRelease
正在讀取軟體包清單... 完成   
[email protected]:~/Midea_Develop/Open_Source/Amazon/avs-device-sdk$ sudo apt-get install \
>     apt-transport-https \
>     ca-certificates \
>     curl \
>     gnupg \
>     lsb-release
           
  • 安裝docker的官方GPG Key

    執行如下指令

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
           
  • 添加 Docker的倉庫位址
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
           
  • 進行Docker Engine的安裝
[email protected]:~/Midea_Develop/Open_Source/Amazon/avs-device-sdk$  sudo apt-get install docker-ce docker-ce-cli containerd.io
           
  • 在安裝完成後,基于Docker的示例Image - hello-world進行環境驗證
[email protected]:~/Midea_Develop/Open_Source/Amazon/avs-device-sdk$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete 
Digest: sha256:5122f6204b6a3596e048758cabba3c46b1c937a46b5be6225b835d091b90e46c
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
           

通過以上的操作,就完成了Ubuntu下的Docker環境搭建了,官方的文檔已經講述的很清楚了,希望更多的通過官網進行Docker的相關學習

在Docker上使用官網的ubuntu image和必要環境配置

如何拉取Ubuntu和建立container

  • 從Docker官方倉庫拉取ubuntu iamge, 我這裡使用的是ubuntu 18.04.
sudo docker pull ubuntu:bionic-20210416 
           

補充說明: bionic-20210416 為ubuntu的tag,對于需要安裝ubuntu不同的版本請參考官網文檔: https://hub.docker.com/_/ubuntu/ 修改不同的tag.

  • 在執行pull指令進行ubuntu image的拉取後,通過運作docker的如下指令進行驗證,相關image是否正常拉取.

    運作 sudo docker images檢視目前本地有幾個可使用的image

[email protected]:~/Midea_Develop/Open_Source/Amazon$ sudo docker images
REPOSITORY    TAG               IMAGE ID       CREATED        SIZE
ubuntu        bionic-20210416   4eb8f7c43909   3 weeks ago    63.1MB
hello-world   latest            d1165f221234   2 months ago   13.3kB

           

基于ubuntu image 建立container并挂載本地的AVS SDK源碼目錄

運作sudo docker run 相關指令,

sudo docker run -it --restart=always -p 10023:22 -v /home/Midea_Develop/Open_Source/Amazon/avs-device-sdk/ --name amazon_avs_sdk  ubuntu:bionic-20210416 /bin/bash
           

執行成功後可以通過sudo docker ps 進行運作中的container檢視

[email protected]:~/Midea_Develop/Open_Source/Amazon$ sudo docker ps 
CONTAINER ID   IMAGE                    COMMAND       CREATED          STATUS          PORTS                                     NAMES
b0ac726fc6a1   ubuntu:bionic-20210416   "/bin/bash"   56 minutes ago   Up 22 minutes   0.0.0.0:10023->22/tcp, :::10023->22/tcp   amazon_avs_sdk
           

在退出Docker中的ubuntu後,可以通過執行sudo docker exec

[email protected]:~/Midea_Develop/Open_Source/Amazon$ sudo docker ps -a
CONTAINER ID   IMAGE                    COMMAND       CREATED          STATUS          PORTS                                     NAMES
b0ac726fc6a1   ubuntu:bionic-20210416   "/bin/bash"   59 minutes ago   Up 24 minutes   0.0.0.0:10023->22/tcp, :::10023->22/tcp   amazon_avs_sdk

[email protected]:~/Midea_Develop/Open_Source/Amazon$ sudo docker exec -it b0ac726fc6a1  /bin/bash
[email protected]:/# 
           

在進入到Docker Ubuntu界面後,可以看到根目錄自動建立了Amazon目錄,并挂載了Amazon AVS SDK的相關檔案

[email protected]:/# ls Amazon/avs
avs-device-sdk/     avs_sdk_devlop.tar  
[email protected]:/# ls Amazon/avs-device-sdk/
ACL        AVSGatewayManager         CMakeLists.txt        Captions         Endpoints       LICENSE.txt  PlaylistParser       Settings                ThirdParty    cmakeBuild         pkg-config.pc.cmake
ADSL       ApplicationUtilities      CONTRIBUTING.md       CertifiedSender  Integration     MediaPlayer  README.md            SpeechEncoder           applications  core               shared
AFML       BluetoothImplementations  CapabilitiesDelegate  ContextManager   InterruptModel  Metrics      RegistrationManager  Storage                 build         doc                tools
AVSCommon  CHANGELOG.md              CapabilityAgents      Diagnostics      KWD             NOTICE.txt   SampleApp            SynchronizeStateSender  capabilities  issue_template.md
[email protected]:/# 

           

補充說明: 在進行AVS C++ SDK 基于Docker的環境搭建時,我們的代碼檔案是放在主機的不會放在Docker環境,是以需要通過Docker相關指令将檔案夾挂載到Docker Ubuntu上

在前面運作的如下指令中, -v 指定了我們要挂載的目錄(也就是我們AVS C++ SDK解壓到的目錄),而源碼目錄後跟着的:/Amazon 是指在Docker Ubuntu下挂載到的目錄,該目錄會自動建立并挂載AVS C++ SDK源碼目錄.

而ubuntu:bionic-20210416是指我們要建立的container來源的iamge.

sudo docker run -it --restart=always -p 10023:22 -v /home/Midea_Develop/Open_Source/Amazon/avs-device-sdk/:/Amazon --name amazon_avs_sdk  ubuntu:bionic-20210416 /bin/bash
           

Docker 下ubuntu ssh服務的搭建

在建立完AVS C++ SDK的Docker容器後,後需要的開發中一般該容器都是運作在背景的,是以需要搭建sshd的服務,支援遠端ssh的登入.

  • 進入Docker Ubuntu 進行相關軟體的安裝
[email protected]:~/Midea_Develop/Open_Source/Amazon$ sudo docker exec -it b0ac726fc6a1  /bin/bash  
# b0ac726fc6a1   為container id
           
  • 安裝vim

    在初始狀态直接進行安裝vim會報如下錯誤,需要進行apt-get倉庫的更新

[email protected]:/# apt-get install vim 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package vim
[email protected]:/# apt-get update      
Get:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
           

vim安裝

在[email protected]:/# apt-get install vim 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
           
  • ssh服務搭建

    首先進行sshd-server的安裝

在成功安裝後,進行sshd配置檔案的修改,改為支援root使用者的登入

vim 打開sshd的配置檔案sshd_config

将配置檔案中的PermitRootLogin 修改為yes

#PermitRootLogin prohibit-password
PermitRootLogin yes
           

然後重新開機sshd服務

[email protected]:/# service ssh restart
 * Restarting OpenBSD Secure Shell server sshd 
           

重新開機完sshd服務後,還需要給root設定密碼,運作passwd設定密碼

後續ssh登入需要用到

在這[email protected]:/# passwd  
Enter new UNIX password: 
           

最後在執行完以上操作後,可以通過ssh進行docker ubuntu的登入了.

[email protected]:~/Midea_Develop/Open_Source/Amazon$ ssh [email protected] -p 10023 
[email protected]'s password: 
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-72-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

To restore this content, you can run the 'unminimize' command.
Last login: Wed May 19 02:38:52 2021 from 172.17.0.1
[email protected]:~# 

           

補充說明,-p後面的10023是前面在運作docker run指令所指定的,和23端口的映射.

在完成基本環境的搭建後,常用的Docker指令說明

  • docker export

    可以将已經完成環境搭建的Docker container導出為本地的image檔案

sudo docker export b0ac726fc6a1 -o avs_sdk_devlop.tar
           

b0ac726fc6a1 為container id, 可以通過docker ps -a進行檢視

  • docker ps

    檢視目前運作中的container相關資訊的狀态

sudo docker ps 
[sudo] t 的密碼: 
CONTAINER ID   IMAGE                    COMMAND       CREATED             STATUS          PORTS                                     NAMES
b0ac726fc6a1   ubuntu:bionic-20210416   "/bin/bash"   About an hour ago   Up 49 minutes   0.0.0.0:10023->22/tcp, :::10023->22/tcp   amazon_avs_sdk
           

加-a參數,可以看到所有的container

  • docker container rm

    進行指定container的删除

其它的指令,請查閱Docker官方文檔進行學習.

  • docker run --device=/dev/snd:/dev/snd …

    在建立新的container的時候可以通過–device參數,将Host的聲霸卡映射到Docker Ubuntu下

Docker Ubuntu下AVS C++ SDK的編譯

Set Up the AVS Device SDK on Ubuntu

如上連結,Amazon Alexa的官方提供詳細的指導書,請将Docker Ubuntu 當做正常的ubuntu進行操作即可.

在編譯環境搭建完後,可以将對應的container導出生成新的image.

sudo docker export b0ac726fc6a1 -o avs_sdk_dev.tar
# b0ac726fc6a1  為container id
           

對avs_sdk_dev.tar的使用

sudo docker import avs_sdk_dev.tar
#執行上面指令後,可以通過sudo docker images 進行本地存在的image list進行檢視
sudo docker tag 6334ffd87859 avs_sdk:1.0
#6334ffd87859  為image id,為image打tag 
# 最後在運作sudo docker run進行container的建立
sudo docker run --device=/dev/snd:/dev/snd  -it --restart=always -p 10023:22 -v /home/t/Midea_Develop/Open_Source/Amazon/AVS_DEV/:/Amazon --name avs_dev  avs_sdk:1.0 /bin/bash
           

總結

有任何關于AVS C++ SDK開發的問題,請及時留言溝通.

avs-device-sdk源碼位址

參考連結:

Docker官方 相關指令說明文檔

繼續閱讀