《龙芯应用开发标准教程》

中国原创 回复了问题 • 1 人关注 • 1 个回复 • 396 次浏览 • 2018-11-13 18:40 • 来自相关话题

航天龙梦软件源临时访问方法

heiher 发表了文章 • 0 个评论 • 246 次浏览 • 2018-05-04 11:03 • 来自相关话题

各位龙芯粉,龙梦软件源因备案问题被短暂关闭,期间请使用临时URL访问,造成不便敬请谅解。 源基地址:http://mirror.lemote.com:8000/fedora/
各位龙芯粉,龙梦软件源因备案问题被短暂关闭,期间请使用临时URL访问,造成不便敬请谅解。

源基地址:http://mirror.lemote.com:8000/fedora/

有关社区建设的一点想法

admin 发表了文章 • 4 个评论 • 415 次浏览 • 2018-04-26 12:42 • 来自相关话题

透明:社区目前已开放共享,包含pmon、kernel、loongnix、java、browser、media等各个项目的源码;后期陆续还会建立基于Docker、KVM的云平台,完善透明社区的管理、参与,加速更多的爱好者参与进来。质量:  通过开放源码,社区希望 ...查看全部
  1. 透明:社区目前已开放共享,包含pmon、kernel、loongnix、java、browser、media等各个项目的源码;后期陆续还会建立基于Docker、KVM的云平台,完善透明社区的管理、参与,加速更多的爱好者参与进来。
  2. 质量:  通过开放源码,社区希望集思广益,收集一些有建设性的意见,或者参与进来,共同促进龙芯生态的发展,而不是一味的指责谩骂。
  3. 学习:相信如果你真的参与进来了,对自身能力提高,知识的积累也是一个非常好的机会;社区愿意和大家一起成长,共同学习。


      我们不希望社区站点是一个互相谩骂攻击、不负责任的职责、抱怨的地方。而是希望大家都能爱护它,积极反馈问题,给出有建设性的建议,在促进龙芯生态发展的同时,也提高自己的能力以及学习水平。

      为维护社区良好的学习气氛,如果发现有不遵守规则的网友,我们会警告三次,然后拉黑,请理解!

logo.png


 

(精品)(Docker系列之十一)龙芯平台kubernetes集群编译及部署方案

jiangxinshang 发表了文章 • 0 个评论 • 1466 次浏览 • 2017-12-25 11:06 • 来自相关话题

   一、环境 操作系统: loongnix 内核: 3.10.84 go版本: go1.9.2 linux/mips64le cfssl(1.2.0) etcd(3.2.12) ...查看全部
timg.jpg

 
 一、环境
操作系统: loongnix
内核: 3.10.84
go版本: go1.9.2 linux/mips64le
cfssl(1.2.0)
etcd(3.2.12)
flannel(0.9.1)
kubernetes(1.9.0)
需自定义go 的环境变量,这里设置的路径为/usr/share/gocode
export GOPATH=/usr/share/gocode

三台机器:
master:10.20.42.17
node:   10.20.42.22
node:   10.20.42.172
 
二、编译cfssl源代码
1.创建代码存放目录
mkdir -p $GOPATH/src/github.com/cloudflare
2.下载并编译源代码
go get -u github.com/cloudflare/cfssl/cmd/cfssl
3.切换至二进制文件生成目录并查看文件
ls $GOPATH/bin
 
三、编译etcd源代码
参考文章(龙芯公有云系列之一)搭建分布式存储服务etcd
链接地址:http://ask.loongnix.org/?/article/93

四、编译flannel源代码
1.创建代码存放目录
 mkdir -p $GOPATH/src/github.com/coreos
2.切换至该目录并下载源代码
cd $GOPATH/src/github.com/coreos
git clone https://github.com/coreos/flannel.git
3.打开flannel文件夹,执行编译过程
cd flannel/
go build
4.查看编译的二进制文件
ls flannel
 
五、编译kubernetes源代码
Kubernetes对golang版本的要求
Kubernetes    requires Go
1.0 - 1.2         1.4.2
1.3, 1.4          1.6
1.5, 1.6          1.7 - 1.7.5
1.7                 1.8.1
1.8                 1.8.3
1.9+               1.9.1
本文档编译的Kubernetes为当前最新版本1.9.0;golang版本为1.9.2
 
Fork
1.访问 https://github.com/kubernetes/kubernetes
2.点击右上角fork按钮,fork一份代码到你的github帐号,方便后续的开发。
 
Clone fork 到本地
working_dir=$GOPATH/src/k8s.io
user=xxxx #你的github账户名
mkdir -p $working_dir
cd $working_dir
git clone https://github.com/$user/kubernetes.git
# 或: git clone git@github.com:$user/kubernetes.git

cd $working_dir/kubernetes
git remote add upstream https://github.com/kubernetes/kubernetes.git
# 或: git remote add upstream git@github.com:kubernetes/kubernetes.git

# 永远不向upstream的master分支进行push操作:
git remote set-url --push upstream no_push

# 确认你的远程配置生效
git remote -v

    origin    https://github.com/bearabby/kubernetes.git (fetch)
    origin    https://github.com/bearabby/kubernetes.git (push)
    upstream    https://github.com/kubernetes/kubernetes.git (fetch)
    upstream    no_push (push)

创建本地分支
cd $working_dir/kubernetes
git fetch upstream
git checkout master
git rebase upstream/master

git checkout -b loongsonfeature
 
Build
cd $working_dir/kubernetes
make

报错信息不多,多为一些函数或变量未对mips64le平台进行支持。修改内容见0001-Build-on-mips64le.patch
注意内存剩余不足会导致编译出错:”signal: killed”,解决办法是通过增加交换分区。
 

六、搭建kubernetes集群
1.拷贝二进制文件至/root/local/bin文件夹下
mkdir -p /root/local/bin
cp  $GOPATH/bin/cfssl  /root/local/bin 
cp  /usr/bin  /root/local/bin
cp $GOPATH/src/k8s.io/kubernetes/_output/local/go/bin/*  /root/local/bin
2.设置环境变量
export PATH=/root/local/bin:$PATH
3.设置部署集群所需参数
cd /root    /local/bin
cat > environment.sh <<EOF 
#!/usr/bin/bash
# TLS Bootstrapping 使用的 Token,可以使用命令 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 生成
BOOTSTRAP_TOKEN="6c314aea8ff601079617b03df567e478"

# 最好使用 主机未用的网段 来定义服务网段和 Pod 网段
# 服务网段 (Service CIDR),部署前路由不可达,部署后集群内使用IP:Port可达
SERVICE_CIDR="10.254.0.0/16"

# POD 网段 (Cluster CIDR),部署前路由不可达,**部署后**路由可达(flanneld保证)
CLUSTER_CIDR="172.30.0.0/16"

# 服务端口范围 (NodePort Range)
export NODE_PORT_RANGE="8400-9000"

# etcd 集群服务地址列表
export ETCD_ENDPOINTS="https://10.20.42.17:2379,https://10.20.42.22:2379,https://10.20.42.172:2379"

# flanneld 网络配置前缀
export FLANNEL_ETCD_PREFIX="/kubernetes/network"

# kubernetes 服务 IP (一般是 SERVICE_CIDR 中第一个IP)
export CLUSTER_KUBERNETES_SVC_IP="10.254.0.1"

# 集群 DNS 服务 IP (从 SERVICE_CIDR 中预分配)
export CLUSTER_DNS_SVC_IP="10.254.0.2"

# 集群 DNS 域名
export CLUSTER_DNS_DOMAIN="cluster.local."
EOF
 
4.创建 CA 证书和秘钥
(1)创建 CA 配置文件
 cat > ca-config.json <<EOF
{
  "signing": {
    "default": {
      "expiry": "8760h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "8760h"
      }
    }
  }
}
EOF
参数说明:
ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;
signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE;
server auth:表示 client 可以用该 CA 对 server 提供的证书进行验证;
client auth:表示 server 可以用该 CA 对 client 提供的证书进行验证
(2)创建 CA 证书签名请求:
cat > ca-csr.json <<EOF
{
  "CN": "kubernetes",
  "key": {
    "algo": "rsa",
    "size": 2048创建 CA 证书和秘钥

  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF
参数说明:
"CN":Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法;
"O":Organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group);
(3)生成 CA 证书和私钥
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
(4)分发证书
拷贝证书到所有机器上(manager及node节点)
mkdir -p /etc/kubernetes/ssl
cp ca* /etc/kubernetes/ssl
 
5.部署高可用 etcd 集群
这三个节点复用 kubernetes master 机器,分别命名
etcd-host0:10.20.42.17
etcd-host1:10.20.42.22
etcd-host2:10.20.42.172
(1)设置etcd所需环境变量
export NODE_NAME=etcd-host0 # 当前部署的机器名称(随便定义,只要能区分不同机器即可)
export NODE_IP=10.20.42.17 # 当前部署的机器 IP
export NODE_IPS="10.20.42.17 10.20.42.22 10.20.42.172" # etcd 集群所有机器 IP
# etcd 集群间通信的IP和端口
export ETCD_NODES=etcd-host0=https://10.20.42.17:2380,etcd-host1=https://10.20.42.22:2380,etcd-host2=https://10.20.42.172:2380
# 导入用到的其它全局变量:ETCD_ENDPOINTS、FLANNEL_ETCD_PREFIX、CLUSTER_CIDR
source /root/local/bin/environment.sh
(2)创建 TLS 秘钥和证书
cat > etcd-csr.json <<EOF
{
  "CN": "etcd",
  "hosts": [
    "127.0.0.1",
    "${NODE_IP}"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF
参数说明:hosts 字段指定授权使用该证书的 etcd 节点 IP;
(3)生成 etcd 证书和私钥:
cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem \
  -ca-key=/etc/kubernetes/ssl/ca-key.pem \
  -config=/etc/kubernetes/ssl/ca-config.json \
  -profile=kubernetes etcd-csr.json | cfssljson -bare etcd
mkdir -p /etc/etcd/ssl
mv etcd*.pem /etc/etcd/ssl
(4)创建 etcd 的 systemd unit 文件
mkdir -p /var/lib/etcd  # 必须先创建工作目录
 cat > etcd.service <<EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos

[Service]
Environment=ETCD_UNSUPPORTED_ARCH=mips64le
Type=notify
WorkingDirectory=/var/lib/etcd/
ExecStart=/root/local/bin/etcd \\
  --name=${NODE_NAME} \\
  --cert-file=/etc/etcd/ssl/etcd.pem \\
  --key-file=/etc/etcd/ssl/etcd-key.pem \\
  --peer-cert-file=/etc/etcd/ssl/etcd.pem \\
  --peer-key-file=/etc/etcd/ssl/etcd-key.pem \\
  --trusted-ca-file=/etc/kubernetes/ssl/ca.pem \\
  --peer-trusted-ca-file=/etc/kubernetes/ssl/ca.pem \\
  --initial-advertise-peer-urls=https://${NODE_IP}:2380 \\
  --listen-peer-urls=https://${NODE_IP}:2380 \\
  --listen-client-urls=https://${NODE_IP}:2379,http://127.0.0.1:2379 \\
  --advertise-client-urls=https://${NODE_IP}:2379 \\
  --initial-cluster-token=etcd-cluster-0 \\
  --initial-cluster=${ETCD_NODES} \\
  --initial-cluster-state=new \\
  --data-dir=/var/lib/etcd
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF
参数说明:
指定 etcd 的工作目录和数据目录为 /var/lib/etcd,需在启动服务前创建这个目录;
为了保证通信安全,需要指定 etcd 的公私钥(cert-file和key-file)、Peers 通信的公私钥和 CA 证书(peer-cert-file、peer-key-file、peer-trusted-ca-file)、客户端的CA证书(trusted-ca-file);
--initial-cluster-state 值为 new 时,--name 的参数值必须位于 --initial-cluster 列表中;
 
(5)启动etcd服务
mv etcd.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable etcd
systemctl start etcd
在所有的 etcd 节点重复上面的步骤,直到所有机器的 etcd 服务都已启动。
(6)验证服务
部署完 etcd 集群后,在任一 etcd 集群节点上执行如下命令
for ip in ${NODE_IPS}; do
  ETCDCTL_API=3 /root/local/bin/etcdctl \
  --endpoints=https://${ip}:2379  \
  --cacert=/etc/kubernetes/ssl/ca.pem \
  --cert=/etc/etcd/ssl/etcd.pem \
  --key=/etc/etcd/ssl/etcd-key.pem \
  endpoint health; done

预期结果:
https://10.20.42.17:2379 is healthy: successfully committed proposal: took = 1.246915ms
https://10.20.42.22:2379 is healthy: successfully committed proposal: took = 1.509229ms
https://10.20.42.172:2379 is healthy: successfully committed proposal: took = 1.519269ms
三台 etcd 的输出均为 healthy 时表示集群服务正常(忽略 warning 信息)。
 
6.部署 kubectl 命令行工具

kubectl 默认从 ~/.kube/config 配置文件获取访问 kube-apiserver 地址、证书、用户名等信息,如果没有配置该文件,执行命令时出错:
kubectl get pods
The connection to the server localhost:8080 was refused - did you specify the right host or port?
下面介绍配置 kubernetes 集群命令行工具 kubectl 的步骤。
需要将下载的 kubectl 二进制程序和生成的 ~/.kube/config 配置文件拷贝到所有使用 kubectl 命令的机器。
(1)部署 kubectl需要的变量
export MASTER_IP=10.64.3.7 
# 替换为 kubernetes master 集群任一机器 IP
export KUBE_APISERVER="https://${MASTER_IP}:6443"
说明:
变量 KUBE_APISERVER 指定 kubelet 访问的 kube-apiserver 的地址,后续被写入 ~/.kube/config 配置文件;
(2)创建 admin 证书
ubectl 与 kube-apiserver 的安全端口通信,需要为安全通信提供 TLS 证书和秘钥。
创建 admin 证书签名请求
cat > admin-csr.json <<EOF
{
  "CN": "admin",
  "hosts": ,
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}
EOF
参数说明:
后续 kube-apiserver 使用 RBAC 对客户端(如 kubelet、kube-proxy、Pod)请求进行授权;
kube-apiserver 预定义了一些 RBAC 使用的 RoleBindings,如 cluster-admin 将 Group system:masters 与 Role cluster-admin 绑定,该 Role 授予了调用kube-apiserver 所有 API的权限;
O 指定该证书的 Group 为 system:masters,kubelet 使用该证书访问 kube-apiserver 时 ,由于证书被 CA 签名,所以认证通过,同时由于证书用户组为经过预授权的 system:masters,所以被授予访问所有 API 的权限;
hosts 属性值为空列表
(3)生成 admin 证书和私钥:
cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem \
  -ca-key=/etc/kubernetes/ssl/ca-key.pem \
  -config=/etc/kubernetes/ssl/ca-config.json \
  -profile=kubernetes admin-csr.json | cfssljson -bare admin
mv admin*.pem /etc/kubernetes/ssl/
rm admin.csr admin-csr.json
(4)创建 kubectl kubeconfig 文件
# 设置集群参数
 kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/ssl/ca.pem \
  --embed-certs=true \
  --server=${KUBE_APISERVER}
# 设置客户端认证参数
 kubectl config set-credentials admin \
  --client-certificate=/etc/kubernetes/ssl/admin.pem \
  --embed-certs=true \
  --client-key=/etc/kubernetes/ssl/admin-key.pem
 # 设置上下文参数
kubectl config set-context kubernetes \
  --cluster=kubernetes \
  --user=admin
 # 设置默认上下文
 kubectl config use-context kubernetes
参数说明:
admin.pem 证书 O 字段值为 system:masters,kube-apiserver 预定义的 RoleBinding cluster-admin 将 Group system:masters 与 Role cluster-admin 绑定,该 Role 授予了调用kube-apiserver 相关 API 的权限;
生成的 kubeconfig 被保存到 ~/.kube/config 文件;
(5)分发 kubeconfig 文件
将 ~/.kube/config 文件拷贝到运行 kubelet 命令的机器的 ~/.kube/ 目录下。
 
7.部署 Flannel 网络

(1)使用的变量
export NODE_IP=10.20.42.17 # 当前部署节点的 IP
# 导入用到的其它全局变量:ETCD_ENDPOINTS、FLANNEL_ETCD_PREFIX、CLUSTER_CIDR
 source /root/local/bin/environment.sh
(2)创建 TLS 秘钥和证书
  创建 flanneld 证书签名请求
cat > flanneld-csr.json <<EOF
{
  "CN": "flanneld",
  "hosts": ,
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF
参数说明:
hosts 字段为空;
生成 flanneld 证书和私钥
cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem \
  -ca-key=/etc/kubernetes/ssl/ca-key.pem \
  -config=/etc/kubernetes/ssl/ca-config.json \
  -profile=kubernetes flanneld-csr.json | cfssljson -bare flanneld
mkdir -p /etc/flanneld/ssl
mv flanneld*.pem /etc/flanneld/ssl
rm flanneld.csr  flanneld-csr.json
(3)向 etcd 写入集群 Pod 网段信息
/root/local/bin/etcdctl \
  --endpoints=${ETCD_ENDPOINTS} \
  --ca-file=/etc/kubernetes/ssl/ca.pem \
  --cert-file=/etc/flanneld/ssl/flanneld.pem \
  --key-file=/etc/flanneld/ssl/flanneld-key.pem \
  set ${FLANNEL_ETCD_PREFIX}/config '{"Network":"'${CLUSTER_CIDR}'", "SubnetLen": 24, "Backend": {"Type": "vxlan"}}'
参数说明:
flanneld 目前版本 (v0.7.1) 不支持 etcd v3,故使用 etcd v2 API 写入配置 key 和网段数据;
写入的 Pod 网段(${CLUSTER_CIDR},172.30.0.0/16) 必须与 kube-controller-manager 的 --cluster-cidr 选项值一致;
(4)创建 flanneld 的 systemd unit 文件
cat > flanneld.service << EOF
[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
After=network-online.target
Wants=network-online.target
After=etcd.service
Before=docker.service

[Service]
Type=notify
ExecStart=/root/local/bin/flannel \\
  -etcd-cafile=/etc/kubernetes/ssl/ca.pem \\
  -etcd-certfile=/etc/flanneld/ssl/flanneld.pem \\
  -etcd-keyfile=/etc/flanneld/ssl/flanneld-key.pem \\
  -etcd-endpoints=${ETCD_ENDPOINTS} \\
  -etcd-prefix=${FLANNEL_ETCD_PREFIX}
ExecStartPost=/root/local/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker
Restart=on-failure

[Install]
WantedBy=multi-user.target
RequiredBy=docker.service
EOF
(5)启动 flanneld
 cp flanneld.service /etc/systemd/system/
 systemctl daemon-reload
 systemctl enable flanneld
 systemctl start flanneld
 
出现错误:
I1218 11:00:26.022231 11623 main.go:482] Using interface with name enp5s0 and address 10.20.42.17
I1218 11:00:26.022478 11623 main.go:499] Defaulting external address to interface address (10.20.42.17)
2017-12-18 11:00:26.027271 I | warning: ignoring ServerName for user-provided CA for backwards compatibility is deprecated
I1218 11:00:26.027501 11623 main.go:234] Created subnet manager: Etcd Local Manager with Previous Subnet: 0.0.0.0/0
I1218 11:00:26.027560 11623 main.go:237] Installing signal handlers
I1218 11:00:26.197651 11623 main.go:347] Found network config - Backend type: vxlan
I1218 11:00:26.197811 11623 vxlan.go:119] VXLAN config: VNI=1 Port=0 GBP=false DirectRouting=false
E1218 11:00:26.200720 11623 main.go:279] Error registering network: operation not supported
I1218 11:00:26.200802 11623 main.go:327] Stopping shutdownHandler...
提示内容:网络注册失败
经查找,原因为:当前loongnix系统内核版本为3.10,而vxlan的最低内核版本为3.14+,所以无法部署flannel,部署工作暂时中止
 
kubernetes源代码及编译后的二进制文件下载地址

《在龙芯上自己编写“壁纸切换器”》

renyafei 发表了文章 • 3 个评论 • 407 次浏览 • 2017-12-13 11:38 • 来自相关话题

为什么要在龙芯平台上编写"壁纸切换器"              因为在Linux上没有找到好的开源软件,例如360壁纸软件、PC机上的动态壁纸软件都没有再龙芯平台上更好的兼容。所以需要编写能在龙芯平台运行的“壁纸切换器”。开发语言:为什么 ...查看全部
  • 为什么要在龙芯平台上编写"壁纸切换器"
              因为在Linux上没有找到好的开源软件,例如360壁纸软件、PC机上的动态壁纸软件都没有再龙芯平台上更好的兼容。所以需要编写能在龙芯平台运行的“壁纸切换器”。
  • 开发语言:为什么要使用Python?
             Python语言的优点:免费、开源、可高层语言、可移植性、解释性、面向对象、可扩展性、丰富的库、规范的代码等,由于Python的开源本质和可移植性的特点,Python已经被移植在许多平台上,这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC、Symbian以及Google基于linux开发的Android平台!所以Python程序无需修改就可以在上述任何平台上面运行!而且Python语言写的程序不需要编译成二进制代码,可以直接从源代码运行程序。
  • 程序架构
             配置文件:.wallpaper.conf 使用的是json的格式             为什么使用json?             JSON是一种轻量级的数据交换格式,它基于JavaScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。             读取图片文件:一是本机上存放的图片,二是络上的FTP存放的图片              读取本机上的主要任务是,根据配置文件中图片的目录,读取该目录下的所有图片名称,再根据目录加集合里的图片名称用dconf命令更改桌面背景图片,和修改锁定屏幕的背景图片读取FTP上的图片,首先要根据FTP上存放图片的路径,把图片读取到本机上,再根据本机上的目录,读取该目录下的所有图片名称,再根据目录加集合里的图片名称用dconf命令更改桌面背景图片,和修改锁定屏幕的背景图片。                         怎样更新壁纸:手动修改.wallpaper.conf配置文件后,进入终端以root用户执行  
    # python changeconfig.py
               命令,就会重新读取修改后的图片目录。            开机后执行壁纸切换:             向/etc/xdg/autostart/目录下,增加了wallpaper.desktop文件,那么Fedora21操作系统就会开机自启动壁纸切换。             定时运行:            根据配置文件制定的时间,利用sleep()函数来执行定时切换图片的功能。             更新配置:信号机制              在主程序中,我们首先使用signal.signal()函数来预设信号处理函数。等待信号,当信号SIGUSR1被传递给该进程时,进程从暂停中恢复,并根据预设,执行SIGTSTP的信号处理函数myHandler()。我们可以根据自己的需要更改myHandler()中的操作,以针对不同的信号实现个性化的处理。            后台程序,自动运行              在打开终端后,以root用户运行wallpaper-1.0.1.sh后,可以关闭终端,进程会在后台运行,会定时切换壁纸。
  • 网址
               本项目已经开放代码
   https://github.com/renyafei-loongson/wallpaper   
 
  • 总结

            龙芯已经具有自由开发应用的能力,龙芯应用生态必将蓬勃发展。


wallpaper.png


架构图.png


pintu.png


wall.png

 

3A3000开发板上构建发布版本的ISO, 约1600个包,需要多久时间?

wanghonghu 回复了问题 • 3 人关注 • 2 个回复 • 420 次浏览 • 2017-12-12 18:55 • 来自相关话题

portainer 1.14.3 移植

admin 发表了文章 • 0 个评论 • 282 次浏览 • 2017-12-12 15:21 • 来自相关话题

版本号:portainer:1.14.3 简介:Docker 的图形化管理工具,提供状态显示面板、应用模板快速部署、容器 镜像网络数据卷的基本操作、事件日志显示、容器控制台操作、Swarm 集群和服 务等集中管理和操作、登录用户管理和 ...查看全部
版本号:portainer:1.14.3

简介:Docker 的图形化管理工具,提供状态显示面板、应用模板快速部署、容器 镜像网络数据卷的基本操作、事件日志显示、容器控制台操作、Swarm 集群和服 务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足 中小型单位对容器管理的全部需求。

官网地址:git clone -b 1.14.3 https://github.com/portainer/portainer.git 源代码(修改之前)、(修改之后):

集成到 fc21 平台的镜像导出的 tar 包下载 :loongson-portainer.tar 编译文档: 参看 http://ask.loongnix.org/?/article/90

成品二进制: 已经集成到 fc21 平台
测试报告:无
使用说明:
下载 loongson-portainer.tar 包后( 见附件),打开终端,进入这个包所在的目录下: 终端输入命令,

# cat loongson-portainer.tar | docker import - loongson-portainer

# docker run -i -t --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock loongson-portainer

打开浏览器,输入网址 http://localhost:9000
 

loongson2f_龙芯灵珑9S2A一体机尝试usb和硬盘两种方式安装debian6成功

linkasm 发表了文章 • 5 个评论 • 606 次浏览 • 2017-11-21 23:18 • 来自相关话题

我的龙芯一体机的配置是:cpu:loongson 2f,内存:换成了1G(注意,亲测,换成2G的内存无法安装) 龙芯debian6系统是下载至 www.anheng.com.cn/loongson/install/lynloong_2f_9003/ ...查看全部
我的龙芯一体机的配置是:cpu:loongson 2f,内存:换成了1G(注意,亲测,换成2G的内存无法安装)
龙芯debian6系统是下载至 www.anheng.com.cn/loongson/install/lynloong_2f_9003/
的   lynloong_debian6_install.tar.gz
将下载的 lynloong_debian6_install.tar.gz 文件解压得到三个文件,分别是:

boot.cfg  ,   install_lyn  ,   lynoong_debian6_20111226.tar.lzma 

安装时分两种情况,一种是usb方式安装,另外一种是硬盘方式安装
 
详细的过程我在 我的博客  http://blog.csdn.net/v80/article/details/78595967  有详细记录,有需要的

朋友可以参考参考,如果有朋友有关于9S2A一体机的更高版本的系统安装方法,或是其它发行版系统的安装方法,请发布出来让大家都看看

 

(精品)(龙芯公有云系列之一)搭建分布式存储服务etcd

renyafei 发表了文章 • 0 个评论 • 658 次浏览 • 2017-11-03 11:21 • 来自相关话题

etcd 是一个应用在分布式环境下的 key/value 存储服务。     由于Kubernetes要使用到etcd,所以第一步就 ...查看全部
etcd 是一个应用在分布式环境下的 key/value 存储服务。
 

timg.jpg

 

由于Kubernetes要使用到etcd,所以第一步就是进行etcd的搭建。
 
etcd是一个Go语言编写的软件。

 搭建环境
 
本文的实验都是在龙芯3A3000机器上。
操作系统是loongnix(Fedora21)20170512版本。
GO版本:go1.7.5 linux/mips64le
 
开始搭建
 
首先打开终端,配置GOPATH
# export GOPATH=/usr/lib/golang
进入GOPATH目录下
# cd $GOPATH
在$GOPATH的src目录下创建嵌套文件夹github.com/coreos
# mkdir -p $GOPATH/src/github.com/coreos
进入创建的文件夹下
# cd $GOPATH/src/github.com/coreos
下载etcd 2.3.6版本
# git clone  -b  v2.3.6 https://github.com/coreos/etcd.git


进入下载的etcd 文件夹下
# cd etcd
开始编译
# ./build
出现如下错误
github.com/coreos/etcd/Godeps/_workspace/src/github.com/boltdb/bolt
Godeps/_workspace/src/github.com/boltdb/bolt/db.go:98: undefined: maxMapSize
Godeps/_workspace/src/github.com/boltdb/bolt/db.go:98: invalid array bound maxMapSize
根据maxMapSize关键字找原因,使用grep "maxMapSize"  ./* -r 找出路径
# grep "maxMapSize" ./* -r
搜索出如下内容
./Godeps/_workspace/src/github.com/boltdb/bolt/db.go:	data     *[maxMapSize]byte
./Godeps/_workspace/src/github.com/boltdb/bolt/db.go: if size > maxMapSize {
./Godeps/_workspace/src/github.com/boltdb/bolt/db.go: if sz > maxMapSize {
./Godeps/_workspace/src/github.com/boltdb/bolt/db.go: sz = maxMapSize
./Godeps/_workspace/src/github.com/boltdb/bolt/bolt_windows.go: db.data = ((*[maxMapSize]byte)(unsafe.Pointer(addr)))
./Godeps/_workspace/src/github.com/boltdb/bolt/bolt_386.go:// maxMapSize represents the largest mmap size supported by Bolt.
./Godeps/_workspace/src/github.com/boltdb/bolt/bolt_386.go:const maxMapSize = 0x7FFFFFFF // 2GB
./Godeps/_workspace/src/github.com/boltdb/bolt/bolt_amd64.go:// maxMapSize represents the largest mmap size supported by Bolt.
./Godeps/_workspace/src/github.com/boltdb/bolt/bolt_amd64.go:const maxMapSize = 0xFFFFFFFFFFFF // 256TB
./Godeps/_workspace/src/github.com/boltdb/bolt/bolt_ppc64le.go:// maxMapSize represents the largest mmap size supported by Bolt.
./Godeps/_workspace/src/github.com/boltdb/bolt/bolt_ppc64le.go:const maxMapSize = 0xFFFFFFFFFFFF // 256TB
./Godeps/_workspace/src/github.com/boltdb/bolt/bolt_unix_solaris.go: db.data = (*[maxMapSize]byte)(unsafe.Pointer(&b[0]))
./Godeps/_workspace/src/github.com/boltdb/bolt/bolt_arm64.go:// maxMapSize represents the largest mmap size supported by Bolt.
./Godeps/_workspace/src/github.com/boltdb/bolt/bolt_arm64.go:const maxMapSize = 0xFFFFFFFFFFFF // 256TB
./Godeps/_workspace/src/github.com/boltdb/bolt/bolt_s390x.go:// maxMapSize represents the largest mmap size supported by Bolt.
./Godeps/_workspace/src/github.com/boltdb/bolt/bolt_s390x.go:const maxMapSize = 0xFFFFFFFFFFFF // 256TB
./Godeps/_workspace/src/github.com/boltdb/bolt/bolt_arm.go:// maxMapSize represents the largest mmap size supported by Bolt.
./Godeps/_workspace/src/github.com/boltdb/bolt/bolt_arm.go:const maxMapSize = 0x7FFFFFFF // 2GB
./Godeps/_workspace/src/github.com/boltdb/bolt/bolt_unix.go: db.data = (*[maxMapSize]byte)(unsafe.Pointer(&b[0]))

 根据错误提示分析,是因为在 ./Godeps/_workspace/src/github.com/boltdb/bolt 文件夹下,
缺少了支持mips64le平台的文件。
进入这个目录下添加bolt_mips64le.go文件:
# cd ./Godeps/_workspace/src/github.com/boltdb/bolt
# cp bolt_arm.go bolt_mips64le.go
重新进入etcd文件夹下,开始编译
# cd $GOPATH/src/github.com/coreos/etcd
# ./build
出现如下错误
2017-11-02 11:58:50.257747 E | etcdmain: etcd on unsupported platform without ETCD_UNSUPPORTED_ARCH=mips64le set.
这是因为没有配置ETCD_UNSUPPORTED_ARCH环境变量
配置环境变量
# export ETCD_UNSUPPORTED_ARCH=mips64le
再次编译
# ./build
执行通过,在etcd文件夹里会生成bin文件夹,进入bin文件夹
# cd bin 
 
把bin文件夹下的etcd、etcdctl两个文件拷贝到/usr/bin文件夹下
# cp etcd  /usr/bin/ 
# cp etcdctl /usr/bin/


 进入/usr/bin下
# cd /usr/bin

 执行测试

 执行etcd文件
# ./etcd
2017-11-02 19:57:52.098590 W | etcdmain: running etcd on unsupported architecture "mips64le" since ETCD_UNSUPPORTED_ARCH is set
2017-11-02 19:57:52.099742 W | flags: unrecognized environment variable ETCD_UNSUPPORTED_ARCH=mips64le
2017-11-02 19:57:52.099870 I | etcdmain: etcd Version: 2.3.6
2017-11-02 19:57:52.099924 I | etcdmain: Git SHA: 128344c
2017-11-02 19:57:52.099974 I | etcdmain: Go Version: go1.7.5
2017-11-02 19:57:52.100021 I | etcdmain: Go OS/Arch: linux/mips64le
2017-11-02 19:57:52.100074 I | etcdmain: setting maximum number of CPUs to 4, total number of available CPUs is 4
2017-11-02 19:57:52.100145 W | etcdmain: no data-dir provided, using default data-dir ./default.etcd
2017-11-02 19:57:52.101051 I | etcdmain: listening for peers on http://localhost:2380
2017-11-02 19:57:52.101273 I | etcdmain: listening for peers on http://localhost:7001
2017-11-02 19:57:52.101483 I | etcdmain: listening for client requests on http://localhost:2379
2017-11-02 19:57:52.101683 I | etcdmain: listening for client requests on http://localhost:4001
2017-11-02 19:57:52.105386 I | etcdserver: name = default
2017-11-02 19:57:52.105674 I | etcdserver: data dir = default.etcd
2017-11-02 19:57:52.105741 I | etcdserver: member dir = default.etcd/member
2017-11-02 19:57:52.105794 I | etcdserver: heartbeat = 100ms
2017-11-02 19:57:52.105845 I | etcdserver: election = 1000ms
2017-11-02 19:57:52.105896 I | etcdserver: snapshot count = 10000
2017-11-02 19:57:52.105968 I | etcdserver: advertise client URLs = http://localhost:2379,http://localhost:4001
2017-11-02 19:57:52.106025 I | etcdserver: initial advertise peer URLs = http://localhost:2380,http://localhost:7001
2017-11-02 19:57:52.106204 I | etcdserver: initial cluster = default=http://localhost:2380,default=http://localhost:7001
2017-11-02 19:57:52.115937 I | etcdserver: starting member ce2a822cea30bfca in cluster 7e27652122e8b2ae
2017-11-02 19:57:52.116104 I | raft: ce2a822cea30bfca became follower at term 0
2017-11-02 19:57:52.116172 I | raft: newRaft ce2a822cea30bfca [peers: [], term: 0, commit: 0, applied: 0, lastindex: 0, lastterm: 0]
2017-11-02 19:57:52.116223 I | raft: ce2a822cea30bfca became follower at term 1
2017-11-02 19:57:52.116829 I | etcdserver: starting server... [version: 2.3.6, cluster version: to_be_decided]
2017-11-02 19:57:52.118591 E | etcdmain: failed to notify systemd for readiness: No socket
2017-11-02 19:57:52.118642 E | etcdmain: forgot to set Type=notify in systemd service file?
2017-11-02 19:57:52.119456 N | etcdserver: added local member ce2a822cea30bfca [http://localhost:2380 http://localhost:7001] to cluster 7e27652122e8b2ae
2017-11-02 19:57:52.516914 I | raft: ce2a822cea30bfca is starting a new election at term 1
2017-11-02 19:57:52.517204 I | raft: ce2a822cea30bfca became candidate at term 2
2017-11-02 19:57:52.517241 I | raft: ce2a822cea30bfca received vote from ce2a822cea30bfca at term 2
2017-11-02 19:57:52.517327 I | raft: ce2a822cea30bfca became leader at term 2
2017-11-02 19:57:52.517369 I | raft: raft.node: ce2a822cea30bfca elected leader ce2a822cea30bfca at term 2
2017-11-02 19:57:52.518315 I | etcdserver: published {Name:default ClientURLs:[http://localhost:2379 http://localhost:4001]} to cluster 7e27652122e8b2ae
2017-11-02 19:57:52.518664 I | etcdserver: setting up the initial cluster version to 2.3
2017-11-02 19:57:52.525866 N | etcdserver: set the initial cluster version to 2.3

 再另一个终端中测试
# etcdctl set /foo/bar  “hello world”
输出“hello world”说明启动成功。
 
这样,etcd就搭建成功了,整个过程还是很简单的,改动的代码不算多,运行也比较顺利。
 
后面将继续移植Kubernetes,好期待啊!

loongnix的源码和二进制包可以通过rsync同步吗?

jiang_10000 回复了问题 • 2 人关注 • 2 个回复 • 649 次浏览 • 2017-11-27 08:47 • 来自相关话题