【转载】使用FFmpeg在B站直播的姿势

转载一篇妹空酱写的东西


在B站直播已经成了潮流,但是有时候我们总有一些奇怪的需求:

  1. 我的机器配置烂死了,无法做到x264实时压制然后推流,我只想复制视频流放个片。

  2. 我想在服务器上无人值守转播内容。

Oh,你需要FFmpeg。

在Windows下,只需要下载一个编译好的ffmpeg.exe即可。而对于Linux用户,编译一个相信也难不倒你吧~

先谈谈我们的第一个需求,复制视频流播片。

ffmpeg -re -i "1.mp4" -vcodec copy -acodec aac -b:a 192k \
-f flv "rtmp://dl.live-send.acg.tv/live-dl/你的直播码" 

来解释一下每个参数的意思。

-re 按照视频的FPS进行推流,如果不加这个参数的话……反正不行。

-i 指定输入文件地址。

-vcodec copy 指定视频编码为复制。

-acodec aac 音频使用aac编码。后面的-b:a 192k则是指定码率。

-f flv 指定输出格式,这个必须是flv才能推到直播服务器。

最后一串就是直播地址了。

That’s easy, right?

对于第二点。

-i 指定的输入文件并不一定是本地文件,可以是网络视频流,甚至可以是.m3u8文件。

一个示例:无人值守转播Line Live。

ffmpeg -i "http://lss.line-cdn.net/p/live/hs-usWVd7LwNrZzsLIS4xNCxebGE1JBkrISUGFjZrEGczPikMfQhhM2lZNVQ2fhUWAxA4F2tUbDJkJWtXfXNjZmUVcDllMmlQ/720/chunklist.m3u8" \
-vcodec copy -acodec libmp3lame -ac 2 -ar 44100 -b:a 96k \
-f flv "rtmp://dl.live-send.acg.tv/live-dl/直播码" 

另外,输出文件也可以有多个,只需要在最后再指定音视频编码和输出格式,再加地址即可。比如:

ffmpeg -i "http://lss.line-cdn.net/p/live/hs-usWVd7LwNrZzsLIS4xNCxebGE1JBkrISUGFjZrEGczPikMfQhhM2lZNVQ2fhUWAxA4F2tUbDJkJWtXfXNjZmUVcDllMmlQ/720/chunklist.m3u8"\
 -vcodec copy -acodec libmp3lame -ac 2 -ar 44100 -b:a 96k \
 -f flv "rtmp://dl.live-send.acg.tv/live-dl/直播码"\
 -vcodec copy -acodec copy -f mp4 "record.mp4"

以上,可以实现一边直播一遍录流。

【转载】地下偶像:从Team8到虹CON,从厄介MIX到ガチ恋口上

转一篇很有意思的文章,放在这里就当存档了。毕竟原文发在贴吧,总有些不保险的感觉。

地下偶像:从Team8到虹CON,从厄介MIX到ガチ恋口上

作者:康修斯 2016/08/09

转载来源:百度贴吧

前段时间“エイター”在2ch很成话题。エイター就是eighter,2ch地下板用来讽刺T8的地下偶像wota。他们和传统akb宅有很多不同——比如使用独特的call(典型就是“ガチ恋口上”),比如动作较大的wota艺(TIF上再次出现,转圈洒水都出来了),以及2ch讽刺他们全是白嫖:总选不投票、只对免费的现场活动感兴趣,等等……

其实这些很多都是偏见。T8出道后一边长期缺乏地上资源、一边采用类似地下偶像方式在各地演出(很多免费活动而且开放饭拍),导致在正统AKB饭进场前,T8已经收获了一大批以地下偶像wota并形成了自己的文化。正统AKB饭对这些与自己格格不入的“eighter”深恶痛绝。2ch长期说T8厄介(以前说HKT),当然真正的“厄介”确实有(而且不少),但更多时候地下板说T8现场厄介call,其实只是应援文化的差异而已。

MIX是日本偶像文化的产物。要调动起台上台下的积极性,需要双向的应援。宅男需要学习的不是偶像的歌曲怎么唱,而是应援call怎么打。MIX起源很早,不同的偶像团体MIX都稍有不同。准确的说什么是mix也很难定义,现在AKB宅通常喊的“Tiger! Fire! Cyber! Fiber! Diver! Vibra! Jya- Jya- !!!”,据说是著名古参聚聚“ばか師匠”引入AKB的(日本叫TO、トップヲタ,对应国内的饭头,不过在2ch通常会被骂很惨,不像国内聚聚受人尊敬)。

这套AKB应援MIX,经过10-13年AKB在日本的国民化,已经成为日系应援的一大主要分支广为人知。AKB国民了,AKB的MIX当然也“国民”了。AKB宅瞧不起别的应援call,2ch说HKT、T8多厄介,很多时候指的就是后者的现场厨使用原本非AKB的MIX。比如在后面加“ファイボーワイパー”,又比如“うりゃおい”(SNH喊的乌拉黑的原版,原本是桃草wota使用的)。另外就是T8的定番“ガチ恋口上”,具体看这个帖子《关于Team8的MIX,“ガチ恋口上”》。

“ガチ恋”就是真爱的意思,“口上”原为歌舞伎用语、翻译过来相当于真爱念白。“ガチ恋口上”据说起源于九州的地下偶像,但真正进入“大众”(其实是偶像宅)视线,则是因为虹CON。

虹CON(虹のコンキスタドール/彩虹征服者,通称虹コン)是知名二次元网站Pixiv运营的偶像组合,2014年7月结成。成员在作为偶像的同时又分属插画师、Cosplayer、声优、编舞师等分组,是与二次元文化有紧密联系、具有独特氛围的新兴偶像组合。日语里“彩虹”与“二次元”谐音、“征服”与“制服”谐音、“虹CON”与“二次元控”谐音,由此作为团名。

目前已出了6单,其中第3单和第6单是水着单,B站av5603609。虹CON玩法也很多,比如通常单曲是“SingleCD”,而虹CON第4单是Single-T,就是印有QR码的T-shirt。第5单是Single-DVD,内容是很中二的1小时影片,拿下O榜周榜第2(第1是乃木坂)。

(编者注:截止本文发稿,已经出了7单。顺便一提,7单载体是泡面。)

但虹CON并不是以单曲走红的,虹CON被称作ライブアイドル(live-idol),核心在现场,虹CON的代表曲也是她们的公演曲《Triangle Dreamer》。

虹CON的MIX非常有特色,全场不带停——倍速MIX、「お前が一番」、「俺もー」CALL(这些在T8现场的别的歌里也有能听到),最后以“ガチ恋口上”结尾。现场视频非常带感。

本身这首歌内容也很好玩,写幻想少女的三角恋百合展开,加上现场气氛台上台下互动十分热烈,很快成为虹CON的代表曲,在地下偶像wota里很受欢迎。Live以外虹CON也有剧场公演,也不只唱自己的歌。比如前面14p的千本樱,查歌单发现连SKE的不器用太阳都唱过。指原年初网上查真爱口上时找到虹CON,虹CON的妹子们受宠若惊,一度成为话题(还有松井玲奈也翻过虹CON牌,去年TIF就对虹CON赞不绝口)。

日本很多地下偶像其实并不怎么“地下”,反而很有实力、只是资源太少。虹CON全部生唱,舞蹈也相当出色,歌曲充满青春活力,成员也都是十几岁的孩子。当然也是养成系,宣传词“女孩子的成长非常快,不要错过虹CON的现在”,让人联想到AKB当年的“早推得胜”。核心成员鹤见萌、重松佑佳出身名门高中(偏差值77、75),出于对p站、对二次元的热爱才加入虹CON。前段时间重松佑佳宣布毕业回去读书,原本她加入时的采访就说过当偶像只能趁现在、而梦想的考医大随时都能考。虽然她说坚信虹CON一定会红,但核心成员相继毕业(另一核心成员长田美成今年5月被开除,有传言说她跟饭结婚、也有说跟前staff结婚,也有说是和运营矛盾云云,在2ch的AKB板都成为话题),发展势头无疑很受影响。

另一个很有实力、很有潜力的地下偶像组合是“原宿驿前parties”(原宿駅前パーティーズ)。这个团是妖精团的妹团,大手事务所VISION FACTORY去年8月强势推出。fairies一开始势头很好,但后来陷入停滞,无法打开局面,事务所显然对此很不满。原宿驿前组合采取全盘“抄袭”的方式,按类似AKB、E-gril、棒子、风男塾的风格打造了4个分队,在寸土寸金的原宿开100人的近距离小剧场廉价演出。发展势头很好,据说去年2ch日本AKB饭出坑方向是BabyMetal,今年多数就是转推原宿驿前。选秀2期落选的谷野有沙就在这团但人气不高。核心成员是岩崎春果,2003年出生的孩子,参演过日剧武士老师,模仿AKB的,前段时间就有人错认成AKB。

对于地下偶像很多人受NHK仮面女子的纪录片影响首先就想到惨,其实并不是那样。虹CON和早安一样包食宿(现在看来AKB不包食宿反而是AKS有钱后的高端玩法、直接发补贴实际上成本更高,AKB走红以前一样给地方组提供宿舍),原宿驿前更是名门大事务所出身。现在日本音乐团体收入的重心很多都转移到现场演出上(因为周边完全是暴利,唱片还要各种分成),就和babymetal号称T-shirt黑店一样,虹CON也被叫作物贩doll。浅层饭可以很享受,而稍深入就吃不消繁多的周边,甚至连TO都有受不了而出坑的。

而那个NHK“地下偶像的青春”仮面女子的纪录片从一开始就是假的,社长设计了各种桥段故意卖苦情,只会卖苦情的偶像是没有前途的。
(不过真相某种意义上其实比纪录片里更惨,仮面成员收入当然不可能低到要吃草,但多名前成员出来指证社长强迫性接待,东体绘声绘色的写成员被叫进社长房间、“「ファンはカネを運んでくれてありがたい。でもコレは俺のやで」と胸をまさぐられる”,“「2年後に結婚しよう」と強引に肉体関係を結ばされ、強制フェラまでさせられた”。
文春说别的偶像合同一般1年1签,只有仮面女子1签就得3年,要退出就索赔几百万日元违约金。合同写要赔几百万、当然实际也真有人赔了1百万日元。)

另外现在AKB饭主力是中老年人,而包括虹CON在内很多地下偶像饭是年轻人、学生。AKB古参对年轻饭很不友好(比如地下板一直在痛骂的“粉红票”),同样这些地下偶像饭也很不喜欢AKB。日本T8厨(エイター)也是最极力主张“T8不是AKB”、“T8独立”的,和古参的矛盾甚至深过乃木坂。

最后谈一下乃木坂的“虚红”问题。前几天的帖子里提到的去年日本音协的分红榜,乃木坂歌曲在村外根本无人问津。在现在这个音乐收入主体来自二次利用而非直接贩卖的年代里,出现这个结果并不奇怪。奇怪的是为什么乃木坂村内这么红、村外却迟迟不进场?

实际上同样的问题好几年前味噌厨就议论过。众所周知AKB村外起爆并不是什么百万销量。RIVER时代AKB村外就开始红了,而RIVER累计销量才26万。到Heavy Rotation初动才52万,那时的AKB已经红遍日本、大街小巷都在唱AKB。为什么明明已经达到同样甚至更好的销量的SKE,在村外却一直无法打开局面?对此当时就有一种解释,即“本部吸血论”。不仅仅是直接的帮握,更可怕的是由于AKB已经占据了村外制高点,浅层大众眼里SKE就是AKB分团、SKE人气等于AKB人气,因此哪怕SKE村内再火爆,村外还是不会有兴趣,反而只会认为AKB火而已。现在SKE已糊,很多人都说乃木坂村内已经比AKB更火了,但村外还是无人关心、还是把乃木坂视作AKB分团。

这种抱怨在地下偶像wota里同样存在。很多地下偶像wota对秋元系偶像不屑一顾,认为自家偶像实力远胜AKB,但媒体被AKB占领,她们才没有机会走上大平台推广给全国,世人眼里平成偶像等同于AKB,埋没了多少好苗子。

实际上不止乃木坂虚红,AKB的所有分团全部都“虚红”。比如SKE至今在名古屋被视作东京偶像而不是地元偶像,Zero position地元走访到处碰壁,再比如HKT也被视为东京偶像,福冈另一个地下偶像LinQ饭最喜欢说的就是其实在福冈LinQ比HKT更红。没错大家都知道HKT、但那是因为指原、因为AKB,真要比指原以外的知名度,哪怕宫胁儿玉这样级别都不一定能赢高木悠未,而这些都不是O榜上HKT的“虚红”能反映的。

去年新闻说福冈众议院选举PR启用LinQ而不用HKT,去年九州朝日台很有话题的真人转恐怖动画KOWABON也选用LinQ而不用HKT,LinQ饭说LinQ其实在福冈比HKT更红,恐怕不完全是2ch地下板说的“吵闹的少数派”。

为直播做准备——Ubuntu编译安装Nginx

一般软件源里默认的nginx是不带nginx-rtmp-module的,现在直播这么发达,如果想搞个直播服务器不就得自己编译了嘛。

我准备搞个直播服务器就碰到了这种问题。

服务器:Ubuntu 16.04 AWS版。嗯就是AWS那个免费的1CPU1G内存的东西。

好在Ubuntu有足够强大的apt,apt源里编译成啥样的,你也能编译成啥样。
嘛,首先更新一下源,这个很重要,拿不到最新版本的源代码很痛苦。

sudo apt-get update
sudo apt-get dist-upgrade

如果要编译apt源里的代码,需要一个dpkg-dev,顺便也装下git和vim,反正后面要用。

如果你的Ubuntu里已经带了这些东西了,就不需要再单独安装了。

sudo apt-get install dpkg-dev vim git

好了我们下面可以下载apt库里的源码了。

sudo apt-get source nginx

注意源码会出现在你的当前目录下面。

然后是下载nginx-rtmp-module的源码。要是不装这东西我就直接sudo apt-get install nginx然后直接用了,轻松愉快,升级还方便。

git clone https://github.com/arut/nginx-rtmp-module.git

然后进入上面下载的nginx的目录,修改编译的参数,添加上rtmp module。

cd nginx-1.10.0 #这里cd进哪个目录看你的具体的版本号
sudo vim debian/rules

找到一堆 –add-module=xxxx 的最后,在后面补个 “\”,然后去下一行写

--add-module=/home/ubuntu/nginx-rtmp-module #这个是你git clone来的ngix-rtmp-module的源码目录

保存退出。

之后我们开始编译过程

sudo apt-get build-dep nginx
sudo dpkg-buildpackage -b

漫长的等待之后,编译就结束了。返回上级目录会发现出现了许多deb包。

不需要全装,安装common和full即可

sudo dpkg --install nginx-common_1.10.0-0ubuntu0.16.04.4_all.deb nginx-full_1.10.0-0ubuntu0.16.04.4_amd64.deb

安装成功了?

反正应该是安装成功了。

轻松愉快对吧。

2016年4月ACG音乐推荐

本篇推荐的音乐专辑封面

4月份,新的一季动画开播。虽然本季有许多热门作品,仍然免不了被人们叫做“近年来最弱4月”。对于ACG音乐来说,4月是个尴尬的时候,因为上季新番的歌曲陆续发售完毕,本季歌曲还没开始发售。两千枚CD就销量就能进排行榜前30位。不过相对的,本月仍然有那种令人眼前一亮的歌曲。

这篇文章中推荐的歌曲基本上都是为了满足我个人的喜好,如果你感觉可能和我喜好差不多,就请点下去下面两个链接中的任意一个吧。

排序不分先后。

本篇推荐歌单:在线收听1(顺序不对) / 在线收听2(歌不全)

===============

 

 

《わたしたち記念日》

又不带mocho玩的TrySail,《高校舰队》未播先发的角色曲。

和这部作品改名之前给人的感觉的一样,这首歌也是一首充满着欢笑和希望的歌曲,是那种听了以后能给人阳光感觉的歌曲。典型的ACG燃曲的风格,没有mocho的TrySail两人相对萌的声线在这种曲风中也显的非常合适。以至于在月初听到这首歌的时候,就给人一种能看到一部不错的治愈百合番的错觉。结果是什么大家都知道了。

词:稲葉エミ 曲:eba 编曲:小森茂生 演唱:雨宮天、夏川椎菜

 

 

《Harmony Ribbon》

水濑祈的第二张单曲。去年年底水濑祈的一单发布之后,大家都给出了很高的评价,总结起来就是两个字“惊艳”。可能是之前总是给软萌妹子的角色配音,大家没想到水濑祈的真实声线是这个样子的。在上张单曲大好评的售出1万1千份之后,二单也在首月取得了11,349枚的销量,超过了一单初动。

二单曲风延续了一单了风格,我个人是比较喜欢这样的祈之助的,另外,同时推荐CW曲M3轨的Ring of smile。是和标题曲不同的风格。

词/曲:多田慎也 编曲:铃木雅也 演唱:水濑祈

 

 

《恋色に咲け》

HoneyWorks一贯的甜甜的曲风。剧场版《从很久以前就喜欢你了。~ 告白实行委员会 ~ 》的主题曲。

不知道为什么,虽然我平常是个对少女漫风格无感的人,在听到HoneyWorks的歌曲的时候总是很喜欢,并且能感到共鸣。同样的,这首暖暖的歌,给人一种暖暖的四月的感觉。

另外,CHiCO的声音和HoneyWorks的曲风还真是配啊。

词/曲/编曲:HoneyWorks 演唱:CHiCO with HoneyWorks

 

 

《クローバー♣かくめーしょん》

TV《三者三叶》OP,作为本季良心百合番,这首OP由主角声优三人组“とりぷる♣ふぃーりんぐ”演唱。

很轻快的曲风,歌词也很有意思。有人评论为“魔性”。确实有一种听了几遍就不由自主开始循环的心情。

词/曲:おぐらあすか 演唱:とりぷる♣ふぃーりんぐ(和久井優、金澤まい、今村彩夏)

 

 

《わたしたちのスタートライン! 》

出自人气手游《战斗女子高校》1周年纪念CD,同时也宣布了本作的动画化。这游戏的CV是卖点之一,画风也十分可爱。虽然原作是个战斗类的手游,但是这张CD的曲风莫名的是偶像系。不过本身原作的女孩子就是可爱的闪闪发光的IDOL的感觉,偶像系曲风倒是完全没有问题了。

本组演唱者ChuuuuuLip的组成是:加藤英美里、内田真礼、南条爱乃、内山夕实、久野美咲

有没有看到CV们的就爆炸了的感觉?我再来说一下另外两组的CV——Sirius:田村睦心、佐仓绫音、雨宫天、上板堇、原田瞳;Tiara:洲崎绫、东山奈央、早见沙织、五十岚裕美、木户衣吹、悠木碧。全顶级人气女声优的阵容,不火都困难啊。同样这样的CV阵容保证了这张CD的质量和销量。

另外这张CD中终于带上了大家念念不忘的自动战斗BGM,星月みき的角色歌《Believe》,还好一年前没有“没有xxx完整版听我要死了”这个梗。终于有了的Believe完整版也相当好听,顺便推荐一下。

词:yuiko 曲:木村有希 演唱:ChuuuuuLip

 

 

《COOLEST》

上面介绍的歌都是由女歌手演唱,来换个曲风。

这首《COOLEST》是4月新番《在下坂本,有何贵干?》的OP主题歌。标准燃曲,听了就能给人一种热情。就和这部动画一样,“Cool Cooler Coolest”的歌词听了就莫名的在心中燃起一种激情。有的时候听听这种燃曲感觉也不错。

《坂本》动画现在正在放送中,我没有看过漫画版,不过动画依然看的我非常开心。搞笑与装逼齐飞的剧情可以让人时不时的笑出来。

词/曲:エンドウ 演唱:カスタマイZ

 

 

《What a Wonderful World Line》

fhána在4月27日发行了他们的第二张专辑《What a Wonderful World Line》,收录了之前的一些歌曲以及新曲。本首歌是这张专辑的同名曲。

我一直很喜欢fhána的主唱towana的音色,她的那种极富特色的具有穿透力的高音,听起来的感觉非常舒服。当然这首歌也一样,听上去很放松的一种感觉。

本专辑里还有几首非常不错的歌,比如《The Color to Gray World》,也值得一听。另外还有一首《Relief》是一首曲风接近欧美流行音乐的全英文歌。

曲:佐藤纯一 词:林英树 演唱:fhána

 

 

《待ってて愛のうた》

这里唯一一首推荐的不是标题曲的歌。来自企划《LoveLive!Sunshine!!》的组合Aqours的第二张单曲。这首歌是水团的第一首抒情曲,优美的旋律让人初次听到就能喜欢上,而这首歌的词更是被许多人称作“有毒”。我在《如何评价水团2单》的问题回答中也提到过,其中的两句歌词

待っててくれるかい?

もっとステキになりたいよ

……

信じてくれるかい?

きっといつかは歌えるって

真的看了给人很深的感触。这首歌就像是她们想对自己,想对等待着、一起伴随着她们成长的粉丝说的话。

另外这首歌在2段副歌后安排了个人的轮流solo。9个人分别把她们各自的声音特点展示出来,也成了这首歌的一个特色。

另外我真的对这种抒情曲招架不住。这种旋律太吸引我了,于是我这几天里已经循环了几百次这首歌了。

标题曲《恋になりたいAQUARIUM》同样是首很好听的歌哦。

本单曲初动销量46,835,相比上一单少了一千多枚。但是仍然是非常好的成绩,不仅拿下了ACG榜单的月冠军,同时也拿下了5月1日综合排行榜的日冠军。并没有像多数人预测的那样,水团2单销量出现大幅度下滑。而是保持住了自己的粉丝群。二单质量很高,也有可能会吸引来自己的一批粉丝。

事实上已经出现了因为喜欢水团二单,之前并不了解μ's,这样入坑LoveLive的新人,她们在稳定自己已有粉丝群的同时,也开始新一轮的吸粉能力。随着小队曲和下个季度即将到来的动画,我更加期待着她们今后的发展。

词:畑亚贵 曲/编曲:山口朗彦 演唱:Aqours

 

 

 

 

PICK UP:

《いけないボーダーライン》

如果说4月哪首歌最火,那无疑是这首《いけないボーダーライン》了。这首歌并不是4月发售的新歌,而是在1月就先行数字版发售,CD实体版则是在5月11日发售的,TV动画《Macross Δ》的第一话插曲。

配合着第一话结束激烈的战斗场面,和极具节奏感的音乐,大多数人,当然也包括我,对这首歌真的是印象深刻,然后就开始了不断循环。顺便大家创作了出了超级多的表情包。

(想看表情包?请点击这里

@渡江昨天是小鹿在群里提到这首歌的时候说:“中国人就是对动次打次没有任何抵抗力啊”。这首歌的节奏感吸引了很多人,又像“病毒式营销”那样扩散到了所有ACG爱好者的视线中,想不火也难了。于是我们就看到了越来越多的“吸毒”大军,创作出越来越多的表情包们。

顺便一提,这首歌的主唱,负责美云歌声的JUNNA,出生于2001年,仅有15岁。不过无论是歌声还是长相,看着都比同队的年龄比她大多了的东山奈央成熟很多。

词:西直纪 曲:コモリタミノル 演唱:ワルキューレ

 

 

 

 

—————————分割线2—————————–

下面是一些未在本篇中着重介绍的不错的歌,和我在上面“顺便”推荐的歌。一起放在歌单底部,这些歌也相当不错,请大家听听。

Ring of smile 水濑祈2单CW

これ青春アンダースタンド 《从很久以前就喜欢你了。~ 告白实行委员会 ~ 》OP专辑CW,有着和标题曲不一样的曲风。

Believe 战斗少女高校一周年纪念专辑CW曲

The Color to Gray World fhána二专M1

结露 迷家ED

一分一秒君と僕の 《从很久以前就喜欢你了。~ 告白实行委员会 ~ 》ED

恋になりたいAQUARIUM Aqours 2单标题曲

 

 

 

 

====================

下个月值得关注的歌曲:

五月是四月新番歌曲集中发布的时候。上面PICK UP的“神曲”《禁绝边境线》将于5月11日正式发行实体CD版本了,和Macross Δ的OP/ED一起。

水团两个小分队:CYaRon!和AZALEA分别将于5月11日和5月25日发行自己的首张单曲。CYaRon!的首张单曲《元気全開DAY!DAY!DAY!》的试听已经放出来了。我感觉CW又是比标题曲好听啊,难道CW欺诈会成为水团新套路?

8w8(甲铁城的卡巴内利)的ED、龙心战记OP、高校舰队OP、RE:0 OP也将于5月11日发售。

甲铁城ED、龙心战记ED、线上老婆ED、学战二期OP、以及被大家称作“回档神曲”的RE:0的ED将于5月25日发售。

如果听了这些歌之后感觉自己非常喜欢某一首歌,不要犹豫了,赶紧去买买买吧

  • 本篇中销量数据来源:sm28767094、名作之壁吧。

AZALEA / トリコリコPLEASE!!

AZALEA的一单《トリコリコPLEASE!!》今天出了个试听。。。

超级喜欢这个曲风。。。。

下面是试听版歌词,因为是听译所以肯定有不对的地方。

【花丸】

信じてる 言葉の魔法

相信着 话语中的魔法

君をいつか虜になって

总有一天会将你俘虏

私をいつでもみつめてPLEASE!!

请一直都要看着我PLEASE!!

【黛雅】

準備しよ どんな言葉で

准备好了 无论什么话语

好きな伝えるのがわからない

不知道能不能传递我的喜欢

吐息なら 熱く伝わるのに

明明呼吸已经热切的传达到了

【果南】

一度だけ きっとチャンスがあるの

只要一次 一定会有机会的吧

いつは その時だろ

到了那个时候

捕まえなきゃ 絶対

就一定能抓到你 绝对

【全】

ああ 誰は恋への 近道なんて

啊啊 谁正在恋爱的捷径上

知らないだけど ねぇーLove me!

虽然不明白这些 呐~Love me!

幸せにしちゃうからねもしかしたら

如果说我已经可以变的幸福了

これが世界なの 愛の呪文

这就是所谓的世界? 爱的咒语

Openstack Swift安装(三)

上一篇里我们配置好了Storage Node。

然后我们切换回Controller节点。

创建和分发初始环

同样地,还是使用root账户继续。

创建账户环

1) 首先切换到/etc/swift目录

2) 建立一个基础的account.builder文件

swift-ring-builder account.builder create 10 3 1

3) 将每个存储设备添加进环

对于每个Storage结点上的每个存储设备,都需要执行一次下面这样的命令:

swift-ring-builder account.builder \\
  add --region 1 --zone 1 --ip STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS --port 6002 \\
  --device DEVICE_NAME --weight DEVICE_WEIGHT
  

其中STORAGE_NODE_MANAGEMENT_INTERFACE_IP_ADDRESS是Storage结点的Management网络的IP,DEVICE_NAME是存储设备名,DEVICE_WEIGHT是权重。

对于我现在的1个Storage中有2个存储设备的情况,我需要执行下面的命令:

swift-ring-builder account.builder add \\
  --region 1 --zone 1 --ip 10.20.0.3 --port 6002 --device sdb --weight 100
swift-ring-builder account.builder add \\
  --region 1 --zone 1 --ip 10.20.0.3 --port 6002 --device sdc --weight 100
  

4) 之后的工作

我们可以用下面的命令来查看现在环的内容:

swift-ring-builder account.builder

之后我们需要重新平衡环:

swift-ring-builder account.builder rebalance

创建容器环

1) 同样需要先切换到/etc/swift目录

2) 建立一个基础的container.builder文件

swift-ring-builder container.builder create 10 3 1

3) 添加每个存储设备进环

和上面的过程类似,将每个设备上的每个存储设备都添加进去:

swift-ring-builder container.builder add \\
  --region 1 --zone 1 --ip 10.20.0.3 --port 6001 --device sdb --weight 100
swift-ring-builder container.builder add \\
  --region 1 --zone 1 --ip 10.20.0.3 --port 6001 --device sdc --weight 100
  

4) 验证并重新平衡

swift-ring-builder container.builder
swift-ring-builder container.builder rebalance

创建对象环

和上面两个同样的模式,我在这里把我用到的命令列出来:

1
2
3
4
5
6
7
8
cd /etc/swift
swift-ring-builder object.builder create 10 3 1
swift-ring-builder object.builder add \\
--region 1 --zone 1 --ip 10.20.0.3 --port 6000 --device sdb --weight 100
swift-ring-builder object.builder add \\
--region 1 --zone 1 --ip 10.20.0.3 --port 6000 --device sdc --weight 100
swift-ring-builder object.builder
swift-ring-builder object.builder rebalance

分发环配置

现在在/etc/swift目录中已经生成了container.ring.gzobject.ring.gzaccount.ring.gz三个文件了。

将这三个文件复制到每一个Storage Node上的/etc/swift目录中。

如果还有其他的node运行着swift-proxy服务,那么这些配置文件也需要复制过去。

完成安装

启动Swift服务

1) 我们还是先下载一份示例配置文件:

curl -o /etc/swift/swift.conf \\
  https://git.openstack.org/cgit/openstack/swift/plain/etc/swift.conf-sample?h=stable/liberty
  

2) 然后打开它进行编辑

[swift-hash]段落中,修改掉suffix和prefix的内容。

随便什么内容都好,但是一旦你设置好了,就不能再次修改了。

我这里还是惯例的生成几个随机值吧。

[swift-hash]
...
swift_hash_path_suffix = b1b8198f
swift_hash_path_prefix = c167cd22

然后在[storage-policy:0]段落中,编辑一下默认的存储策略。

[storage-policy:0]
...
name = Policy-0
default = yes

3) 分发配置文件

这样配置文件就准备完毕了。

接下来你需要把这份配置文件复制到所有其他运行着swift的结点上的/etc/swift目录中。

4) 在所有的结点上设置一下/etc/swift目录的归属

下面这段命令需要在所有安装有Swift的结点上执行

chown -R root:swift /etc/swift

5) 在Controller Node上启动服务

service memcached restart
service swift-proxy restart

6) 在Storage Node上启动服务

swift-init all start

此时Swift已经成功的部署了。


到这里,我们已经部署了一个十分类似于生产环境的Swift,并且可以投入使用了。

当然,因为没有界面,所以实际使用起来还是有点困难的。

Swift有着丰富的API,可以帮助我们实现开发的目的。

Openstack Swift安装(二)

上一篇里我们在Controller上安装好了Swift-proxy。

本篇中我们就来安装Swift在Storage上的组件。

安装和配置Storage结点

Note: 如果你有多个Storage结点,你需要将本文的操作在每一台Storage结点上都重复一遍。

准备工作

1) 准备存储设备

在前面我介绍 Swift All In One 安装的时候,用了回环设备虚拟了一个存储设备。

不过这次我们不是要当做是生产环境安装嘛,还用回环设备就显得有点low。

既然我们是虚拟机,首先虚拟两个硬盘出来吧。

下面的操作推荐使用root用户

2) 安装工具软件

安装一下这两个东西。

apt-get install xfsprogs rsync

3) 格式化磁盘

我们新加的两个硬盘分别被标识成了/dev/sdb和/dev/sdc。

我们需要将它们格式化成xfs格式。

mkfs.xfs /dev/sdb
mkfs.xfs /dev/sdc

4) 建立两个硬盘对应的挂载点

mkdir -p /srv/node/sdb
mkdir -p /srv/node/sdc

5) 设置开机自动挂载

编辑/etc/fstab文件,在下面加入:

/dev/sdb /srv/node/sdb xfs noatime,nodiratime,nobarrier,logbufs=8 0 2
/dev/sdc /srv/node/sdc xfs noatime,nodiratime,nobarrier,logbufs=8 0 2

6) 正式挂载

mount /srv/node/sdb
mount /srv/node/sdc

上面这些步骤和我们设置SAIO时是类似的。

7) 设置rsync

按照下面的模板编辑/etc/rsyncd.conf文件(如果没有就新建一个)

address后面的IP地址是Storage Node在Management网络上的IP地址。

uid = swift
gid = swift
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
address = 10.20.0.3

[account]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/account.lock

[container]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/container.lock

[object]
max connections = 2
path = /srv/node/
read only = false
lock file = /var/lock/object.lock

8) 启用rsync

首先编辑/etc/default/rsync,找到其中的RSYNC_ENABLE,将值设为true

RSYNC_ENABLE=true

然后用如下命令开启rsync服务

service rsync start

我们可以在Controller上运行一下下面的命令来验证rsync的安装情况。

rsync rsync://[email protected]

正确的响应应当类似下面:

account
container
object

安装和设置组件

1) 首先当然还是安装组件

apt-get install swift swift-account swift-container swift-object

2) 分别下载配置文件样例来覆盖原有的配置文件

curl -o /etc/swift/account-server.conf \\
  https://git.openstack.org/cgit/openstack/swift/plain/etc/account-server.conf-sample?h=stable/liberty
curl -o /etc/swift/container-server.conf \\
  https://git.openstack.org/cgit/openstack/swift/plain/etc/container-server.conf-sample?h=stable/liberty
curl -o /etc/swift/object-server.conf \\
  https://git.openstack.org/cgit/openstack/swift/plain/etc/object-server.conf-sample?h=stable/liberty
  

3) 我们首先来进行/etc/swift/account-server.conf的配置

首先来看[DEFAULT]段落:

[DEFAULT]
...
bind_ip = 10.20.0.3
bind_port = 6002
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = true

然后是[pipeline:main]

[pipeline:main]
pipeline = healthcheck recon account-server

接下来再看[filter:recon]

[filter:recon]
use = egg:swift#recon
...
recon_cache_path = /var/cache/swift

4) 然后我们配置一下/etc/swift/container-server.conf

还是首先来看[DEFAULT]

[DEFAULT]
...
bind_ip = 10.20.0.3
bind_port = 6001
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = true

和上面同样,接下来是[pipeline:main]

[pipeline:main]
pipeline = healthcheck recon container-server

然后是[filter:recon]

[filter:recon]
use = egg:swift#recon
...
recon_cache_path = /var/cache/swift

5) 我们还有最后一个文件/etc/swift/object-server.conf需要配置

和上面一样,首先需要修改[DEFAULT]

[DEFAULT]
...
bind_ip = 10.20.0.3
bind_port = 6000
user = swift
swift_dir = /etc/swift
devices = /srv/node
mount_check = true

然后是[pipeline:main]

[pipeline:main]
pipeline = healthcheck recon object-server

最后同样是[filter:recon]

[filter:recon]
use = egg:swift#recon
...
recon_cache_path = /var/cache/swift
recon_lock_path = /var/lock

6) 最后给一些目录设置权限

chown -R swift:swift /srv/node
mkdir -p /var/cache/swift
chown -R root:swift /var/cache/swift

至此,在Storage结点上的Swift就配置结束了。

接下来我们要进行对象环的设置。。。。。。

这篇已经这么长了。

那么,接下来的内容在:Openstack Swift安装(三)

Openstack Swift安装(一)

上一篇中我们已经在Controller上安装好了Keystone。

嗯,接下来安装Swift。

Swift是OpenStack最老的组件之一,从OpenStack诞生那一刻就存在了。

我们先部署Controller(就还是那台已经安装好Keystone的Controller)。

安装在Controller上的Swift组件是Swift-proxy。

安装和配置Controller结点

准备工作

1) 首先导入admin-openrc.sh来实现自动登录。

. ~/admin-openrc.sh

2) 在Keystone中给Swift建立一个认证服务

openstack user create --domain default --password-prompt swift
openstack role add --project service --user swift admin
openstack service create --name swift --description \"OpenStack Object Storage\" object-store

3) 在Keystone中给Swift服务建立API端点

注意和Keystone自己的API端点一样,这里也有3个,注意替换IP。

openstack endpoint create --region RegionOne object-store public http://192.168.203.100:8080/v1/AUTH_%\\(tenant_id\\)s
openstack endpoint create --region RegionOne object-store internal http://10.20.0.2:8080/v1/AUTH_%\\(tenant_id\\)s
openstack endpoint create --region RegionOne object-store admin http://10.20.0.2:8080/v1

安装和配置组件

1) 安装好Swift的Controller组件

apt-get install swift swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached

2) 下面进入配置阶段,首先建立存配置的文件夹

从这里开始暂时切成root用户会比较好一些。

mkdir /etc/swift

3) 我们从源代码库下载一份示例配置

curl -o /etc/swift/proxy-server.conf \\
  https://git.openstack.org/cgit/openstack/swift/plain/etc/proxy-server.conf-sample?h=stable/liberty

4) 打开刚才下载到的proxy-server.conf,进行如下的编辑

[DEFAULT]
...
bind_port = 8080
user = swift
swift_dir = /etc/swift
...
[pipeline:main]
pipeline = catch_errors gatekeeper healthcheck proxy-logging cache
container_sync bulk ratelimit authtoken keystoneauth container-quotas
account-quotas slo dlo versioned_writes proxy-logging proxy-server
...
[app:proxy-server]
use = egg:swift#proxy
...
account_autocreate = true
...
[filter:keystoneauth]
use = egg:swift#keystoneauth
...
operator_roles = admin,user
...
[filter:authtoken]
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
...
auth_uri = http://10.20.0.2:5000
auth_url = http://10.20.0.2:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = swift
password = swift
delay_auth_decision = true
...
[filter:cache]
use = egg:swift#memcache
...
memcache_servers = 127.0.0.1:11211

注意在[filter:authtoken]段落中的url地址的IP需要修改,还有password也需要改成前面创建swift账户时设置的密码。

这个段落里其他的可用配置最好都注释掉。

这样我们在Controller上的Swift Proxy配置就结束了。

这一篇好短。。

接下来的内容在:Openstack Swift安装(二)

Openstack Keystone安装(二)

上一篇中我们已经将Keystone的组件安装在了计算机上。

本篇我们将会对Keystone进行一些基本配置和基本使用。

准备

接下来我们暂时不需要使用root账户了,返回普通用户继续下面的操作。

我们首先在home目录下建立一个方便我们未来使用命令行的文件。

touch ~/admin-openrc.sh
chmod +x ~/admin-openrc.sh

在其中添加下面的内容:

export OS_TOKEN=49f9e01220a3a7f0c41e
export OS_URL=http://10.20.0.2:35357/v3
export OS_IDENTITY_API_VERSION=3

这里需要把TOKEN换成上一步我们生成的那个随机值。

然后保存退出,接下来运行:

. ~/admin-openrc.sh

这样这些环境变量就被导入到当前环境了。

建立服务实体和API终结点

1) 首先通过下面的命令来生成一个服务实体

openstack service create --name keystone --description \"OpenStack Identity\" identity

2) 下面我们来建立三个API终结点(Endpoint)

为什么要建三个呢,因为Openstack的API Endpoint有三种类型:public、internal和admin。

注意它们的区别,public的url使用Public IP,另外两种使用Management IP。并且admin使用35357端口,另外两种使用5000端口。

openstack endpoint create --region RegionOne identity public http://192.168.203.100:5000/v2.0
openstack endpoint create --region RegionOne identity internal http://10.20.0.2:5000/v2.0
openstack endpoint create --region RegionOne identity admin http://10.20.0.2:35357/v2.0

建立项目、用户和角色

1) 首先建立一个管理员项目以及管理员用户来进行环境设置。

我们简单的使用default这个domain。

建立admin项目

openstack project create --domain default --description \"Admin Project\" admin

接下来我们建立admin用户和admin role

openstack user create --domain default --password-prompt admin
openstack role create admin

建立过程中会要求输入密码,记住这个密码哦。

然后我们把project admin和用户admin添加进admin角色

openstack role add --project admin --user admin admin

注意:上面这个命令是没有任何输出的。

我们创建一个service project给下面的服务用:

openstack project create --domain default --description \"Service Project\" service

之后,你可以重复上面类似的过程来创建更多需要的项目、用户和角色。

2) 验证用户

我们来检查下用户设置。首先去掉我们上面导入到环境变量中的OS_TOKEN和OS_URL

unset OS_TOKEN OS_URL

然后用下面的命令尝试登录:

openstack --os-auth-url http://10.20.0.2:35357/v3 \\
  --os-project-domain-id default --os-user-domain-id default \\
  --os-project-name admin --os-username admin --os-auth-type password \\
  token issue
  

在输入密码后,如果登录成功,会打印出expires、id、project_id 和 user_id

创建Openstack客户端环境脚本

再次打开~/admin-openrc.sh文件,将里面的内容替换为刚才建立的用户

export OS_PROJECT_DOMAIN_ID=default
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_NAME=admin
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=123456
export OS_AUTH_URL=http://10.20.0.2:35357/v3
export OS_IDENTITY_API_VERSION=3

同样是使用

. ~/admin-openrc.sh

命令来导入。

我们这次不像上面测试那样用那么参数来测试,直接用

openstack token issue

和前面同样打印出了结果即可。

完成安装

这样Keystone就安装完成了。

我们来建立个测试用户测试一下。

openstack project create --domain default --description \"Demo Project\" demo
openstack user create --domain default --password-prompt demo
openstack role create user
openstack role add --project demo --user demo user

这样我们就有了一个用户名为 demo ,身处 user 用户组的测试用户了。

来稍微使用一下吧

首先我们尝试用admin/123456这对用户名和密码登录。

我们需要登录成管理员模式,于是需要在scope里设置登录的scope为admin project

scope只有project或者domain两种,而且不可同时出现。这里我们domain固定为default就不存在换domain的问题了。

POST /v3/auth/tokens
Content-Type: application/json

{
    "auth": {
        "identity": {
            "methods": ["password"],
            "password": {
                "user": {
                    "name": "admin",
                    "domain": {
                        "id": "default"
                    },
                    "password": "123456"
                }
            }
        },
        "scope": {
            "project": {
                "name": "admin",
                "domain": { 
                    "id": "default"
                }
            }
        }
    }
}

在响应的Header里会有

X-Subject-Token: 5d3122af4b8549e986ce1415d2d1940f

然后我们用这个Token继续请求

GET /v3/users
X-Auth-Token: 5d3122af4b8549e986ce1415d2d1940f

这里的X-Auth-Token就是上一步获得的X-Subject-Token

这个响应如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"users": [
{
"name": "admin",
"links": {
"self": "http://192.168.203.100:5000/v3/users/4192b00794724d1189307441929285aa"
},
"enabled": true,
"id": "4192b00794724d1189307441929285aa",
"domain_id": "default"
},
{
"name": "demo",
"links": {
"self": "http://192.168.203.100:5000/v3/users/ffcf9a3f9a8e4e828212d3cad04034a0"
},
"enabled": true,
"id": "ffcf9a3f9a8e4e828212d3cad04034a0",
"domain_id": "default"
}
],
"links": {
"self": "http://192.168.203.100:5000/v3/users",
"previous": null,
"next": null
}
}

很明显已经拿到了Admin权限。接下来可以为所欲为了。

顺便说一下,官方文档写的真是烂,我写这个“来稍微使用一下吧”这个段落居然花掉了我4个小时。

各种400、401、403。。。然后终于看到200 OK了。。。

光是推测json格式就很累。。。。

接下来的内容在:Openstack Swift安装(一)