[Linux]우분투 설치과정

정원석·2023년 10월 21일

리눅스를 쓰게된 배경

학교 졸업 과제로 캡스톤 진행을 위해 리눅스 상에서 c언어를 이용한 소켓프로그래밍을 하게 되었다. 현재 가지고 있는 노트북은 윈도우 기반이라 virtual box를 이용한 리눅스 환경을 구축해야 했다. virtualbox에서 리눅스 환경구축 과정에서 겪었던 어려웠던 과정을 적어보겠다.

virtualbox 에서 우분투 설치

virtualbox는 설치되어 있다고 생각하겠다. 다음의 링크에서 우분투의 ISO image 최신버전 파일을 다운받아야 한다. virtualbox의 우분투 설치과정은 ISO파일에서 이미지파일을 리눅스가 이용해 우분투를 구현하는 방식이다.
https://ubuntu.com/download/desktop 우분투 iso설치
ISO image파일을 구버전으로 다운받고 리눅스 우분투를 실행시켰을 때 최신버전의 우분투를 사용할 수 없다. 이는 나중에 여러 버전문제에 마주할 수 있다.
다음은 ISO image를 다운 받아 선택했을 때의 모습이다.ISO를 최신버전이 아닌 구버전으로 선택했을 때 다음과 같이 선택했던 모습을 볼 수 있다.
우분투 설치 과정에서 실수했던 과정을 보여주며 정정해나가겠다.
시작부터 우분투를 설치해야 하는데 설치버튼이 안보인다. 구글링을 해보면 화면의 비율을 조정하라는 글이 대부분이지만 내 컴퓨터로는 그렇게 했을 때 설치가 완료되기 전에 소프트웨어가 꼬여 끝까지 진행되지 않았다. 이때 해결방법은 Alt + F7을 누르면 화면을 움직일 수 있다. 화면을 잡아 살짝 올려주면 설치버튼이 보임을 알 수 있다.여기선 계속하기와 다음만 누르며 설치완료 하면 된다. 설치완료가 되면 다음과 같은 화면이 나타난다.이제 터미널 환경에서 다음의 명령어들로 개발환경을 만들어야 한다.

sudo apt update
sudo apt install build-essential
sudo apt-get install vim 

다음의 명령어로 개발환경을 만들면 기본적인 파일생성, 컴파일은 가능하다. 하지만 캡스톤 과제를 진행하면서 openssl을 사용해야 하지만 버전이 낮아 실행이 안되는 문제에 부딛혔다.

openssl 버전이 1.1.1f 임을 알 수 있다. 이 버전은 헤더파일이 최신버전과 달라 코드 실행시 다음의 에러가 발생한다. 다음의 코드를 컴파일 했다.

#include <stdio.h>
#include <openssl/hmac.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#define BUFSIZE 10

void get_fileMac(int fd, char *key)
{
	int i;
	size_t len;
	OSSL_PARAM params[2];
	unsigned char out[1024], nn[1024], buf[BUFSIZE];

	EVP_MAC *mac = EVP_MAC_fetch(NULL, "HMAC", NULL);
	EVP_MAC_CTX *ctx = EVP_MAC_CTX_new(mac);
	EVP_MAC_free(mac);

	params[0] = OSSL_PARAM_construct_utf8_string("digest", "SHA256", 0);
	params[1] = OSSL_PARAM_construct_end();

	EVP_MAC_init(ctx, key, strlen(key), params);
	while((i=read(fd, buf, BUFSIZE))>0){
		EVP_MAC_update(ctx, buf, i);
	}
	EVP_MAC_final(ctx, out, &len, sizeof(out));

	printf("sha256 mac    =");
	for(i = 0 ; i<len ; i++){
		printf("%02x", out[i]);
		//sprintf(nn + (i*2), "%02x", out[i]);
	}
	printf("\n");
}

int main(int argc, char *argv[])
{
	int fd;
	
	if((fd = open(argv[1], O_RDONLY))<0){
		printf("file open error\n");
		exit(1);
	}

	get_fileMac(fd, argv[2]);
}

다음의 헤더파일의 문제를 해결하기 위해 굉장히 오랜 시간이 걸렸다. 일단 openssl의 개발자가 개발하기 위해 openssl의 헤더파일을 다운받아야 한다.

sudo apt get install libssl-dev

라이브러리 문제라고 해서 다운받았지만 다음의 그림과 같이 해결되지 않는 모습이다.
개발자용 헤더파일을 받았지만 헤더파일이 없어서 실행되지 않는 모습이다.
이제 우분투22.04 ISO image파일을 받아 다시 실행 해보겠다.


우분투22.04 버전으로 시작하면 다음과 같은 화면으로 시작한다.
터미널에서 앞의 개발환경을 구축 후 다음 명령어로 openssl 버전을 확인하면 다음과 같다.

openssl version


바로 openssl 3.0.2 버전으로 업그레이드 된 것을 확인할 수 있다. 이후 코드를 컴파일 해보면 다음과 같이 잘 작동하는 것을 볼 수 있다.

profile
Back-End-Dev

0개의 댓글