Merge branch 'wizard' of github.com:tuna/mirror-web into wizard

This commit is contained in:
Xavier Yao 2016-11-13 19:00:49 +08:00
commit 71901b00a3
12 changed files with 280 additions and 77 deletions

View File

@ -27,7 +27,12 @@ gems:
- jekyll-babel
- jekyll-sitemap
babel_js_extensions: 'es6'
exclude: [Gemfile, Gemfile.lock, README.md, gen_robot.sh, vendor]
# Content Related
new_mirrors: [arch4edu, ros, elvish, HHVM, steamos, bjlx, loongson, tensorflow, elastic]
new_mirrors: [arch4edu, ros, elvish, HHVM, steamos, bjlx, loongson, tensorflow, elasticstack]
descriptions:
AOSP: 'Android Open Source Project'

View File

@ -14,6 +14,7 @@
<script src="/static/js/jquery.min.js"></script>
<script src="/static/js/bootstrap.min.js"></script>
<script src="/static/js/bootstrap-select.min.js"></script>
<script src="/static/js/vue.min.js"></script>
<script src="/static/js/markup.min.js"></script>
<script src="/static/js/webfont.js"></script>
</head>

View File

@ -17,9 +17,9 @@ sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
<div class="form-group">
<label>选择你的 CentOS 版本: </label>
<select class="form-control release-select" data-template="#repo-template" data-target="#repo-content">
<option data-release="5" selected>CentOS 5</option>
<option data-release="5">CentOS 5</option>
<option data-release="6">CentOS 6</option>
<option data-release="7">CentOS 7</option>
<option data-release="7" selected>CentOS 7</option>
</select>
</div>
</form>
@ -45,7 +45,6 @@ baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-{{release_name}}
#released updates
[updates]
name=CentOS-$releasever - Updates
@ -61,7 +60,6 @@ baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-{{release_name}}
{{if release_name|equals>5}}
#packages used/produced in the build but not released
[addons]
@ -79,7 +77,6 @@ baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/centosplus/$base
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-{{release_name}}
{{if release_name|between>5>6}}
#contrib - packages by Centos Users
[contrib]
@ -88,9 +85,7 @@ baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/contrib/$basearc
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-{{release_name}}
{{/if}}
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-{{release_name}}{{/if}}
</script>
{% endraw %}

View File

@ -0,0 +1,95 @@
---
category: help
layout: help
mirrorid: tensorflow
---
# TensorFlow 镜像使用帮助
请先安装 python 环境,科学计算用途建议安装 [anaconda](/help/anaconda/)。
TensorFlow 安装方法请参考 <https://www.tensorflow.org/get_started>,把 `https://storage.googleapis.com/` 替换为 `https://mirrors.tuna.tsinghua.edu.cn/`
即可。
或直接运行下列命令,一步完成整个安装过程。
{% raw %}
<div id="content-form">
<form class="form-inline">
<div class="form-group">
<label>计算单元: </label>
<select v-model="form.xpu" class="form-control">
<option value="gpu">GPU</option>
<option value="cpu">CPU</option>
</select>
<label>操作系统: </label>
<select v-model="form.os" class="form-control">
<option value="linux">Linux</option>
<option value="mac">Mac OS X</option>
</select>
<label>Python 版本: </label>
<select v-model="form.python" class="form-control">
<template v-if="form.os === 'linux'">
<option value="35">3.5</option>
<option value="34">3.4</option>
<option value="27">2.7</option>
</template>
<template v-if="form.os == 'mac'">
<option value="3">3</option>
<option value="2">2</option>
</template>
</select>
<label>TensorFlow 版本: </label>
<select v-model="form.tfver" class="form-control">
<option value="0.11.0">0.11.0</option>
<option value="0.10.0">0.10.0</option>
</select>
</div>
</form>
<p></p>
<pre>
pip install \
-i https://pypi.tuna.tsinghua.edu.cn/simple/ \
https://mirrors.tuna.tsinghua.edu.cn/tensorflow/{{form.os}}/{{form.xpu}}/tensorflow-{{form.tfver}}-{{pytag}}.whl
</pre>
</div>
<script>
var vue = new Vue({
el: "#content-form",
data: {
form: {
xpu: "gpu",
os: "linux",
python: "35",
tfver: "0.11.0"
}
},
computed: {
pytag: function() {
if (this.form.os === "linux") {
if (this.form.python === "27") {
return "cp" + this.form.python + "-none-linux_x86_64";
}
return "cp" + this.form.python + "-cp"+this.form.python+"m-linux_x86_64";
} else if (this.form.os === "mac") {
return "py" + this.form.python + "-none-any";
}
}
},
watch: {
"form.os": function (newOS) {
if (newOS === "linux") {
this.form.python = "35";
} else if (newOS === "mac") {
this.form.python = "3";
}
}
}
});
</script>
{% endraw %}

View File

@ -0,0 +1,18 @@
---
category: news
layout: news
title: "新增 Tensorflow 等一系列镜像"
author: Xavier Yao & Harry Chen
---
TUNA 镜像站新增一系列镜像。
- tensorflow: Google 开发的、采用数据流图data flow graphs、用于数值计算的开源软件库被广泛应用于深度学习等领域。使用方法见 [TensorFlow 镜像使用帮助](/help/tensorflow/)。
- arch4edu: 用于 ArchLinux 的一系列科研、教学所需工具
- ros: 用于开发机器人的工具包
- elvish: TUNA 前会长 [xiaq](https://github.com/xiaq) 开发的革命性 Shell ,详见 [这里](https://elvish.io/)
- HHVM: 由 Facebook 开发的高性能 PHP 虚拟机
- steamos: 不解释,剁手专用
- bjlx: [北京龙芯 & Debian 俱乐部](http://www.bjlx.org.cn/) 的公开源
- loongson: 用于龙芯电脑的软件包
- elasticstack: ELK 系列数据分析工具5.x 之后改名为 elastic stack

View File

@ -8,7 +8,7 @@
# is disto name specified in below sections. Lower N makes the distro
# show higher. Default N is 0xFFFF for distro not mentioned.
[%main%]
root = /srv/www/
root = /data/
urlbase = /
d30 = Ubuntu
d40 = Ubuntu 衍生版
@ -177,10 +177,70 @@ pattern = deepin-([0-9.]+)-(\w+).iso
version = $1
platform = $2
#[qt5]
#distro = Qt
#listvers = 1
#location_0 = qt/official_releases/qt/5.[0-9]/5.[0-9].[0-9]/qt-opensource-*.run
#location_1 = qt/official_releases/qt/5.[0-9]/5.[0-9].[0-9]/qt-opensource-*.dmg
#location_2 = qt/official_releases/qt/5.[0-9]/5.[0-9].[0-9]/qt-opensource-*.exe
#pattern = qt-opensource-(\w+)-.(run|dmg|exe)
[qt5]
distro = Qt 5 (含 Qt Creator)
listvers = 1
location = qt/official_releases/qt/5.*/5.*/qt-opensource-*
pattern = qt-opensource-(.*)-([\d.]+).(run|dmg|exe)
platform = $1
version = $2
category = app
[msys2]
distro = MSYS2
listvers = 1
location = msys2/distrib/msys2-*.exe
pattern = msys2-(i686|x86_64)-(latest).exe
platform = Windows
type = $1
version = $2
category = app
[virtualbox]
distro = VirtualBox
listvers = 1
location = virtualbox/virtualbox-*
pattern = virtualbox-(.*)-(latest).(exe|dmg)
platform = $1
version = $2
category = app
[texlive]
distro = TeX 排版系统
listvers = 1
location = CTAN/systems/texlive/Images/texlive*.iso
pattern = texlive(\d+)-\d+.iso
platform = Windows & Linux
version = TeX Live $1
category = app
[mactex]
distro = TeX 排版系统
listvers = 1
location = CTAN/systems/mac/mactex/mactex-*.pkg
pattern = mactex-(\d+).pkg
platform = macOS
version = MacTeX $1
category = app
[miktex]
distro = TeX 排版系统
listvers = 1
location = CTAN/systems/win32/miktex/setup/basic-miktex-*
pattern = basic-miktex-((\d+.)+\d+)(|-)*(x64)*.exe
platform = Windows
type = $4
version = MikTeX $1
category = app
[anaconda]
distro = Anaconda
listvers = 1
location = anaconda/archive/Anaconda*
pattern = (Anaconda\d*)-(\d+.\d+.\d+)-(Windows|Linux|MacOSX)-(x86|x86_64).\w+
platform = $3
type = $4
version = $2
category = app

View File

@ -57,7 +57,7 @@ def parseSection(items):
group_count = len(result.groups()) + 1
imageinfo = {"filepath": imagepath, "distro": items["distro"]}
for prop in ("version", "type", "platform"):
for prop in ("version", "type", "platform", "category"):
s = items.get(prop, "")
for i in range(0, group_count):
s = s.replace("$%d" % i, result.group(i))
@ -90,7 +90,8 @@ def getDetail(image_info, urlbase):
image_info['platform'],
", %s" % image_info['type'] if image_info['type'] else ''
)
category = image_info.get('category', 'os')
category = image_info.get('category', 'os') or "os"
return (desc, url, category)
@ -146,4 +147,3 @@ if __name__ == "__main__":
import sys
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
print(getImageList())

View File

@ -6,9 +6,10 @@ permalink: /
{% include head.html %}
<body>
{% include nav.html %}
<div id="mirrors">
<div class="spacing hidden-xs"></div>
<div class="container">
<div class="row">
<div class="col-md-8 table-responsive">
@ -27,10 +28,6 @@ permalink: /
<div class="col-md-4">
<div class="spacing hidden-xs"></div>
<div id="wizard">
<!-- Button trigger iso modal -->
<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#isoModal">
获取安装镜像
</button>
</div>
<div id="news">
<h4><span class="fa fa-bullhorn"></span> 新闻公告 </h4>
@ -49,6 +46,13 @@ permalink: /
<li><a href="https://mirrors4.tuna.tsinghua.edu.cn/">https://mirrors4.tuna.tsinghua.edu.cn/</a> 只解析 IPv4</li>
</ul>
</div>
<div>
<h4><span class="fa fa-file-archive-o"></span> 下载链接 </h4>
<p>常用发行版 iso 和应用工具安装包直接下载</p>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#isoModal">
获取下载链接
</button>
</div>
<div>
<h4> <span class="fa fa-envelope-o"></span> 联系我们 </h4>
<ul>
@ -76,6 +80,7 @@ permalink: /
{% include footer.html %}
<!-- iso download wizard modal -->
<!-- Modal -->
{% raw %}
<div class="modal fade" id="isoModal" tabindex="-1" role="dialog" aria-labelledby="isoModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
@ -86,18 +91,35 @@ permalink: /
<h4 class="modal-title" id="isoModalLabel">获取安装镜像</h4>
</div>
<div class="modal-body">
<p>选择安装发行版: <select class="selectpicker" id="isodistro" ></select></p>
<p>选择发行版版本: <select class="selectpicker" id="isoversion">
<option value="none">-</option>
</select>
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="btn_download">下载</button>
<div class="row">
<div class="col-md-12">
<ul class="nav nav-tabs">
<li role="presentation" :class="[curCategory === 'os' ? 'active' : '']" @click="switchCategory('os')"><a href="#">操作系统</a></li>
<li role="presentation" :class="[curCategory === 'app' ? 'active' : '']" @click="switchCategory('app')"><a href="#">应用软件</a></li>
</ul>
</div>
<div class="col-md-4">
<ul class="nav nav-pills nav-stacked">
<li v-for="distro in curDistroList" :class="[selected.distro == distro.distro ? 'active' : '']">
<a href="#" @click="switchDistro(distro)">{{ distro.distro }}</a>
</li>
</ul>
</div>
<div class="col-md-8">
<h3>{{selected.distro}}</h3>
<ul>
<template v-for="url in selected.urls">
<li><a :href="url.url">{{url.name}}</a></li>
</template>
</ul>
</div>
</div>
</div>
</div>
</div>
</div><!-- /iso download wizard modal -->
{% endraw %}
</body>
{% raw %}
@ -106,7 +128,7 @@ permalink: /
{{if is_master}}
<tr class="status-{{status}} row">
<td class="col-md-8">
<a href="{{if url}}{{url}}{{else}}/{{name}}{{/if}}">{{name}}</a>
<a class="mirror-item-label" data-toggle="popover" data-trigger="hover" data-placement="right" data-content="{{if description}}{{description}}{{/if}}" href="{{if url}}{{url}}{{else}}/{{name}}{{/if}}">{{name}}</a>
{{if is_new}}<span class="label label-new">new</span>{{/if}}
{{if help_url}}<a href="{{help_url}}"><i class="fa fa-question-circle" title="Help"></i></a>{{/if}}
</td>

View File

@ -125,6 +125,9 @@ $font_local: 'Heiti SC', 'Hiragino Sans GB', 'STHeiti', 'Source Han Sans CN', 'W
color: $color_grey;
}
}
.fa-user {
font-family: #{$font_default}, 'FontAwesome';
}
}
/* Footer */

View File

@ -33,7 +33,6 @@ $(document).ready(() => {
let help_url = $(ev.target).find("option:selected").data('help-url');
window.location = `${window.location.protocol}//${window.location.host}${help_url}`;
});
});
// vim: ts=2 sts=2 sw=2 noexpandtab

View File

@ -23,6 +23,7 @@ var mir_tmpl = $("#template").text(),
new_mirrors = {
{% for n in site.new_mirrors %}"{{n}}": true{% if forloop.index < forloop.length %},{% endif %}{% endfor %}
},
unlisted = [
{
'status': 'success',
@ -39,7 +40,10 @@ var mir_tmpl = $("#template").text(),
'homebrew': {
'url': "/help/homebrew/",
}
};
},
descriptions = {
{% for item in site.descriptions %}{{ item[0] }}: '{{ item[1] }}' {% endfor %}
}
window.refreshMirrorList = () => {
$.getJSON("/static/tunasync.json", (status_data) => {
@ -58,6 +62,7 @@ window.refreshMirrorList = () => {
d.label = label_map[d.status];
d.help_url = help_url[d.name];
d.is_new = new_mirrors[d.name];
d.description = descriptions[d.name];
d.show_status = (d.status != "success");
if (d.is_master === undefined) {
d.is_master = true;
@ -78,53 +83,45 @@ window.refreshMirrorList = () => {
}
var result = Mark.up(mir_tmpl, {mirrors: mirrors});
$('#mirror-list').html(result);
$('.mirror-item-label').popover();
});
setTimeout(refreshMirrorList, 10000);
}
window.modal = () => {
var bx = document.getElementById("isomodal");
bx.style.visibility = (bx.style.visibility == "visible") ? "hidden" : "visible";
}
window.switchDistro = () => {
var distro = document.getElementById("isodistro");
var idx = distro.selectedIndex;
var s = document.getElementById('isoversion');
s.options.length = 0;
for (var i = 0; i < isoinfo[idx].urls.length; i++) {
s.options[s.options.length] = new Option(isoinfo[idx].urls[i].name, i)
}
$('.selectpicker').selectpicker('refresh')
}
var refreshISOList = () => {
$.getJSON("/static/isoinfo.json", (isoinfo) => {
window.isoinfo = isoinfo;
window.s = document.getElementById("isodistro");
s.options.length = 0;
for (var i = 0; i < isoinfo.length; i++) {
s.options[s.options.length] = new Option(isoinfo[i].distro, i);
}
$('.selectpicker').selectpicker('refresh')
switchDistro();
});
}
$('#isodistro').change(switchDistro);
$('#btn_download').click(() => {
var distro = document.getElementById("isodistro");
var version = document.getElementById("isoversion");
var i = distro.selectedIndex;
var j = version.selectedIndex;
var link = isoinfo[i].urls[j].url;
window.open(link);
$('#isoModal').modal('toggle');
});
refreshISOList();
refreshMirrorList();
var vm = new Vue({
el: "#isoModal",
data: {
distroList: [],
selected: null,
curCategory: "os"
},
created: function () {
var self = this;
$.getJSON("/static/isoinfo.json", function (isoinfo) {
self.distroList = isoinfo;
self.selected = self.curDistroList[0];
});
},
computed: {
curDistroList () {
return this.distroList.filter((x)=> x.category === this.curCategory);
}
},
methods: {
switchDistro (distro) {
this.selected = distro;
},
switchCategory (category) {
this.curCategory = category;
this.selected = this.curDistroList[0];
}
}
});
});
// vim: ts=2 sts=2 sw=2 noexpandtab

8
static/js/vue.min.js vendored Normal file

File diff suppressed because one or more lines are too long