クッキングオープンビルドサービス2.6

画像







1.こんにちは。



Habrでは、疑わしいことにOpen Build Service (以降OBS)およびその他のプラットフォームに関する情報はほとんどありません。

そして、私は既存のものの新鮮さについて話したくありません。

最近、バージョン2.7のリリースがあり、待望の変更がありました。

しかし、話のために、1つのユースケース2.6(リリース-2015年2月)について少しお話したいと思います。







材料の例は、最近のニーズに触発されています。

それでは、Centos用のffmpeg 3.0(7、さらには6 *!)に基づいてphp-ffmpegをビルドしましょう。







2.スキーム



長い間、私はwikiからコピーと貼り付けの方法を使用して、必要なすべてのコマンドを実行しました。

絶対にすべてがコンソールで行われます。 OBS APIを通じて。

現在、プロセス全体は4つの段階に分かれています。







コンソールで実行する必要があるのはそれだけです
cd ~ && git clone https://github.com/BOPOHA/obs-fast-c7ffmpeg && cd obs-fast-c7ffmpeg bash -x obs-fast-c7ffmpeg-n1-prepare.sh #      cd ~/obs-fast-c7ffmpeg bash -x obs-fast-c7ffmpeg-n2-mkvps.sh bash -x obs-fast-c7ffmpeg-n3-buildtargets.sh bash -x obs-fast-c7ffmpeg-n4-buildpkgs.sh
      
      







リセットに必要なものはすべてgithubで入手できます。

使用済みの鉄:Xeon E3-1230 3.2 GHz / 8GB / 2x500GB / 100Mbs / CentOS 7.x

約2時間かかりました(rsync rpm-okでは40分、アセンブリプロセスでは1時間強)。

さらに、各スクリプトについて、最も重要な瞬間を記録します。







n1-prepare.sh



ここでは、パフォーマンスを改善するためにGRUB_CMDLINE_LINUXにいくつかのオプションを追加します。

これとは別に、kvm-intel.nested = 1を表します。これにより、OBSコンテナー内で仮想化機能を使用できるようになり、ビルドプロセスが高速化され、ディスクの負荷が軽減されます。

ここでは、一般に、これ以上興味深いものはありません。サードパーティのopenSUSEリポジトリをインストールします。APIを介して作業するためのツール、およびlibvirt / kvmパッケージです。







n2-mkvps.sh



環境のセットアップに必要なすべてのデータは、 openSUSE:Build_Service_private_installationから収集されました。







obs-server_os.raw
 wget http://download.opensuse.org/repositories/OBS:/Server:/2.6/images/obs-server.x86_64.qcow2 qemu-img create -f raw -o size=128G obs-server_os.raw virt-resize --expand /dev/sda1 obs-server.x86_64.qcow2 obs-server_os.raw losetup /dev/loop0 obs-server_os.raw kpartx -a /dev/loop0 mount /dev/mapper/loop0p1 /mnt echo "rcsshd start swapon /dev/vdb1 sleep 360 && screen -dmS upgraderepos bash -x /root/upgrade.repos.bash & # " >> /mnt/etc/init.d/boot.local mkdir /mnt/root/.ssh ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub > /mnt/root/.ssh/authorized_keys cat ~/$REPONAME/___env/upgrade.repos.bash >> /mnt/root/upgrade.repos.bash chmod -R 700 /mnt/root/.ssh umount /mnt/ kpartx -d /dev/loop0 losetup -d /dev/loop0
      
      





ここで準備された画像を取得します。 デフォルトでは、通常の操作に十分な空き領域がないため、サイズを変更し、FSを少し変更します。









obs-server_lvm.raw
 qemu-img create -f raw -o size=128G obs-server_lvm.raw losetup /dev/loop0 obs-server_lvm.raw parted -s /dev/loop0 mklabel msdos parted -s /dev/loop0 mkpart primary 0.00GB 8GB parted -s /dev/loop0 mkpart primary 8GB 128GB parted -s /dev/loop0 set 2 lvm on kpartx -a /dev/loop0 sleep 2 mkswap /dev/mapper/loop0p1 pvcreate /dev/mapper/loop0p2 -ff -y vgcreate "OBS" /dev/mapper/loop0p2 lvcreate -L 32G -n "server" /dev/OBS vgscan mkfs.ext4 /dev/OBS/server vgchange -an OBS kpartx -d /dev/loop0 losetup -d /dev/loop0
      
      





Build_Service_private_installationで説明されているように、このコードはLVMパーティションと必要なマークアップを備えた2番目のディスクを作成します。

ロード時に、システムはそれを認識し、独自に設定を続けます。







virt-install --name OBS_server
 virt-install \ --name OBS_server \ --ram 7168 --vcpus 4 \ --disk path=/home/libvirt_images/obs-server_os.raw \ --disk path=/home/libvirt_images/obs-server_lvm.raw \ --graphics spice \ --os-variant sles11 \ --boot=hd & sleep 180 && virsh reboot OBS_server sleep 60
      
      





スリープ180-OBSの最初の起動とLVMの初期化を待ち、その後OBSを再起動します。

スリープ60-その後、OBSが動作する準備ができていると考えます







IP OBS検索
 VPS_MAC=`virsh dumpxml OBS_server | grep -o '..:..:..:..:..:..'` VPS_IP=`arp -an | grep $VPS_MAC | sed 's|^.*(\(.*\)).*$|\1|'` touch /etc/hosts /root/.ssh/known_hosts sed -i "/linux/d; /$VPS_IP/d;" /etc/hosts /root/.ssh/known_hosts echo "$VPS_IP linux" >> /etc/hosts ssh linux -oStrictHostKeyChecking=no uptime
      
      





ここで、macアドレスでIP OBSを探し、そのホストを処方します。







128Gディスクサイズとvcpusの数のパラメーターは相互接続されていることに注意してください。

デフォルトでは、ウェルカーの数はvcpuの数と同じです。 大規模なプロジェクトを構築する必要がある場合、5GBでは十分でない可能性があります。パーティションサイズを増やすか、コア数を減らすか、対応するものを変更する必要があります。 / etc / sysconfig / obs-serverのオプション。 以下に例を示します。







lsblk osb






n3-buildtargets.sh



台本
 #!/bin/bash set -e LANG=en_US.UTF-8 REPONAME='obs-fast-c7ffmpeg' export ACC=Admin export REPO_NAME="home:$ACC:$REPONAME" export TMP_DIR="/home/tmp" export PKG_DIR="$HOME/$REPONAME" mkdir -p $TMP_DIR rm -rf /root/.config/osc/trusted-certs/linux_443.pem yes 2 |osc list osc meta prj -F - centos7 << EOF <project name="centos7"> <title>centos7</title> <description></description> <person role="maintainer" userid="Admin"/> <person role="bugowner" userid="Admin"/> <repository name="epel"> <arch>x86_64</arch> </repository> <repository name="updates"> <arch>x86_64</arch> </repository> <repository name="os"> <arch>x86_64</arch> </repository> </project> EOF cd $PKG_DIR osc meta prjconf -F ___env/centos7.conf centos7 osc meta prj home:$ACC -F - << EOF <project name="home:$ACC"> <title>$ACC's Home Project</title> <description></description> <person userid="$ACC" role="maintainer"/> <person userid="$ACC" role="bugowner"/> </project> EOF osc meta prj $REPO_NAME -F - << EOF <project name="$REPO_NAME"> <title>$REPO_NAME</title> <description>$REPO_NAME</description> <person userid="$ACC" role="maintainer"/> <repository name="CentOS_7"> <path project="centos7" repository="epel"/> <path project="centos7" repository="updates"/> <path project="centos7" repository="os"/> <arch>x86_64</arch> </repository> <repository name="CentOS_6"> <path project="centos6" repository="epel"/> <path project="centos6" repository="updates"/> <path project="centos6" repository="os"/> <arch>i586</arch> <arch>x86_64</arch> </repository> <build> <disable repository="CentOS_6"/> </build> </project> EOF
      
      





一見、ここではすべてが単純ですが、実際、そのような操作はどこのドキュメントでも明示的にカバーされていません。







 osc meta prj -F - centos7 << EOF
      
      





centos7プラガブルリポジトリを登録します。







 osc meta prj home:$ACC -F - << EOF
      
      





「ホームプロジェクト」ホームを作成します:管理者。







 osc meta prj $REPO_NAME -F - << EOF
      
      





cサブプロジェクトホームを作成します。Admin:obs-fast-c7ffmpeg。







そして最も難しい部分は、 osc meta prjconf -F ___ env / centos7.conf centos7コマンドを見つけることでした

これは、対応するOSのビルド構成です。

centos7.confファイルは、次のいずれかの方法でプロジェクトコミュニティからスモークできます。







 osc -A https://api.opensuse.org meta prjconf CentOS:CentOS-7 > centos7.conf curl https://api.opensuse.org/public/source/CentOS:CentOS-7/_config > centos7.conf
      
      





n4-buildpkgs.sh



パッケージを作成する最後の段階は、関数によって実装されます:







機能プッシュ
 function push { cd $TMP_DIR PKG_NAME=$1 osc meta pkg $REPO_NAME $PKG_NAME -F - << EOF <package name="$PKG_NAME"> <title>$PKG_NAME</title> <description></description> </package> EOF cd $TMP_DIR/$REPO_NAME osc up cd $TMP_DIR/$REPO_NAME/$PKG_NAME rsync -av --delete --exclude=".osc/" $PKG_DIR/$PKG_NAME/ . osc addremove osc ci -m "init" }
      
      





この関数は、パッケージをOBSに登録し、

プロジェクト(/ home / tmp / home:Admin:obs-fast-c7ffmpeg /)のあるローカルフォルダーに移動します。

パッケージフォルダーを更新します。

データをOBSと同期し、コミットします。

この直後、無料の作業員の1人がパッケージを収集し始めます。

Centos7でphp-ffmpegをビルドするには、それほど必要ありません。







 push lame push ocl-icd push x265 push x264 push xvidcore push opencl-headers push ffmpeg push php-ffmpeg
      
      





組み立てプロセスはさまざまな方法で制御できます






アセンブリ用の資料はどこで入手できますか?



最も簡単な方法は、既製のsrc.rpm fedoraを使用することです( https://www.rpmfind.net/で検索してください )。







使用されているsrc.rpmのリスト
 ftp://195.220.108.108/linux/fedora-secondary/development/rawhide/source/SRPMS/o/ocl-icd-2.2.8-2.git20151217.0122332.fc24.src.rpm ftp://195.220.108.108/linux/fedora-secondary/development/rawhide/source/SRPMS/o/opencl-headers-1.2-9.fc24.src.rpm (centos 6) ftp://195.220.108.108/linux/sourceforge/u/un/unitedrpms/repository/srpm/lame-3.99.5-5.fc24.src.rpm ftp://195.220.108.108/linux/sourceforge/u/un/unitedrpms/repository/srpm/x264-0.148-2.20160420git3b70645.fc24.src.rpm ftp://195.220.108.108/linux/sourceforge/u/un/unitedrpms/repository/srpm/x265-1.9-1.20160221git40ba1eb.fc24.src.rpm ftp://195.220.108.108/linux/sourceforge/u/un/unitedrpms/repository/srpm/xvidcore-1.3.4-1.fc24.src.rpm ftp://195.220.108.108/linux/sourceforge/u/un/unitedrpms/repository/srpm/ffmpeg-3.0.1-2.fc24.src.rpm
      
      





場合によっては、仕様を少し変更する必要がありました。その場合、元のファイルの拡張子は.origです。







* Centos 6



システムは良好で信頼性があります)、しかし問題は、現在のバージョンの多くのパッケージをビルドするためにパッケージベースが古いことです。

ffmpegを正常にビルドするには、ocl-icd-devel、soxr-devel、およびそれらの依存関係を追加でビルドする必要があります。

しかし、最も難しいことは、いくつかの重要なシステムパッケージ(autoconf、automake、m4など)を更新することです。これらは相互依存しています。

このタスクは1回限りであり、私たちは怠け者なので、必要なパッケージを見つけるためにhttps://pkgs.org/を使用します。

カブにあるOBSを追加して、サービスを再起動します。







c6hack
 cd /srv/obs/build/centos6/epel/x86_64/:full/ wget http://springdale.math.ias.edu/data/puias/computational/6/x86_64/ocl-icd-devel-2.2.8-1.git20151217.0122332.sdl6.x86_64.rpm wget http://springdale.math.ias.edu/data/puias/computational/6/x86_64/ocl-icd-2.2.8-1.git20151217.0122332.sdl6.x86_64.rpm wget http://springdale.math.ias.edu/data/puias/6/x86_64/os/Addons/soxr-devel-0.1.1-3.sdl6.x86_64.rpm wget http://springdale.math.ias.edu/data/puias/6/x86_64/os/Addons/soxr-0.1.1-3.sdl6.x86_64.rpm rcobsscheduler restart obs_admin --deep-check-project centos6 x86_64
      
      





使い方



まず、ポートを転送する必要があります。 443にはWebマズル、82にはリポジトリがあります。

最も簡単で柔軟なオプションは、nginxをインストールし、デフォルトの構成に2行追加することです。







 # grep location\ / -A3 /etc/nginx/nginx.conf location / { proxy_pass http://192.168.122.218:82/; proxy_redirect off; } #
      
      





次に、次の内容のファイル/etc/yum.repos.d/obs-fast-c7ffmpeg.repoを作成する必要があります。







 [obs-ffmpeg-c7] name = obs-ffmpeg-c7 baseurl = http://123.123.123.123/home:/Admin:/obs-fast-c7ffmpeg/CentOS_7/ gpgkey = http://123.123.123.123/home:/Admin:/obs-fast-c7ffmpeg/CentOS_7/repodata/repomd.xml.key gpgcheck = 1
      
      





最後に。



パッケージを無料で収集する必要がある場合は、このリソースhttps://build.opensuse.org/が好きかもしれません。

短所の中で:









便利なリンク:

https://en.opensuse.org/openSUSE:OSC

https://en.opensuse.org/openSUSE:Build_Service_private_installation

https://en.opensuse.org/openSUSE:Build_Service_private_instance_software_live_cycle

https://en.opensuse.org/openSUSE:Build_Service_Tips_and_Tricks

https://en.opensuse.org/openSUSE:Build_Service_adding_build_targets

https://en.opensuse.org/openSUSE:Build_Service_Concept_CrossDevelopment








All Articles