ollama编译安装@focal jammy Ubuntu @FreeBSD jail

 Ollama是一个用于在本地运行大型语言模型(LLM)的开源框架。它支持多种操作系统,但是唯独不支持FreeBSD,于是尝试在FreeBSD的jail里安装Ubuntu,Ubuntu里再安装ollama。

先上结论,好像focal jail无法编译成功,jammy jail还没做实验,jammy bhyve可以编译安装成功。

如果go的版本较低,需要升级go版本。

ollama最快的安装方法是直接执行:

curl -fsSL https://ollama.com/install.sh | sh

但是国内速度非常慢,可以选择编译安装 

如果jail需要sudo -S才能用sudo,那么需要修改install.sh文件,把里面的sudo改成sudo -S 

ollama编译安装

首先下载软件

git clone https://github.com/ollama/ollama

然后到ollama目录执行go generate:

go generate ./...

这段时间较长 ,因为要编译llama.cpp等包。最后generate完成

+ git checkout examples/llava/clip.cpp
Updated 0 paths from the index
+ for patch in ../patches/*.diff
++ grep '^+++ ' ../patches/09-pooling.diff
++ cut -f2 '-d '
++ cut -f2- -d/
+ for file in $(grep "^+++ " ${patch} | cut -f2 -d' ' | cut -f2- -d/)
+ cd ../llama.cpp
+ git checkout src/llama.cpp
Updated 0 paths from the index
++ cd ../build/linux/x86_64/cpu_avx2/..
++ echo cpu cpu_avx cpu_avx2
+ echo 'go generate completed.  LLM runners: cpu cpu_avx cpu_avx2'
go generate completed.  LLM runners: cpu cpu_avx cpu_avx2

然后build

go build .

如果go比较慢,可以加速:

#启用 Go Modules 功能
export GO111MODULE=on
#配置 GOPROXY 环境变量
export GOPROXY=https://goproxy.io

如果Ubuntu没有安装一些依赖包,那么可以apt安装

apt install cmake go

Ubuntu 版本里面自带的go版本较低,若build ollama的时候报错,需要升级go到新版本

升级go操作

下载go软件地址:All releases - The Go Programming Language 

从上面下载地址找到自己需要的平台版本,然后使用wget下载软件:

https://go.dev/dl/go1.22.5.linux-amd64.tar.gz

wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz

 解压缩

tar -xzvf go1.22.5.linux-amd64.tar.gz

解压缩之后直接添加路径就能使用新版本了:

export PATH=/home/skywalk/download/go/bin:$PATH

路径设好,新版本go安装完了,这样就能愉快的使用go的新版本拉!

go加速网站:GOPROXY.IO - A Global Proxy for Go Modules

加速命令: 

# Set the GOPROXY environment variable
export GOPROXY=https://goproxy.io,direct
# Set environment variable allow bypassing the proxy for specified repos (optional)
export GOPRIVATE=git.mycompany.com,github.com/my/private

调试

build报错cannot load cmp: malformed module path "cmp": 

build的死后报错信息: 

go: finding github.com/leodido/go-urn v1.4.0
build github.com/ollama/ollama: cannot load cmp: malformed module path "cmp": missing dot in first path element

难道目录一定要github.com ? 改成github.com目录,还是报错

build github.com/ollama/ollama: cannot load cmp: malformed module path "cmp": missing dot in first path element

原来不是目录的事,我就说不能要求父目录的格式啊,况且以前也没碰到过要改目录名的情况。最终发现是go版本低的问题,改成go的1.23.x新版本,问题解决!

安装go新版本的方法见上面,也可以参考文章:Ubuntu linux安装新版本go-CSDN博客

jail里sudo 报错Name or service not known

root@ubfocal:~# sudo ls
sudo: unable to resolve host ubfocal.my.domain: Name or service not known

sudo倒是能执行,但是有报错,强迫症受不了,于是找到解决方法:
写host的文件,加入主机名和带域名的主机名

cat /etc/hosts
127.0.0.1	localhost
127.0.0.1 ubfocal
127.0.0.1 ubfocal.my.domain

jail里个人用户sudo报错sudo: a terminal is required to read the password; either use the -S option

这是普通Ubuntu装机用户永远也不会碰到的问题,只有在FreeBSD里的linux jail里才会碰到,众所周知FreeBSD的用户占比很小,再安装Jail,jail里再安装Ubuntu的,就更少了,所以这个问题非常罕见。

~$ sudo ls
sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper

按照报错提示,使用sudo -S 后面跟要执行的命令,问题解决。如果是在install.sh这样的执行文件里用到了sudo指令,需要打文件里加上-S参数。
 

jail里个人用户git clone报错open /dev/null or dup failed: Permission denied

@ubfocal:~/github.com$ git clone --deptch 1 https://github.com/ollama/ollama
fatal: open /dev/null or dup failed: Permission denied
@ubfocal:~/github.com$ ls -l /dev/null
-rw-r--r-- 1 root root 0 Jul 13 07:59 /dev/null

解决方法,把/dev/null权限设为 666

sudo chmod 666 /dev/null

问题解决

用bhyve jammy Ubuntu环境go generate的时候说go版本低

发现bhyve jammy Ubuntu里的go版本1.18,使用apt不方便提高go版本,于是想了个投机取巧的办法:

修改go.mod文件,把 第三行go 1.22.0改成go 1.23  

可以蒙混过去,但是后面go build . 的时候还是报错了

go build .
server/images.go:5:2: package cmp is not in GOROOT (/usr/lib/go-1.18/src/cmp)
envconfig/config.go:6:2: package log/slog is not in GOROOT (/usr/lib/go-1.18/src/log/slog)
gpu/amd_linux.go:12:2: package slices is not in GOROOT (/usr/lib/go-1.18/src/slices)
 

这样证明还是无法投机取巧。只能升级go版本了。

 安装go新版本的方法见上面,也可以参考文章:Ubuntu linux安装新版本go-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/872520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本-linux如何在脚本中远程到一台linux机器并执行命令

需求:我们需要从11.0.1.17远程到11.0.1.16上执行命令 实现: 1.让11.0.1.17 可以免密登录到11.0.1.16 [rootlocalhost ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created d…

【问题记录】Docker配置mongodb副本集实现数据流实时获取

配置mongodb副本集实现数据流实时获取 前言操作步骤1. docker拉取mongodb镜像2. 连接mongo1镜像的mongosh3. 在mongosh中初始化副本集 注意点 前言 由于想用nodejs实现实时获取Mongodb数据流,但是报错显示需要有副本集的mongodb才能实现实时获取信息流,…

扫地机器人如何解决室内空气污染问题

扫地机器人解决室内空气污染问题主要通过以下几个方面来实现: 一、高效清洁减少地面污染源 ① 地面清扫能力:扫地机器人能够自动或手动控制进行地面清扫,有效清除地面上的各种污渍、灰尘和毛发等污染物。这些污染物是室内空气中的重要污染源…

27.js实现鼠标拖拽

e.offsetX是鼠标距离准确事件源的左上角距离 e.clientX是鼠标距离浏览器可视窗口左上角的距离 e.pageX是鼠标距离文档左上角的距离 /* 当鼠标点击div时开始挪动,当鼠标抬起,div静止——事件源是div 当鼠标点击后,鼠标在移动——事件源…

java 前端上传文件后端解析并转发到第三方存储,Hutool 工具

单个文件上传 PostMapping("/upload")public MyResponse<?> upload(MultipartFile file) {if (multipartFiles null || multipartFiles.length 0) {throw new MessageException("未选择文件");}InputStreamResource inputStreamResource new Inp…

通过命令行工作流提升工作效率的实战教程(持续更新)

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

从三个方向来谈谈开源项目有哪些机遇与挑战

开源项目有哪些机遇与挑战&#xff1f; 随着全球经济和科技环境的快速变化&#xff0c;开源软件项目的蓬勃发展成为了开发者社区的热门话题。越来越多的开发者和企业选择参与开源项目&#xff0c;以推动技术创新和实现协作共赢。你如何看待当前开源项目的发展趋势&#xff1f;…

SpringCache介绍

SpringCache是Spring提供的缓存框架。提供了基于注解的缓存功能。 SpringCache提供了一层抽象&#xff0c;底层可以切换不同的缓存实现&#xff08;只需要导入不同的Jar包即可&#xff09;&#xff0c;如EHCache&#xff0c;Caffeine&#xff0c;Redis。 2个重要依赖已经导入&a…

Vue 3中常用的生命周期钩子和监听器的详细分析

目录 前言1. onMounted2. watch3. computed4. 其他 前言 分析常用的一些生命周期钩子和监听器可以帮助我们在组件中处理数据加载、状态变化和响应式更新 1. onMounted 生命周期钩子&#xff0c;在组件挂载后执行。它适合用于初始化数据加载或执行一次性的操作 <template…

简单一阶滤波器设计:matlab和C实现

一、简单一阶滤波器的模型 二、示例 得: y(n)-0.9y(n-1)=x(n)+0.05x(n-1),即:y(n)=0.9y(n-1)+x(n)+0.05x(n-1) 已知:,并且有: A. 假设输入序列有N=100个点 B. 系统初始状态为0,即y(-1)=0 C. 输入序列是因果序列,

分析AI是在帮助开发者还是取代他们

AI在软件开发中起到了辅助作用&#xff0c;帮助开发者提高生产效率和质量。它可以通过代码生成、错误检测和自动化测试等功能&#xff0c;加速开发流程&#xff0c;减少人为错误并改善软件质量。AI工具可以解放开发者的时间和精力&#xff0c;让他们可以更专注于解决复杂问题和…

【OpenRecall】超越 Windows Recall,OpenRecall 为你的隐私和自由而战

引言 随着 Windows 11 的 Recall 功能推出&#xff0c;我们看到了数字记忆回顾的全新可能性。然而&#xff0c;这项功能受限于特定的硬件——Copilot 认证的 Windows 硬件&#xff0c;并且仅在 Windows 平台上可用。对于追求隐私和硬件灵活性的用户来说&#xff0c;这无疑是个…

长按加速- 解决react - setInterval下无法更新问题

最开始直接setInterval里&#xff0c;useState硬写&#xff0c;发现更新不&#xff0c;固定值 换let&#xff0c;发现dom更新不了 正确做法是用ref 并且pc端可以长按的&#xff0c;只是要用onTouchStart&#xff0c;不要用onMouseDown onTouchStart{handleMouseDown} onTou…

在设计电气系统时,电气工程师需要考虑哪些关键因素?

在设计电气系统时&#xff0c;电气工程师需要考虑多个关键因素&#xff0c;以确保系统的安全性、可靠性、效率和经济性。我收集归类了一份plc学习包&#xff0c;对于新手而言简直不要太棒&#xff0c;里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言…

SEO优化文章写作技巧:如何快速写出高排名高质量内容

不知道有多少人跟我一样&#xff0c;并没有接受过专业的seo优化培训&#xff0c;所学seo优化技巧全部都是通过百度查阅文章所得。 在搜索的有关seo优化相关内容里面&#xff0c;基本上都说到&#xff0c;原创优质内容、优质外链、优质友情链接、优质的内链这几个方面&#xff…

如何查看极狐GitLab Helm Chart?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…

word 设置多级混合标题自动更新

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 有没有体会过多级标题&#xff0c;怎么设置都不听使唤的情况&#xff1f; 我想要的格式是&#xff1a; 二、原因分析 多级标题中发现&#xff0c;输入编号格式这里有个数字没有底纹,是了&#xff0…

系统架构设计师教程 第3章 信息系统基础知识-3.1 信息系统概述

系统架构设计师教程 第3章 信息系统基础知识-3.1 信息系统概述 3.1.1 信息系统的定义3.1.1.1 信息系统3.1.1.2 信息化3.1.2 信息系统的发展3.1.2.1 初始阶段3.1.2.2 传播阶段3.1.2.3 控制阶段3.1.2.4 集成阶段3.1.2.5 数据管理阶段3.1.2.6 成熟阶段3.1.3 信息系统的分类3.…

Redis-基础概念

目录 概念 Redis是什么 Redis 和 MySQL 的区别&#xff1f; Redis单线程有什么极端场景的瓶颈 Redis为什么快? 为什么Redis是单线程? Redis是单线程还是多线程 Redis为什么选择单线程做核心处理 Redis6.0之后引入了多线程&#xff0c;你知道为什么吗? 瓶颈是内存和I…

C#进阶-基于.NET Framework 4.x框架实现ASP.NET WebForms项目IP拦截器

在这篇文章中&#xff0c;我们将探讨如何在 ASP.NET WebForms 中实现IP拦截器&#xff0c;以便在 ASMX Web 服务方法 和 HTTP 请求 中根据IP地址进行访问控制。我们将使用自定义的 SoapExtension 和 IHttpModule 来实现这一功能&#xff0c;并根据常用的两种文本传输协议&#…